From fijal at codespeak.net Mon Mar 1 02:08:30 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 02:08:30 +0100 (CET)
Subject: [pypy-svn] r71576 - pypy/trunk/pypy/rlib
Message-ID: <20100301010830.A7A9451054@codespeak.net>
Author: fijal
Date: Mon Mar 1 02:08:28 2010
New Revision: 71576
Modified:
pypy/trunk/pypy/rlib/rmarshal.py
Log:
Force this to be not-necesarilly-nonneg
Modified: pypy/trunk/pypy/rlib/rmarshal.py
==============================================================================
--- pypy/trunk/pypy/rlib/rmarshal.py (original)
+++ pypy/trunk/pypy/rlib/rmarshal.py Mon Mar 1 02:08:28 2010
@@ -261,6 +261,7 @@
loader.need_more_data()
loader.pos = end
return loader.buf[pos:end]
+readstr._annenforceargs_ = [None, int]
def readchr(loader):
pos = loader.pos
From fijal at codespeak.net Mon Mar 1 03:39:08 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 03:39:08 +0100 (CET)
Subject: [pypy-svn] r71577 - pypy/trunk/pypy/rlib
Message-ID: <20100301023908.5141951054@codespeak.net>
Author: fijal
Date: Mon Mar 1 03:38:56 2010
New Revision: 71577
Modified:
pypy/trunk/pypy/rlib/rmmap.py
Log:
I think this is a correct fix for JIT & sandbox - we assumer mmap and friends
are sandbox-safe (they can only work on existing file descs anyway). If we
compile mmap module, this will probably violate sandbox, but we compile sandbox
with no-allworkingmodules anyway
Modified: pypy/trunk/pypy/rlib/rmmap.py
==============================================================================
--- pypy/trunk/pypy/rlib/rmmap.py (original)
+++ pypy/trunk/pypy/rlib/rmmap.py Mon Mar 1 03:38:56 2010
@@ -92,10 +92,11 @@
def external(name, args, result):
return rffi.llexternal(name, args, result,
- compilation_info=CConfig._compilation_info_)
+ compilation_info=CConfig._compilation_info_,
+ sandboxsafe=True, threadsafe=True)
def winexternal(name, args, result):
- return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win')
+ return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win', sandboxsafe=True, threadsafe=True)
PTR = rffi.CCHARP
From fijal at codespeak.net Mon Mar 1 04:06:08 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 04:06:08 +0100 (CET)
Subject: [pypy-svn] r71578 - in pypy/trunk/pypy: jit/backend/x86 rlib/rsre
Message-ID: <20100301030608.0F4D451054@codespeak.net>
Author: fijal
Date: Mon Mar 1 04:05:53 2010
New Revision: 71578
Modified:
pypy/trunk/pypy/jit/backend/x86/codebuf.py
pypy/trunk/pypy/jit/backend/x86/valgrind.py
pypy/trunk/pypy/rlib/rsre/_rsre_platform.py
Log:
Sprinkle sandboxsafe here and there
Modified: pypy/trunk/pypy/jit/backend/x86/codebuf.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/codebuf.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/codebuf.py Mon Mar 1 04:05:53 2010
@@ -155,4 +155,5 @@
separate_module_sources = ['void PYPY_NO_OP(void) {}'],
)
ensure_sse2_floats = rffi.llexternal('PYPY_NO_OP', [], lltype.Void,
- compilation_info=_sse2_eci)
+ compilation_info=_sse2_eci,
+ sandboxsafe=True)
Modified: pypy/trunk/pypy/jit/backend/x86/valgrind.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/valgrind.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/valgrind.py Mon Mar 1 04:05:53 2010
@@ -20,7 +20,8 @@
[llmemory.Address, lltype.Signed],
lltype.Void,
compilation_info=eci,
- _nowrapper=True)
+ _nowrapper=True,
+ sandboxsafe=True)
# ____________________________________________________________
Modified: pypy/trunk/pypy/rlib/rsre/_rsre_platform.py
==============================================================================
--- pypy/trunk/pypy/rlib/rsre/_rsre_platform.py (original)
+++ pypy/trunk/pypy/rlib/rsre/_rsre_platform.py Mon Mar 1 04:05:53 2010
@@ -10,7 +10,8 @@
return rffi.llexternal(name, args, result, compilation_info=eci, **kwds)
tolower = external('tolower', [lltype.Signed], lltype.Signed,
- oo_primitive='tolower')
+ oo_primitive='tolower',
+ sandboxsafe=True)
isalnum = external('isalnum', [lltype.Signed], lltype.Signed,
- oo_primitive='isalnum')
+ oo_primitive='isalnum', sandboxsafe=True)
From fijal at codespeak.net Mon Mar 1 05:14:48 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 05:14:48 +0100 (CET)
Subject: [pypy-svn] r71579 - pypy/trunk/pypy/module/_weakref
Message-ID: <20100301041448.6F4C451054@codespeak.net>
Author: fijal
Date: Mon Mar 1 05:14:30 2010
New Revision: 71579
Modified:
pypy/trunk/pypy/module/_weakref/interp__weakref.py
Log:
kill IMO useless use of __args__
Modified: pypy/trunk/pypy/module/_weakref/interp__weakref.py
==============================================================================
--- pypy/trunk/pypy/module/_weakref/interp__weakref.py (original)
+++ pypy/trunk/pypy/module/_weakref/interp__weakref.py Mon Mar 1 05:14:30 2010
@@ -143,11 +143,7 @@
return w_obj
-def descr__new__weakref(space, w_subtype, w_obj, __args__):
- if __args__.arguments_w:
- w_callable = __args__.arguments_w[0]
- else:
- w_callable = space.w_None
+def descr__new__weakref(space, w_subtype, w_obj, w_callable=None):
lifeline = w_obj.getweakref()
if lifeline is None:
lifeline = WeakrefLifeline(space)
@@ -188,7 +184,7 @@
which is called with the weak reference as an argument when 'obj'
is about to be finalized.""",
__new__ = interp2app(descr__new__weakref,
- unwrap_spec=[ObjSpace, W_Root, W_Root, Arguments]),
+ unwrap_spec=[ObjSpace, W_Root, W_Root, W_Root]),
__eq__ = interp2app(descr__eq__,
unwrap_spec=[ObjSpace, W_Weakref, W_Root]),
__ne__ = interp2app(descr__ne__,
From fijal at codespeak.net Mon Mar 1 05:30:18 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 05:30:18 +0100 (CET)
Subject: [pypy-svn] r71580 - pypy/trunk/pypy/module/_weakref
Message-ID: <20100301043018.988C651054@codespeak.net>
Author: fijal
Date: Mon Mar 1 05:30:03 2010
New Revision: 71580
Modified:
pypy/trunk/pypy/module/_weakref/interp__weakref.py
Log:
Revert 71579, it breaks tests
Modified: pypy/trunk/pypy/module/_weakref/interp__weakref.py
==============================================================================
--- pypy/trunk/pypy/module/_weakref/interp__weakref.py (original)
+++ pypy/trunk/pypy/module/_weakref/interp__weakref.py Mon Mar 1 05:30:03 2010
@@ -141,9 +141,12 @@
if w_obj is None:
return self.space.w_None
return w_obj
-
-def descr__new__weakref(space, w_subtype, w_obj, w_callable=None):
+def descr__new__weakref(space, w_subtype, w_obj, __args__):
+ if __args__.arguments_w:
+ w_callable = __args__.arguments_w[0]
+ else:
+ w_callable = space.w_None
lifeline = w_obj.getweakref()
if lifeline is None:
lifeline = WeakrefLifeline(space)
@@ -184,7 +187,7 @@
which is called with the weak reference as an argument when 'obj'
is about to be finalized.""",
__new__ = interp2app(descr__new__weakref,
- unwrap_spec=[ObjSpace, W_Root, W_Root, W_Root]),
+ unwrap_spec=[ObjSpace, W_Root, W_Root, Arguments]),
__eq__ = interp2app(descr__eq__,
unwrap_spec=[ObjSpace, W_Weakref, W_Root]),
__ne__ = interp2app(descr__ne__,
From fijal at codespeak.net Mon Mar 1 06:43:06 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 06:43:06 +0100 (CET)
Subject: [pypy-svn] r71581 - pypy/trunk/pypy/jit/tool
Message-ID: <20100301054306.EE28551054@codespeak.net>
Author: fijal
Date: Mon Mar 1 06:42:57 2010
New Revision: 71581
Modified:
pypy/trunk/pypy/jit/tool/otherviewer.py
Log:
handle ratio=0 case
Modified: pypy/trunk/pypy/jit/tool/otherviewer.py
==============================================================================
--- pypy/trunk/pypy/jit/tool/otherviewer.py (original)
+++ pypy/trunk/pypy/jit/tool/otherviewer.py Mon Mar 1 06:42:57 2010
@@ -57,6 +57,8 @@
shape='box', fillcolor=get_gradient_color(self.ratio))
def get_gradient_color(ratio):
+ if ratio == 0:
+ return 'white'
ratio = math.log(ratio) # from -infinity to +infinity
#
# ratio: <---------------------- 1.8 --------------------->
From fijal at codespeak.net Mon Mar 1 06:59:15 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 1 Mar 2010 06:59:15 +0100 (CET)
Subject: [pypy-svn] r71582 - pypy/trunk/pypy/module/_weakref
Message-ID: <20100301055915.2CD3551054@codespeak.net>
Author: fijal
Date: Mon Mar 1 06:59:08 2010
New Revision: 71582
Modified:
pypy/trunk/pypy/module/_weakref/interp__weakref.py
Log:
Another approach to make JIT not allocate unnecessary __args__ (calling
_combine_wrapped). Revert if breaks any apptests
Modified: pypy/trunk/pypy/module/_weakref/interp__weakref.py
==============================================================================
--- pypy/trunk/pypy/module/_weakref/interp__weakref.py (original)
+++ pypy/trunk/pypy/module/_weakref/interp__weakref.py Mon Mar 1 06:59:08 2010
@@ -142,11 +142,8 @@
return self.space.w_None
return w_obj
-def descr__new__weakref(space, w_subtype, w_obj, __args__):
- if __args__.arguments_w:
- w_callable = __args__.arguments_w[0]
- else:
- w_callable = space.w_None
+def descr__new__weakref(space, w_subtype, w_obj, w_callable=None,
+ __args__=None):
lifeline = w_obj.getweakref()
if lifeline is None:
lifeline = WeakrefLifeline(space)
@@ -187,7 +184,8 @@
which is called with the weak reference as an argument when 'obj'
is about to be finalized.""",
__new__ = interp2app(descr__new__weakref,
- unwrap_spec=[ObjSpace, W_Root, W_Root, Arguments]),
+ unwrap_spec=[ObjSpace, W_Root, W_Root, W_Root,
+ Arguments]),
__eq__ = interp2app(descr__eq__,
unwrap_spec=[ObjSpace, W_Weakref, W_Root]),
__ne__ = interp2app(descr__ne__,
From arigo at codespeak.net Mon Mar 1 09:31:47 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 1 Mar 2010 09:31:47 +0100 (CET)
Subject: [pypy-svn] r71583 - in
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc: . test
test/darwin test/elf test/msvc
Message-ID: <20100301083147.62D4951054@codespeak.net>
Author: arigo
Date: Mon Mar 1 09:31:43 2010
New Revision: 71583
Added:
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/darwin/track9.s
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track9.s
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track9.s
Modified:
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/test_trackgcroot.py
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py
Log:
Add tests for GC_NOCOLLECT calls. Small fix to prevent any resume
data from being generated around such calls.
Added: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/darwin/track9.s
==============================================================================
--- (empty file)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/darwin/track9.s Mon Mar 1 09:31:43 2010
@@ -0,0 +1,18 @@
+_pypy_g_foo:
+L1506:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ call L103
+"L00000000006$pb":
+L103:
+ popl %ebx
+ call _open
+ /* GC_NOCOLLECT open */
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+ .align 4,0x90
Added: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track9.s
==============================================================================
--- (empty file)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track9.s Mon Mar 1 09:31:43 2010
@@ -0,0 +1,23 @@
+ .type pypy_g_stuff, @function
+pypy_g_stuff:
+.LFB41:
+ .loc 2 1513 0
+ pushl %ebp
+.LCFI87:
+ movl %esp, %ebp
+.LCFI88:
+ subl $72, %esp
+.LCFI89:
+.L543:
+ .loc 2 1521 0
+ movl $420, 8(%esp)
+ movl $0, 4(%esp)
+ movl $pypy_g_array_16, (%esp)
+ call open
+ /* GC_NOCOLLECT open */
+.L542:
+ .loc 2 1588 0
+ leave
+ ret
+.LFE41:
+ .size pypy_g_stuff, .-pypy_g_stuff
Added: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track9.s
==============================================================================
--- (empty file)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track9.s Mon Mar 1 09:31:43 2010
@@ -0,0 +1,26 @@
+; Function compile flags: /Ogtpy
+; COMDAT _pypy_g_ll_join_strs__Signed_arrayPtr
+_TEXT SEGMENT
+_pypy_g_ll_join_strs__Signed_arrayPtr PROC ; COMDAT
+
+; 1457 : struct pypy_rpy_string0 *pypy_g_ll_join_strs__Signed_arrayPtr(long l_num_items_0, struct pypy_array0 *l_items_2) {
+
+ sub esp, 8
+ push ebx
+ push ebp
+ push esi
+
+; 1458 : pypy_asm_gc_nocollect(open);
+
+ call _open
+ pop esi
+ pop ebp
+$block4$40052:
+ pop ebx
+
+; 1535 : goto block1_back;
+; 1536 : }
+
+ add esp, 8
+ ret 0
+_pypy_g_ll_join_strs__Signed_arrayPtr ENDP
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/test_trackgcroot.py
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/test_trackgcroot.py (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/test_trackgcroot.py Mon Mar 1 09:31:43 2010
@@ -169,6 +169,9 @@
assert len(seen) == len(tabledict), (
"computed table contains unexpected entries:\n%r" %
[key for key in tabledict if key not in seen])
- print lines
- print expectedlines
+ print '--------------- got ---------------'
+ print ''.join(lines)
+ print '------------- expected ------------'
+ print ''.join(expectedlines)
+ print '-----------------------------------'
assert lines == expectedlines
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py Mon Mar 1 09:31:43 2010
@@ -44,7 +44,7 @@
self.findlabels()
self.parse_instructions()
try:
- if not self.list_call_insns():
+ if not self.list_collecting_call_insns():
return []
self.find_noncollecting_calls()
self.findframesize()
@@ -64,11 +64,9 @@
See format_callshape() for more details about callshape_tuple.
"""
table = []
- for insn in self.list_call_insns():
+ for insn in self.list_collecting_call_insns():
if not hasattr(insn, 'framesize'):
continue # calls that never end up reaching a RET
- if insn.name in self.cannot_collect:
- continue
if self.is_stack_bottom:
retaddr = LOC_NOWHERE # end marker for asmgcroot.py
elif self.uses_frame_pointer:
@@ -193,8 +191,9 @@
raise UnrecognizedOperation(opname)
setattr(cls, 'visit_' + opname, cls.visit_nop)
- def list_call_insns(self):
- return [insn for insn in self.insns if isinstance(insn, InsnCall)]
+ def list_collecting_call_insns(self):
+ return [insn for insn in self.insns if isinstance(insn, InsnCall)
+ if insn.name not in self.cannot_collect]
def findframesize(self):
# the 'framesize' attached to an instruction is the number of bytes
@@ -306,7 +305,7 @@
# walk backwards, because inserting the global labels in self.lines
# is going to invalidate the lineno of all the InsnCall objects
# after the current one.
- for call in self.list_call_insns()[::-1]:
+ for call in self.list_collecting_call_insns()[::-1]:
if hasattr(call, 'framesize'):
self.create_global_label(call)
From arigo at codespeak.net Mon Mar 1 10:29:55 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 1 Mar 2010 10:29:55 +0100 (CET)
Subject: [pypy-svn] r71584 - in
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc: .
test/elf test/msvc
Message-ID: <20100301092955.1955651054@codespeak.net>
Author: arigo
Date: Mon Mar 1 10:29:52 2010
New Revision: 71584
Modified:
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/instruction.py
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track5.s
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track0.s
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py
Log:
Improve by keeping out a few functions -- e.g. RPyAbort cannot collect.
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/instruction.py
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/instruction.py (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/instruction.py Mon Mar 1 10:29:52 2010
@@ -194,8 +194,8 @@
def source_of(self, localvar, tag):
tag1 = self.gcroots.setdefault(localvar, tag)
assert tag1 == tag, (
- "conflicting entries for InsnCall.gcroots[%s]:\n%r and %r" % (
- localvar, tag1, tag))
+ "conflicting entries for\n%s.gcroots[%s]:\n%r and %r" % (
+ self, localvar, tag1, tag))
return localvar
def all_sources_of(self, localvar):
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track5.s
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track5.s (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track5.s Mon Mar 1 10:29:52 2010
@@ -42,9 +42,9 @@
call pypy_g_SemiSpaceGC_get_size
;; expected {28(%esp) | 20(%esp), 24(%esp), %edi, %ebp | }
addl %eax, %ebx
+ jmp .L1221
.L1227:
call RPyAbort
- ;; expected {28(%esp) | 20(%esp), 24(%esp), %edi, %ebp | }
cmpl 12(%esi), %ebx
jb .L1229
addl $20, %esp
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track0.s
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track0.s (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track0.s Mon Mar 1 10:29:52 2010
@@ -64,7 +64,6 @@
jl SHORT $LN15 at pypy_g_ll_@139
$LN14 at pypy_g_ll_@139:
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
$LN15 at pypy_g_ll_@139:
; 1529 : l_v420 = l_v419;
@@ -76,7 +75,6 @@
test ebx, ebx
jne SHORT $LN16 at pypy_g_ll_@139
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
$LN16 at pypy_g_ll_@139:
; 1531 : OP_INT_ADD(l_v402, l_v421, l_v422);
@@ -183,7 +181,6 @@
jl SHORT $LN10 at pypy_g_ll_@139
$LN9 at pypy_g_ll_@139:
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
$LN10 at pypy_g_ll_@139:
; 1517 : l_v413 = l_v412;
@@ -195,7 +192,6 @@
test edi, edi
jne SHORT $LN11 at pypy_g_ll_@139
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
$LN11 at pypy_g_ll_@139:
mov edi, DWORD PTR [edi+8]
@@ -208,7 +204,6 @@
jl SHORT $LN13 at pypy_g_ll_@139
$LN12 at pypy_g_ll_@139:
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
$LN13 at pypy_g_ll_@139:
; 1520 : pypy_g_copy_string_contents__rpy_stringPtr_rpy_stringPt(l_v415, l_result_2, 0L, l_res_index_0, l_v414);
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py Mon Mar 1 10:29:52 2010
@@ -38,15 +38,14 @@
self.filetag = filetag
# a "stack bottom" function is either main() or a callback from C code
self.is_stack_bottom = False
- self.cannot_collect = {}
def computegcmaptable(self, verbose=0):
self.findlabels()
self.parse_instructions()
try:
+ self.find_noncollecting_calls()
if not self.list_collecting_call_insns():
return []
- self.find_noncollecting_calls()
self.findframesize()
self.fixlocalvars()
self.trackgcroots()
@@ -120,13 +119,18 @@
self.labels[label] = Label(label, lineno)
def find_noncollecting_calls(self):
+ cannot_collect = self.CANNOT_COLLECT.copy()
for line in self.lines:
match = self.r_gcnocollect_marker.search(line)
if match:
name = match.group(1)
- if self.format in ('darwin', 'mingw32', 'msvc'):
- name = '_' + name
- self.cannot_collect[name] = True
+ cannot_collect[name] = True
+ #
+ if self.format in ('darwin', 'mingw32', 'msvc'):
+ self.cannot_collect = dict.fromkeys(
+ ['_' + name for name in cannot_collect])
+ else:
+ self.cannot_collect = cannot_collect
def append_instruction(self, insn):
# Add the instruction to the list, and link it to the previous one.
@@ -347,6 +351,12 @@
# ____________________________________________________________
+ CANNOT_COLLECT = { # some of the most used functions that cannot collect
+ 'pypy_debug_catch_fatal_exception': None,
+ 'RPyAbort': None,
+ 'RPyAssertFailed': None,
+ }
+
def _visit_gcroot_marker(self, line):
match = self.r_gcroot_marker.match(line)
loc = match.group(1)
@@ -839,7 +849,6 @@
'__imp___wassert': None,
'DWORD PTR __imp__abort': None,
'DWORD PTR __imp___wassert': None,
- '_pypy_debug_catch_fatal_exception': None,
}
@classmethod
From arigo at codespeak.net Mon Mar 1 10:40:02 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 1 Mar 2010 10:40:02 +0100 (CET)
Subject: [pypy-svn] r71585 - in pypy/trunk/pypy: jit/backend/x86 rlib
rlib/rsre
Message-ID: <20100301094002.0C19351054@codespeak.net>
Author: arigo
Date: Mon Mar 1 10:40:00 2010
New Revision: 71585
Modified:
pypy/trunk/pypy/jit/backend/x86/codebuf.py
pypy/trunk/pypy/jit/backend/x86/valgrind.py
pypy/trunk/pypy/rlib/rmmap.py
pypy/trunk/pypy/rlib/rsre/_rsre_platform.py
Log:
Revert r71577 and r71578. See branch.
Modified: pypy/trunk/pypy/jit/backend/x86/codebuf.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/codebuf.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/codebuf.py Mon Mar 1 10:40:00 2010
@@ -155,5 +155,4 @@
separate_module_sources = ['void PYPY_NO_OP(void) {}'],
)
ensure_sse2_floats = rffi.llexternal('PYPY_NO_OP', [], lltype.Void,
- compilation_info=_sse2_eci,
- sandboxsafe=True)
+ compilation_info=_sse2_eci)
Modified: pypy/trunk/pypy/jit/backend/x86/valgrind.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/valgrind.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/valgrind.py Mon Mar 1 10:40:00 2010
@@ -20,8 +20,7 @@
[llmemory.Address, lltype.Signed],
lltype.Void,
compilation_info=eci,
- _nowrapper=True,
- sandboxsafe=True)
+ _nowrapper=True)
# ____________________________________________________________
Modified: pypy/trunk/pypy/rlib/rmmap.py
==============================================================================
--- pypy/trunk/pypy/rlib/rmmap.py (original)
+++ pypy/trunk/pypy/rlib/rmmap.py Mon Mar 1 10:40:00 2010
@@ -92,11 +92,10 @@
def external(name, args, result):
return rffi.llexternal(name, args, result,
- compilation_info=CConfig._compilation_info_,
- sandboxsafe=True, threadsafe=True)
+ compilation_info=CConfig._compilation_info_)
def winexternal(name, args, result):
- return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win', sandboxsafe=True, threadsafe=True)
+ return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win')
PTR = rffi.CCHARP
Modified: pypy/trunk/pypy/rlib/rsre/_rsre_platform.py
==============================================================================
--- pypy/trunk/pypy/rlib/rsre/_rsre_platform.py (original)
+++ pypy/trunk/pypy/rlib/rsre/_rsre_platform.py Mon Mar 1 10:40:00 2010
@@ -10,8 +10,7 @@
return rffi.llexternal(name, args, result, compilation_info=eci, **kwds)
tolower = external('tolower', [lltype.Signed], lltype.Signed,
- oo_primitive='tolower',
- sandboxsafe=True)
+ oo_primitive='tolower')
isalnum = external('isalnum', [lltype.Signed], lltype.Signed,
- oo_primitive='isalnum', sandboxsafe=True)
+ oo_primitive='isalnum')
From arigo at codespeak.net Mon Mar 1 10:40:19 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 1 Mar 2010 10:40:19 +0100 (CET)
Subject: [pypy-svn] r71586 - pypy/branch/jit-sandbox
Message-ID: <20100301094019.147F951054@codespeak.net>
Author: arigo
Date: Mon Mar 1 10:40:18 2010
New Revision: 71586
Added:
pypy/branch/jit-sandbox/
- copied from r71585, pypy/trunk/
Log:
A branch in which to make the JIT cooperate with sandboxing.
From arigo at codespeak.net Mon Mar 1 10:42:07 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 1 Mar 2010 10:42:07 +0100 (CET)
Subject: [pypy-svn] r71587 - in pypy/branch/jit-sandbox/pypy:
jit/backend/x86 rlib rlib/rsre
Message-ID: <20100301094207.D1EB051054@codespeak.net>
Author: arigo
Date: Mon Mar 1 10:42:06 2010
New Revision: 71587
Modified:
pypy/branch/jit-sandbox/pypy/jit/backend/x86/codebuf.py
pypy/branch/jit-sandbox/pypy/jit/backend/x86/valgrind.py
pypy/branch/jit-sandbox/pypy/rlib/rmmap.py
pypy/branch/jit-sandbox/pypy/rlib/rsre/_rsre_platform.py
Log:
Repeat r71577 and r71578:
(fijal)
I think this is a correct fix for JIT & sandbox - we assumer mmap and friends
are sandbox-safe (they can only work on existing file descs anyway). If we
compile mmap module, this will probably violate sandbox, but we compile sandbox
with no-allworkingmodules anyway
Sprinkle sandboxsafe here and there
Modified: pypy/branch/jit-sandbox/pypy/jit/backend/x86/codebuf.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/jit/backend/x86/codebuf.py (original)
+++ pypy/branch/jit-sandbox/pypy/jit/backend/x86/codebuf.py Mon Mar 1 10:42:06 2010
@@ -155,4 +155,5 @@
separate_module_sources = ['void PYPY_NO_OP(void) {}'],
)
ensure_sse2_floats = rffi.llexternal('PYPY_NO_OP', [], lltype.Void,
- compilation_info=_sse2_eci)
+ compilation_info=_sse2_eci,
+ sandboxsafe=True)
Modified: pypy/branch/jit-sandbox/pypy/jit/backend/x86/valgrind.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/jit/backend/x86/valgrind.py (original)
+++ pypy/branch/jit-sandbox/pypy/jit/backend/x86/valgrind.py Mon Mar 1 10:42:06 2010
@@ -20,7 +20,8 @@
[llmemory.Address, lltype.Signed],
lltype.Void,
compilation_info=eci,
- _nowrapper=True)
+ _nowrapper=True,
+ sandboxsafe=True)
# ____________________________________________________________
Modified: pypy/branch/jit-sandbox/pypy/rlib/rmmap.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/rlib/rmmap.py (original)
+++ pypy/branch/jit-sandbox/pypy/rlib/rmmap.py Mon Mar 1 10:42:06 2010
@@ -92,10 +92,11 @@
def external(name, args, result):
return rffi.llexternal(name, args, result,
- compilation_info=CConfig._compilation_info_)
+ compilation_info=CConfig._compilation_info_,
+ sandboxsafe=True, threadsafe=True)
def winexternal(name, args, result):
- return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win')
+ return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win', sandboxsafe=True, threadsafe=True)
PTR = rffi.CCHARP
Modified: pypy/branch/jit-sandbox/pypy/rlib/rsre/_rsre_platform.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/rlib/rsre/_rsre_platform.py (original)
+++ pypy/branch/jit-sandbox/pypy/rlib/rsre/_rsre_platform.py Mon Mar 1 10:42:06 2010
@@ -10,7 +10,8 @@
return rffi.llexternal(name, args, result, compilation_info=eci, **kwds)
tolower = external('tolower', [lltype.Signed], lltype.Signed,
- oo_primitive='tolower')
+ oo_primitive='tolower',
+ sandboxsafe=True)
isalnum = external('isalnum', [lltype.Signed], lltype.Signed,
- oo_primitive='isalnum')
+ oo_primitive='isalnum', sandboxsafe=True)
From tobami at codespeak.net Mon Mar 1 10:48:38 2010
From: tobami at codespeak.net (tobami at codespeak.net)
Date: Mon, 1 Mar 2010 10:48:38 +0100 (CET)
Subject: [pypy-svn] r71588 - in codespeed: pyspeed/codespeed
pyspeed/media/css pyspeed/templates tools
Message-ID: <20100301094838.8FA6E51054@codespeak.net>
Author: tobami
Date: Mon Mar 1 10:48:36 2010
New Revision: 71588
Added:
codespeed/tools/test_saveresults.py
Removed:
codespeed/tools/test.py
Modified:
codespeed/pyspeed/codespeed/views.py
codespeed/pyspeed/media/css/main.css
codespeed/pyspeed/templates/overview.html
codespeed/pyspeed/templates/overview_table.html
codespeed/pyspeed/templates/timeline.html
codespeed/tools/import_from_json.py
codespeed/tools/saveresults.py
Log:
fix IE. various changes
Modified: codespeed/pyspeed/codespeed/views.py
==============================================================================
--- codespeed/pyspeed/codespeed/views.py (original)
+++ codespeed/pyspeed/codespeed/views.py Mon Mar 1 10:48:36 2010
@@ -99,11 +99,11 @@
revision = int(request.GET["revision"])
lastrevisions = Revision.objects.filter(
project=settings.PROJECT_NAME
- ).filter(number__lte=revision).order_by('-number')[:11]
+ ).filter(number__lte=revision).order_by('-number')[:trendconfig+1]
lastrevision = lastrevisions[0].number
changerevision = lastrevisions[1].number
pastrevisions = lastrevisions[trendconfig-2:trendconfig+1]
-
+ print pastrevisions
result_list = Result.objects.filter(
revision__number=lastrevision
).filter(
@@ -167,6 +167,7 @@
relative = c[0].value / result
table_list.append({
'benchmark': bench.name,
+ 'bench_description': bench.description,
'result': result,
'change': change,
'trend': trend,
@@ -182,6 +183,9 @@
# Configuration of default parameters
defaulthost = 1
+ defaultchangethres = 3
+ defaulttrendthres = 3
+ defaultcompthres = 0.2
defaulttrend = 10
trends = [5, 10, 20, 100]
if data.has_key("trend"):
Modified: codespeed/pyspeed/media/css/main.css
==============================================================================
--- codespeed/pyspeed/media/css/main.css (original)
+++ codespeed/pyspeed/media/css/main.css Mon Mar 1 10:48:36 2010
@@ -23,8 +23,12 @@
div#title h1 { line-height: 72px; margin: 0; font-style: italic; }
div#wrapper { margin: 0; }
-div#nav ul { margin: 0; padding: 0; padding-left: 15.3em; }
-div#nav li { display: inline-block; }
+div#nav ul {
+ display: inline;
+ margin: 0; padding: 0; padding-left: 15.3em;
+ font-family: Verdana, sans-serif;
+}
+div#nav li { display: inline-block; list-style: none; }
div#nav ul li a:link, div#nav ul li a:visited {
display: block;
@@ -33,7 +37,6 @@
text-align: center;
background-color: #DADADA;
color: #888888;
-/* padding: 1em; */
padding-top: 0.6em;
padding-bottom: 0.3em;
-moz-border-radius-topleft: 20px;
@@ -123,9 +126,15 @@
margin: 0;
padding: 0.2em;
}
+.boxbody ul li ul { margin: 0; padding: 0; }
+.boxbody ul li ul h4 { margin: 0 0 0.4em; padding: 0; font-size: 1em; font-weight: normal;}
+.boxbody ul li ul li { margin-left: 1em; }
.boxbody input[type="radio"] { margin-left: 0; }
.boxbody input[type="checkbox"] { margin-left: 0; }
-
+.boxbody label { vertical-align: top; }
+.boxbody input[type="text"] {
+ margin-left: 0; margin-right: 2.5em; margin-bottom: 0.2em; float: right; width: 2em;
+}
/* tables */
table.tablesorter {
width: 100%;
@@ -211,7 +220,7 @@
table.tablesorter tbody tr td.status-red { background-color: #FF5640; }
table.tablesorter tbody tr td.status-green { background-color: #9FD54D; }
-table.tablesorter tbody tr td.status-yellow { background-color: #FEE772; }
+/* table.tablesorter tbody tr td.status-yellow { background-color: #FEE772; } */
table.tablesorter tbody tr.highlight td {
background-color: #9DADC6 !important;
cursor: pointer;
@@ -230,3 +239,5 @@
clear: both;
height: 0;
}
+* html .clearfix { zoom: 1; } /* IE6 */
+*:first-child+html .clearfix { zoom: 1; } /* IE7 */
\ No newline at end of file
Modified: codespeed/pyspeed/templates/overview.html
==============================================================================
--- codespeed/pyspeed/templates/overview.html (original)
+++ codespeed/pyspeed/templates/overview.html Mon Mar 1 10:48:36 2010
@@ -22,23 +22,43 @@
window.location="/timeline/?" + ued_encode(conf);
}
- function updateTable() {
+ function isNumeric(textvalue) {
+ if (textvalue.match(/^\d+$/) == null)
+ return false;
+ else
+ return true;
+ }
+
+ function getColorcode(change, theigh, tlow) {
+ var colorcode = "status-yellow";
+ if(change < tlow) { colorcode = "status-red"; }
+ else if(change > theigh) { colorcode = "status-green"; }
+ return colorcode;
+ }
+
+ function colorTable() {
+ var changethres = {{ defaultchangethres }};
+ var trendthres = {{ defaulttrendthres }};
+ var compthres = {{ defaultcompthres }};
$("#results > tbody > tr").each(function() {
//Color change column
var change = $(this).children("td:eq(2)").text().slice(0, -1);
- var colorcode = "status-yellow";
- if(change > 0.3) { colorcode = "status-red"; }
- else if(change < -0.3) { colorcode = "status-green"; }
- $(this).children("td:eq(2)").addClass(colorcode);
+ $(this).children("td:eq(2)").addClass(getColorcode(-change, changethres, -changethres));
+ //Color trend column
+ var trend = $(this).children("td:eq(3)").text().slice(0, -1);
+ $(this).children("td:eq(3)").addClass(getColorcode(-trend, trendthres, -trendthres));
//Color comparison column
- var comp = parseFloat($(this).children("td:eq(4)").text())
- colorcode = "status-yellow";
- if(comp < 0.8) { colorcode = "status-red"; }
- else if(comp > 1.2) { colorcode = "status-green"; }
- $(this).children("td:eq(4)").addClass(colorcode);
+ var comp = parseFloat($(this).children("td:eq(4)").text());
+ $(this).children("td:eq(4)").addClass(getColorcode(comp, 1+compthres, 1-compthres));
+ });
+ }
+
+ function updateTable() {
+ colorTable();
+ $("#results > tbody > tr").each(function() {
//Size plot bars
var tdwidth = parseInt($("#results thead tr").find("th:eq(5)").css("width"));
- var bar = transToLogBars(58, tdwidth, comp);
+ var bar = transToLogBars(58, tdwidth, parseFloat($(this).children("td:eq(4)").text()));
$(this).children("td:eq(5)").find("span").css("width", bar["width"]).css("margin-left", bar["margin"]);
//Link rows to timelines
$(this).click(function () {
@@ -78,7 +98,6 @@
$("input[name='interpreter']").change(refreshContent);
$("input:radio[name=host]").filter('[value={{ defaulthost }}]').attr('checked', true);
$("input[name='host']").change(refreshContent);
-
refreshContent();
});
Modified: codespeed/pyspeed/templates/overview_table.html
==============================================================================
--- codespeed/pyspeed/templates/overview_table.html (original)
+++ codespeed/pyspeed/templates/overview_table.html Mon Mar 1 10:48:36 2010
@@ -6,7 +6,7 @@
{% for row in table_list %}
- {{ row.benchmark }} {{ row.result|floatformat:3 }} {{ row.change|floatformat:2 }}% {{ row.trend }}{% ifnotequal row.trend "-" %}%{% endifnotequal %} {{ row.relative|floatformat:2 }} -
+ {{ row.benchmark }} {{ row.result|floatformat:3 }} {{ row.change|floatformat:2 }}% {{ row.trend }}{% ifnotequal row.trend "-" %}%{% endifnotequal %} {{ row.relative|floatformat:2 }} -
{% endfor %}
\ No newline at end of file
Modified: codespeed/pyspeed/templates/timeline.html
==============================================================================
--- codespeed/pyspeed/templates/timeline.html (original)
+++ codespeed/pyspeed/templates/timeline.html Mon Mar 1 10:48:36 2010
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block title %}PyPy Speed Center: Timeline{% endblock %}
{% block script %}
-
+
Modified: codespeed/tools/import_from_json.py
==============================================================================
--- codespeed/tools/import_from_json.py (original)
+++ codespeed/tools/import_from_json.py Mon Mar 1 10:48:36 2010
@@ -7,7 +7,8 @@
RESULTS_URL = 'http://buildbot.pypy.org/bench_results/'
SPEEDURL = 'http://speed.pypy.org/'
SAVE_CPYTHON = False
-START_REV = 71480
+START_REV = 71557
+INTERP = "pypy-c-jit"
def saveresult(data):
params = urllib.urlencode(data)
@@ -60,7 +61,7 @@
current_date = datetime.today()
proj = 'pypy'
revision = result['revision']
- interpreter = "pypy-c-jit"
+ interpreter = INTERP
int_options = "gc=hybrid"
if result.has_key('branch'):
if result['branch'] != 'trunk':
Modified: codespeed/tools/saveresults.py
==============================================================================
--- codespeed/tools/saveresults.py (original)
+++ codespeed/tools/saveresults.py Mon Mar 1 10:48:36 2010
@@ -1,28 +1,15 @@
# -*- coding: utf-8 -*-
import urllib, urllib2
from datetime import datetime
-import logging, logging.handlers
-
-## SETUP LOGS ##
-LOG_FILENAME = 'pyspeed.log'
-logger = logging.getLogger('MyLogger')
-logger.setLevel(logging.DEBUG)
-# Add the log message handler to the logger
-handler = logging.handlers.RotatingFileHandler(
- LOG_FILENAME, maxBytes=100000, backupCount=1)
-logger.addHandler(handler)
-################
SPEEDURL = "http://speed.pypy.org/"
HOST = "bigdog"
-def save(revision, results, options, branch, interpreter, int_options):
+def save(project, revision, results, options, branch, interpreter, int_options, testing=False):
+ testparams = []
#Parse data
data = {}
current_date = datetime.today()
- proj = "pypy"
- #interpreter = "pypy-c-jit"
- #int_options = "gc=hybrid"
if branch != "" and branch != "trunk":
interpreter = branch
int_options = ""
@@ -37,11 +24,11 @@
elif res_type == "ComparisonResult":
value = results['avg_changed']
else:
- logger.critical("ERROR: result type unknown " + b[1])
+ print("ERROR: result type unknown " + b[1])
return 1
data = {
'revision_number': revision,
- 'revision_project': proj,
+ 'revision_project': project,
'interpreter_name': interpreter,
'interpreter_coptions': int_options,
'benchmark_name': bench_name,
@@ -49,8 +36,10 @@
'result_value': value,
'result_date': current_date,
}
- send(data)
- return 0
+ if testing: testparams.append(data)
+ else: send(data)
+ if testing: return testparams
+ else: return 0
def send(data):
#save results
@@ -59,7 +48,7 @@
response = "None"
info = str(datetime.today()) + ": Saving result for " + data['interpreter_name'] + " revision "
info += str(data['revision_number']) + ", benchmark " + data['benchmark_name']
- logger.info(info)
+ print(info)
try:
f = urllib2.urlopen(SPEEDURL + 'result/add/', params)
response = f.read()
@@ -71,5 +60,5 @@
elif hasattr(e, 'code'):
response = '\n The server couldn\'t fulfill the request\n'
response += ' Error code: ' + str(e)
- logger.critical("Server (%s) response: %s\n" % (SPEEDURL, response))
+ print("Server (%s) response: %s\n" % (SPEEDURL, response))
return 1
Added: codespeed/tools/test_saveresults.py
==============================================================================
--- (empty file)
+++ codespeed/tools/test_saveresults.py Mon Mar 1 10:48:36 2010
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+import saveresults
+import unittest
+
+class testSaveresults(unittest.TestCase):
+ '''Tests Saveresults script for saving data to speed.pypy.org'''
+ fixture = [
+ ['ai', 'ComparisonResult', {'avg_base': 0.42950453758219992, 'timeline_link': None, 'avg_changed': 0.43322672843939997, 'min_base': 0.42631793022199999, 'delta_min': '1.0065x faster', 'delta_avg': '1.0087x slower', 'std_changed': 0.0094009621054567376, 'min_changed': 0.423564910889, 'delta_std': '2.7513x larger', 'std_base': 0.0034169249420902843, 't_msg': 'Not significant\n'}],
+ ['chaos', 'ComparisonResult', {'avg_base': 0.41804099082939999, 'timeline_link': None, 'avg_changed': 0.11744904518135998, 'min_base': 0.41700506210299998, 'delta_min': '9.0148x faster', 'delta_avg': '3.5593x faster', 'std_changed': 0.14350186143481433, 'min_changed': 0.046257972717299999, 'delta_std': '108.8162x larger', 'std_base': 0.0013187546718754512, 't_msg': 'Significant (t=4.683672, a=0.95)\n'}],
+ ['django', 'ComparisonResult', {'avg_base': 0.83651852607739996, 'timeline_link': None, 'avg_changed': 0.48571481704719999, 'min_base': 0.82990884780899998, 'delta_min': '1.7315x faster', 'delta_avg': '1.7222x faster', 'std_changed': 0.006386606999421761, 'min_changed': 0.47929787635799997, 'delta_std': '1.7229x smaller', 'std_base': 0.011003382690633789, 't_msg': 'Significant (t=61.655971, a=0.95)\n'}],
+ ['fannkuch', 'ComparisonResult', {'avg_base': 1.8561528205879998, 'timeline_link': None, 'avg_changed': 0.38401727676399999, 'min_base': 1.84801197052, 'delta_min': '5.0064x faster', 'delta_avg': '4.8335x faster', 'std_changed': 0.029594360755246251, 'min_changed': 0.36913013458299998, 'delta_std': '3.2353x larger', 'std_base': 0.0091472519207758066, 't_msg': 'Significant (t=106.269998, a=0.95)\n'}],
+ ['float', 'ComparisonResult', {'avg_base': 0.50523018836940004, 'timeline_link': None, 'avg_changed': 0.15490598678593998, 'min_base': 0.49911379814099999, 'delta_min': '6.2651x faster', 'delta_avg': '3.2615x faster', 'std_changed': 0.057739598339608837, 'min_changed': 0.079665899276699995, 'delta_std': '7.7119x larger', 'std_base': 0.007487037523761327, 't_msg': 'Significant (t=13.454285, a=0.95)\n'}], ['gcbench', 'SimpleComparisonResult', {'base_time': 27.236408948899999, 'changed_time': 5.3500790595999996, 'time_delta': '5.0908x faster'}],
+ ['html5lib', 'SimpleComparisonResult', {'base_time': 11.666918992999999, 'changed_time': 12.6703209877, 'time_delta': '1.0860x slower'}],
+ ['richards', 'ComparisonResult', {'avg_base': 0.29083266258220003, 'timeline_link': None, 'avg_changed': 0.029299402236939998, 'min_base': 0.29025602340700002, 'delta_min': '10.7327x faster', 'delta_avg': '9.9262x faster', 'std_changed': 0.0033452973342946888, 'min_changed': 0.027044057846099999, 'delta_std': '5.6668x larger', 'std_base': 0.00059033067516221327, 't_msg': 'Significant (t=172.154488, a=0.95)\n'}],
+ ['rietveld', 'ComparisonResult', {'avg_base': 0.46909418106079998, 'timeline_link': None, 'avg_changed': 1.312631273269, 'min_base': 0.46490097045899997, 'delta_min': '2.1137x slower', 'delta_avg': '2.7982x slower', 'std_changed': 0.44401595627955542, 'min_changed': 0.98267102241500004, 'delta_std': '76.0238x larger', 'std_base': 0.0058404831974135556, 't_msg': 'Significant (t=-4.247692, a=0.95)\n'}],
+ ['slowspitfire', 'ComparisonResult', {'avg_base': 0.66740002632140005, 'timeline_link': None, 'avg_changed': 1.6204295635219998, 'min_base': 0.65965509414699997, 'delta_min': '1.9126x slower', 'delta_avg': '2.4280x slower', 'std_changed': 0.27415559151786589, 'min_changed': 1.26167798042, 'delta_std': '20.1860x larger', 'std_base': 0.013581457669479846, 't_msg': 'Significant (t=-7.763579, a=0.95)\n'}],
+ ['spambayes', 'ComparisonResult', {'avg_base': 0.279049730301, 'timeline_link': None, 'avg_changed': 1.0178018569945999, 'min_base': 0.27623891830399999, 'delta_min': '3.3032x slower', 'delta_avg': '3.6474x slower', 'std_changed': 0.064953583956645466, 'min_changed': 0.91246294975300002, 'delta_std': '28.9417x larger', 'std_base': 0.0022442880892229711, 't_msg': 'Significant (t=-25.416839, a=0.95)\n'}],
+ ['spectral-norm', 'ComparisonResult', {'avg_base': 0.48315834999099999, 'timeline_link': None, 'avg_changed': 0.066225481033300004, 'min_base': 0.476922035217, 'delta_min': '8.0344x faster', 'delta_avg': '7.2957x faster', 'std_changed': 0.013425108838933627, 'min_changed': 0.059360027313200003, 'delta_std': '1.9393x larger', 'std_base': 0.0069225510731835901, 't_msg': 'Significant (t=61.721418, a=0.95)\n'}],
+ ['spitfire', 'ComparisonResult', {'avg_base': 7.1179999999999994, 'timeline_link': None, 'avg_changed': 7.2780000000000005, 'min_base': 7.04, 'delta_min': '1.0072x faster', 'delta_avg': '1.0225x slower', 'std_changed': 0.30507376157250898, 'min_changed': 6.9900000000000002, 'delta_std': '3.4948x larger', 'std_base': 0.08729261137118062, 't_msg': 'Not significant\n'}],
+ ['twisted_iteration', 'SimpleComparisonResult', {'base_time': 0.148289627437, 'changed_time': 0.035354803126799998, 'time_delta': '4.1943x faster'}],
+ ['twisted_web', 'SimpleComparisonResult', {'base_time': 0.11312217194599999, 'changed_time': 0.625, 'time_delta': '5.5250x slower'}]
+ ]
+
+ def testGoodInput(self):
+ '''Given correct result data, check that every result being saved has the right parameters'''
+ for resultparams in saveresults.save("pypy", 71212, self.fixture, "", "trunk", "pypy-c-jit", "gc=hybrid", True):
+ self.assertEqual(resultparams['revision_project'], "pypy")
+ self.assertEqual(resultparams['revision_number'], 71212)
+ self.assertEqual(resultparams['interpreter_name'], "pypy-c-jit")
+ self.assertEqual(resultparams['interpreter_coptions'], "gc=hybrid")
+ # get dict with correct data for this benchmark
+ fixturedata = []
+ benchfound = False
+ for res in self.fixture:
+ if res[0] == resultparams['benchmark_name']:
+ fixturedata = res
+ benchfound = True
+ break
+ self.assertTrue(benchfound)
+ # get correct result value depending on the type of result
+ fixturevalue = 0
+ if fixturedata[1] == "SimpleComparisonResult":
+ fixturevalue = fixturedata[2]['changed_time']
+ else:
+ fixturevalue = fixturedata[2]['avg_changed']
+ self.assertEqual(resultparams['result_value'], fixturevalue)
+
+if __name__ == "__main__":
+ unittest.main()
From getxsick at codespeak.net Mon Mar 1 12:43:47 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Mon, 1 Mar 2010 12:43:47 +0100 (CET)
Subject: [pypy-svn] r71589 - pypy/build/ubuntu
Message-ID: <20100301114347.08F0D51054@codespeak.net>
Author: getxsick
Date: Mon Mar 1 12:43:45 2010
New Revision: 71589
Added:
pypy/build/ubuntu/
- copied from r71588, pypy/build/debian/
Log:
init ubuntu's package directory
From arigo at codespeak.net Mon Mar 1 13:10:19 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 1 Mar 2010 13:10:19 +0100 (CET)
Subject: [pypy-svn] r71590 - in pypy/trunk/pypy: jit/backend/x86/test
jit/metainterp rpython rpython/lltypesystem
Message-ID: <20100301121019.3D2DB51054@codespeak.net>
Author: arigo
Date: Mon Mar 1 13:10:18 2010
New Revision: 71590
Modified:
pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py
pypy/trunk/pypy/jit/metainterp/virtualref.py
pypy/trunk/pypy/rpython/lltypesystem/rclass.py
pypy/trunk/pypy/rpython/rtyper.py
Log:
Test and fix for --gcremovetypeptr together with the JIT.
Modified: pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py Mon Mar 1 13:10:18 2010
@@ -439,3 +439,19 @@
def test_compile_hybrid_bug1(self):
self.run('compile_hybrid_bug1', 200)
+
+ def define_compile_hybrid_vref(self):
+ from pypy.rlib.jit import virtual_ref, virtual_ref_finish
+ class A:
+ pass
+ glob = A()
+ def f(n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s):
+ a = A()
+ glob.v = virtual_ref(a)
+ virtual_ref_finish(a)
+ n -= 1
+ return n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s
+ return None, f, None
+
+ def test_compile_hybrid_vref(self):
+ self.run('compile_hybrid_vref', 200)
Modified: pypy/trunk/pypy/jit/metainterp/virtualref.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/virtualref.py (original)
+++ pypy/trunk/pypy/jit/metainterp/virtualref.py Mon Mar 1 13:10:18 2010
@@ -27,6 +27,10 @@
self.descr_virtualref_index = fielddescrof(self.JIT_VIRTUAL_REF,
'virtualref_index')
self.descr_forced = fielddescrof(self.JIT_VIRTUAL_REF, 'forced')
+ #
+ # record the type JIT_VIRTUAL_REF explicitly in the rtyper, too
+ self.warmrunnerdesc.rtyper.set_type_for_typeptr(
+ self.jit_virtual_ref_vtable, self.JIT_VIRTUAL_REF)
def _freeze_(self):
return True
@@ -50,10 +54,6 @@
if c_funcptr is not None:
log("replaced %d 'jit_force_virtual' with %r" % (count,
c_funcptr.value))
- #
- # record the type JIT_VIRTUAL_REF explicitly in the rtyper, too
- self.warmrunnerdesc.rtyper.set_type_for_typeptr(
- self.jit_virtual_ref_vtable, self.JIT_VIRTUAL_REF)
# ____________________________________________________________
Modified: pypy/trunk/pypy/rpython/lltypesystem/rclass.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/rclass.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/rclass.py Mon Mar 1 13:10:18 2010
@@ -384,7 +384,6 @@
OBJECT, destrptr)
vtable = self.rclass.getvtable()
self.rtyper.set_type_for_typeptr(vtable, self.lowleveltype.TO)
- self.rtyper.lltype2vtable[self.lowleveltype.TO] = vtable
def common_repr(self): # -> object or nongcobject reprs
return getinstancerepr(self.rtyper, None, self.gcflavor)
Modified: pypy/trunk/pypy/rpython/rtyper.py
==============================================================================
--- pypy/trunk/pypy/rpython/rtyper.py (original)
+++ pypy/trunk/pypy/rpython/rtyper.py Mon Mar 1 13:10:18 2010
@@ -152,6 +152,7 @@
def set_type_for_typeptr(self, typeptr, TYPE):
self.type_for_typeptr[typeptr._obj] = TYPE
+ self.lltype2vtable[TYPE] = typeptr
def get_real_typeptr_for_typeptr(self, typeptr):
# perform a linear scan for the case of ll2ctypes typeptr
From getxsick at codespeak.net Tue Mar 2 00:15:59 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 00:15:59 +0100 (CET)
Subject: [pypy-svn] r71595 - pypy/build/ubuntu/debian
Message-ID: <20100301231559.D1C0651055@codespeak.net>
Author: getxsick
Date: Tue Mar 2 00:15:58 2010
New Revision: 71595
Modified:
pypy/build/ubuntu/debian/rules
Log:
fix unsafe usage of quilt
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Tue Mar 2 00:15:58 2010
@@ -24,7 +24,7 @@
Makefile: debian/Makefile.in
python debian/configure.py --build=$(DEB_BUILD_ARCH) --host=$(DEB_HOST_ARCH) --prefix=debian/tmp/usr debian/Makefile.in
-build: patch build-arch build-indep
+build: ${QUILT_STAMPFN} build-arch build-indep
build-arch: build-arch-stamp
build-arch-stamp: Makefile
From getxsick at codespeak.net Tue Mar 2 00:21:08 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 00:21:08 +0100 (CET)
Subject: [pypy-svn] r71596 - pypy/build/ubuntu/debian
Message-ID: <20100301232108.C62A251055@codespeak.net>
Author: getxsick
Date: Tue Mar 2 00:21:07 2010
New Revision: 71596
Modified:
pypy/build/ubuntu/debian/rules
Log:
switch curly brackets to round ones (both work, just to keep the standard)
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Tue Mar 2 00:21:07 2010
@@ -24,7 +24,7 @@
Makefile: debian/Makefile.in
python debian/configure.py --build=$(DEB_BUILD_ARCH) --host=$(DEB_HOST_ARCH) --prefix=debian/tmp/usr debian/Makefile.in
-build: ${QUILT_STAMPFN} build-arch build-indep
+build: $(QUILT_STAMPFN) build-arch build-indep
build-arch: build-arch-stamp
build-arch-stamp: Makefile
From getxsick at codespeak.net Tue Mar 2 00:34:55 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 00:34:55 +0100 (CET)
Subject: [pypy-svn] r71597 - pypy/build/ubuntu/debian/patches
Message-ID: <20100301233455.BB2E851055@codespeak.net>
Author: getxsick
Date: Tue Mar 2 00:34:53 2010
New Revision: 71597
Removed:
pypy/build/ubuntu/debian/patches/02-mips-support
Modified:
pypy/build/ubuntu/debian/patches/series
Log:
remove unncessary patch (it's already implemented in the core)
Modified: pypy/build/ubuntu/debian/patches/series
==============================================================================
--- pypy/build/ubuntu/debian/patches/series (original)
+++ pypy/build/ubuntu/debian/patches/series Tue Mar 2 00:34:53 2010
@@ -1,2 +1 @@
01-package-specific-temp-prefix
-02-mips-support
From getxsick at codespeak.net Tue Mar 2 01:13:35 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 01:13:35 +0100 (CET)
Subject: [pypy-svn] r71599 - pypy/build/ubuntu/debian/patches
Message-ID: <20100302001335.71E3951055@codespeak.net>
Author: getxsick
Date: Tue Mar 2 01:13:33 2010
New Revision: 71599
Removed:
pypy/build/ubuntu/debian/patches/
Log:
remove unnecessary patch (improper bugfix for #452851 at Debian Bug).
From getxsick at codespeak.net Tue Mar 2 01:14:23 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 01:14:23 +0100 (CET)
Subject: [pypy-svn] r71600 - pypy/build/ubuntu/debian
Message-ID: <20100302001423.D694251055@codespeak.net>
Author: getxsick
Date: Tue Mar 2 01:14:22 2010
New Revision: 71600
Modified:
pypy/build/ubuntu/debian/control
pypy/build/ubuntu/debian/rules
Log:
remove quilt as there is no patches anymore
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Tue Mar 2 01:14:22 2010
@@ -2,7 +2,7 @@
Section: python
Priority: extra
Maintainer: Chris Lamb
-Build-Depends: debhelper (>= 6), python-dev, libgc-dev, libbz2-dev, python-ctypes, libreadline5-dev, procps, zlib1g-dev, quilt
+Build-Depends: debhelper (>= 6), python-dev, libgc-dev, libbz2-dev, python-ctypes, libreadline5-dev, procps, zlib1g-dev
Standards-Version: 3.7.3
Vcs-Git: git://git.chris-lamb.co.uk/pkg-pypy.git
Vcs-Browser: http://git.chris-lamb.co.uk/?p=pkg-pypy.git
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Tue Mar 2 01:14:22 2010
@@ -3,8 +3,6 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
-include /usr/share/quilt/quilt.make
-
# This has to be exported to make some magic below work.
export DH_OPTIONS
@@ -24,7 +22,7 @@
Makefile: debian/Makefile.in
python debian/configure.py --build=$(DEB_BUILD_ARCH) --host=$(DEB_HOST_ARCH) --prefix=debian/tmp/usr debian/Makefile.in
-build: $(QUILT_STAMPFN) build-arch build-indep
+build: build-arch build-indep
build-arch: build-arch-stamp
build-arch-stamp: Makefile
@@ -35,7 +33,7 @@
build-indep-stamp:
touch $@
-clean: unpatch
+clean:
dh_testdir
dh_testroot
rm -f build-arch-stamp build-indep-stamp
@@ -123,4 +121,4 @@
$(MAKE) -f debian/rules DH_OPTIONS=-s binary-common
binary: binary-arch binary-indep
-.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch patch unpatch get-orig-source
+.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch get-orig-source
From agaynor at codespeak.net Tue Mar 2 04:50:50 2010
From: agaynor at codespeak.net (agaynor at codespeak.net)
Date: Tue, 2 Mar 2010 04:50:50 +0100 (CET)
Subject: [pypy-svn] r71604 - in pypy/trunk/pypy: doc objspace/std
objspace/std/test
Message-ID: <20100302035050.E4C3D51055@codespeak.net>
Author: agaynor
Date: Tue Mar 2 04:50:41 2010
New Revision: 71604
Modified:
pypy/trunk/pypy/doc/objspace.txt
pypy/trunk/pypy/objspace/std/floatobject.py
pypy/trunk/pypy/objspace/std/intobject.py
pypy/trunk/pypy/objspace/std/longobject.py
pypy/trunk/pypy/objspace/std/multimethod.py
pypy/trunk/pypy/objspace/std/objspace.py
pypy/trunk/pypy/objspace/std/smallintobject.py
pypy/trunk/pypy/objspace/std/stdtypedef.py
pypy/trunk/pypy/objspace/std/test/test_intobject.py
Log:
#480. FailedToImplement is now split into FailedToImplement and FailedToImplementArgs which has w_type and w_value.
Modified: pypy/trunk/pypy/doc/objspace.txt
==============================================================================
--- pypy/trunk/pypy/doc/objspace.txt (original)
+++ pypy/trunk/pypy/doc/objspace.txt Tue Mar 2 04:50:41 2010
@@ -316,7 +316,7 @@
try:
z = ovfcheck(x + y)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer addition"))
return W_IntObject(space, z)
Modified: pypy/trunk/pypy/objspace/std/floatobject.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/floatobject.py (original)
+++ pypy/trunk/pypy/objspace/std/floatobject.py Tue Mar 2 04:50:41 2010
@@ -241,7 +241,7 @@
x = w_float1.floatval
y = w_float2.floatval
if y == 0.0:
- raise FailedToImplement(space.w_ZeroDivisionError, space.wrap("float division"))
+ raise FailedToImplementArgs(space.w_ZeroDivisionError, space.wrap("float division"))
return W_FloatObject(x / y)
truediv__Float_Float = div__Float_Float
@@ -254,7 +254,7 @@
x = w_float1.floatval
y = w_float2.floatval
if y == 0.0:
- raise FailedToImplement(space.w_ZeroDivisionError, space.wrap("float modulo"))
+ raise FailedToImplementArgs(space.w_ZeroDivisionError, space.wrap("float modulo"))
mod = math.fmod(x, y)
if (mod and ((y < 0.0) != (mod < 0.0))):
mod += y
@@ -265,7 +265,7 @@
x = w_float1.floatval
y = w_float2.floatval
if y == 0.0:
- raise FailedToImplement(space.w_ZeroDivisionError, space.wrap("float modulo"))
+ raise FailedToImplementArgs(space.w_ZeroDivisionError, space.wrap("float modulo"))
mod = math.fmod(x, y)
# fmod is typically exact, so vx-mod is *mathematically* an
# exact multiple of wx. But this is fp arithmetic, and fp
@@ -338,9 +338,9 @@
try:
z = math.pow(x,y)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError, space.wrap("float power"))
+ raise FailedToImplementArgs(space.w_OverflowError, space.wrap("float power"))
except ValueError:
- raise FailedToImplement(space.w_ValueError, space.wrap("float power")) # xxx
+ raise FailedToImplementArgs(space.w_ValueError, space.wrap("float power")) # xxx
return W_FloatObject(z)
Modified: pypy/trunk/pypy/objspace/std/intobject.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/intobject.py (original)
+++ pypy/trunk/pypy/objspace/std/intobject.py Tue Mar 2 04:50:41 2010
@@ -86,7 +86,7 @@
try:
z = ovfcheck(x + y)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer addition"))
return wrapint(space, z)
@@ -96,7 +96,7 @@
try:
z = ovfcheck(x - y)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer substraction"))
return wrapint(space, z)
@@ -106,7 +106,7 @@
try:
z = ovfcheck(x * y)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer multiplication"))
return wrapint(space, z)
@@ -119,7 +119,7 @@
raise OperationError(space.w_ZeroDivisionError,
space.wrap("integer division by zero"))
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer division"))
return wrapint(space, z)
div__Int_Int = floordiv__Int_Int
@@ -128,7 +128,7 @@
x = float(w_int1.intval)
y = float(w_int2.intval)
if y == 0.0:
- raise FailedToImplement(space.w_ZeroDivisionError, space.wrap("float division"))
+ raise FailedToImplementArgs(space.w_ZeroDivisionError, space.wrap("float division"))
return space.wrap(x / y)
def mod__Int_Int(space, w_int1, w_int2):
@@ -140,7 +140,7 @@
raise OperationError(space.w_ZeroDivisionError,
space.wrap("integer modulo by zero"))
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer modulo"))
return wrapint(space, z)
@@ -153,7 +153,7 @@
raise OperationError(space.w_ZeroDivisionError,
space.wrap("integer divmod by zero"))
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer modulo"))
# no overflow possible
m = x % y
@@ -169,7 +169,7 @@
space.wrap("pow() 2nd argument "
"cannot be negative when 3rd argument specified"))
## bounce it, since it always returns float
- raise FailedToImplement(space.w_ValueError,
+ raise FailedToImplementArgs(space.w_ValueError,
space.wrap("integer exponentiation"))
temp = iv
ix = 1
@@ -188,7 +188,7 @@
if iz:
ix = ix % iz
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer exponentiation"))
return wrapint(space, ix)
@@ -211,7 +211,7 @@
try:
x = ovfcheck(-a)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer negation"))
return wrapint(space, x)
@@ -239,12 +239,12 @@
if a == 0 or b == 0:
return int__Int(space, w_int1)
if b >= LONG_BIT:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer left shift"))
try:
c = ovfcheck_lshift(a, b)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer left shift"))
return wrapint(space, c)
Modified: pypy/trunk/pypy/objspace/std/longobject.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/longobject.py (original)
+++ pypy/trunk/pypy/objspace/std/longobject.py Tue Mar 2 04:50:41 2010
@@ -195,7 +195,7 @@
def pow__Long_Long_None(space, w_long1, w_long2, w_long3):
# XXX need to replicate some of the logic, to get the errors right
if w_long2.num.lt(rbigint.fromint(0)):
- raise FailedToImplement(
+ raise FailedToImplementArgs(
space.w_ValueError,
space.wrap("long pow() too negative"))
return W_LongObject(w_long1.num.pow(w_long2.num, None))
Modified: pypy/trunk/pypy/objspace/std/multimethod.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/multimethod.py (original)
+++ pypy/trunk/pypy/objspace/std/multimethod.py Tue Mar 2 04:50:41 2010
@@ -25,6 +25,20 @@
class FailedToImplement(Exception):
+ def __init__(self, *args):
+ if args:
+ raise Exception
+
+ def get_w_value(self, space):
+ return None
+
+ def get_w_type(self, space):
+ return None
+
+ def __str__(self):
+ return ''
+
+class FailedToImplementArgs(FailedToImplement):
def __init__(self, w_type=None, w_value=None):
self.w_type = w_type
self.w_value = w_value
@@ -32,9 +46,13 @@
def get_w_value(self, space):
# convenience: same semantics as with OperationError
return self.w_value
+
+ def get_w_type(self, space):
+ return self.w_type
def __str__(self):
return '' % (self.w_type, self.w_value)
+
def raiseFailedToImplement():
Modified: pypy/trunk/pypy/objspace/std/objspace.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/objspace.py (original)
+++ pypy/trunk/pypy/objspace/std/objspace.py Tue Mar 2 04:50:41 2010
@@ -13,7 +13,7 @@
from pypy.tool.sourcetools import func_with_new_name
from pypy.objspace.std.model import W_Object, UnwrapError
from pypy.objspace.std.model import W_ANY, StdObjSpaceMultiMethod, StdTypeModel
-from pypy.objspace.std.multimethod import FailedToImplement
+from pypy.objspace.std.multimethod import FailedToImplement, FailedToImplementArgs
from pypy.objspace.descroperation import DescrOperation, raiseattrerror
from pypy.objspace.std import stdtypedef
from pypy.rlib.rarithmetic import base_int
Modified: pypy/trunk/pypy/objspace/std/smallintobject.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/smallintobject.py (original)
+++ pypy/trunk/pypy/objspace/std/smallintobject.py Tue Mar 2 04:50:41 2010
@@ -91,7 +91,7 @@
try:
z = ovfcheck(x * y)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer multiplication"))
return wrapint(space, z)
@@ -110,7 +110,7 @@
x = float(w_int1.intval)
y = float(w_int2.intval)
if y == 0.0:
- raise FailedToImplement(space.w_ZeroDivisionError, space.wrap("float division"))
+ raise FailedToImplementArgs(space.w_ZeroDivisionError, space.wrap("float division"))
return space.wrap(x / y)
def mod__SmallInt_SmallInt(space, w_int1, w_int2):
@@ -178,12 +178,12 @@
if a == 0 or b == 0:
return int__SmallInt(space, w_int1)
if b >= LONG_BIT:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer left shift"))
try:
c = ovfcheck_lshift(a, b)
except OverflowError:
- raise FailedToImplement(space.w_OverflowError,
+ raise FailedToImplementArgs(space.w_OverflowError,
space.wrap("integer left shift"))
return wrapint(space, c)
Modified: pypy/trunk/pypy/objspace/std/stdtypedef.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/stdtypedef.py (original)
+++ pypy/trunk/pypy/objspace/std/stdtypedef.py Tue Mar 2 04:50:41 2010
@@ -219,7 +219,7 @@
try:
return %s
except FailedToImplement, e:
- if e.w_type is not None:
+ if e.get_w_type(space) is not None:
raise OperationError(e.w_type, e.get_w_value(space))
else:
return space.w_NotImplemented
@@ -231,7 +231,7 @@
try:
w_res = %s
except FailedToImplement, e:
- if e.w_type is not None:
+ if e.get_w_type(space) is not None:
raise OperationError(e.w_type, e.get_w_value(space))
else:
raise gettypeerror(space, %r, %s)
Modified: pypy/trunk/pypy/objspace/std/test/test_intobject.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/test/test_intobject.py (original)
+++ pypy/trunk/pypy/objspace/std/test/test_intobject.py Tue Mar 2 04:50:41 2010
@@ -25,7 +25,7 @@
res = func(*args, **kwds)
raise Exception, "should have failed but returned '%s'!" %repr(res)
except FailedToImplement, arg:
- return arg.w_type
+ return arg.get_w_type(self.space)
def test_int_w(self):
assert self.space.int_w(self.space.wrap(42)) == 42
From agaynor at codespeak.net Tue Mar 2 04:53:27 2010
From: agaynor at codespeak.net (agaynor at codespeak.net)
Date: Tue, 2 Mar 2010 04:53:27 +0100 (CET)
Subject: [pypy-svn] r71605 - pypy/trunk/pypy/objspace/std
Message-ID: <20100302035327.6FABA51055@codespeak.net>
Author: agaynor
Date: Tue Mar 2 04:53:25 2010
New Revision: 71605
Modified:
pypy/trunk/pypy/objspace/std/multimethod.py
Log:
Remove a debugging bit from the previous commit.
Modified: pypy/trunk/pypy/objspace/std/multimethod.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/multimethod.py (original)
+++ pypy/trunk/pypy/objspace/std/multimethod.py Tue Mar 2 04:53:25 2010
@@ -25,10 +25,6 @@
class FailedToImplement(Exception):
- def __init__(self, *args):
- if args:
- raise Exception
-
def get_w_value(self, space):
return None
From fijal at codespeak.net Tue Mar 2 05:26:07 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 05:26:07 +0100 (CET)
Subject: [pypy-svn] r71606 - pypy/branch/readwrite-experiments
Message-ID: <20100302042607.7A2CC51055@codespeak.net>
Author: fijal
Date: Tue Mar 2 05:26:05 2010
New Revision: 71606
Removed:
pypy/branch/readwrite-experiments/
Log:
Branch got nowhere, delete
From fijal at codespeak.net Tue Mar 2 05:45:36 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 05:45:36 +0100 (CET)
Subject: [pypy-svn] r71607 - in pypy/trunk/pypy: . tool tool/pytest
translator/platform
Message-ID: <20100302044536.6A57351055@codespeak.net>
Author: fijal
Date: Tue Mar 2 05:45:34 2010
New Revision: 71607
Modified:
pypy/trunk/pypy/conftest.py
pypy/trunk/pypy/tool/ansi_mandelbrot.py
pypy/trunk/pypy/tool/ansi_print.py
pypy/trunk/pypy/tool/pytest/appsupport.py
pypy/trunk/pypy/translator/platform/__init__.py
Log:
Make pypy work with py.test 1.2.1 (last release). It does not work completely,
because of sys.path issues, but at least you can set PYTHONPATH and it works.
Modified: pypy/trunk/pypy/conftest.py
==============================================================================
--- pypy/trunk/pypy/conftest.py (original)
+++ pypy/trunk/pypy/conftest.py Tue Mar 2 05:45:34 2010
@@ -1,5 +1,8 @@
import py, sys, os
-from py.impl.test.outcome import Failed
+try:
+ from py.impl.test.outcome import Failed
+except:
+ from py._test.outcome import Failed
from pypy.interpreter.gateway import app2interp_temp
from pypy.interpreter.error import OperationError
from pypy.tool.pytest import appsupport
Modified: pypy/trunk/pypy/tool/ansi_mandelbrot.py
==============================================================================
--- pypy/trunk/pypy/tool/ansi_mandelbrot.py (original)
+++ pypy/trunk/pypy/tool/ansi_mandelbrot.py Tue Mar 2 05:45:34 2010
@@ -1,6 +1,9 @@
import sys
-from py.impl.io.terminalwriter import ansi_print, get_terminal_width
+try:
+ from py.impl.io.terminalwriter import ansi_print, get_terminal_width
+except:
+ from py._io.terminalwriter import ansi_print, get_terminal_width
"""
Black 0;30 Dark Gray 1;30
Modified: pypy/trunk/pypy/tool/ansi_print.py
==============================================================================
--- pypy/trunk/pypy/tool/ansi_print.py (original)
+++ pypy/trunk/pypy/tool/ansi_print.py Tue Mar 2 05:45:34 2010
@@ -4,7 +4,10 @@
import sys
-from py.impl.io.terminalwriter import ansi_print
+try:
+ from py.impl.io.terminalwriter import ansi_print
+except:
+ from py._io.terminalwriter import ansi_print
from pypy.tool.ansi_mandelbrot import Driver
class AnsiLog:
Modified: pypy/trunk/pypy/tool/pytest/appsupport.py
==============================================================================
--- pypy/trunk/pypy/tool/pytest/appsupport.py (original)
+++ pypy/trunk/pypy/tool/pytest/appsupport.py Tue Mar 2 05:45:34 2010
@@ -1,10 +1,15 @@
import autopath
import py
-import py.impl.code.assertion
-from py.impl.code import _assertionold as exprinfo
+try:
+ import py.impl.code.assertion
+ from py.impl.code import _assertionold as exprinfo
+ from py.impl.test.outcome import ExceptionFailure
+except:
+ import py._code.assertion
+ from py._code import _assertionold as exprinfo
+ from py._test.outcome import ExceptionFailure
from pypy.interpreter import gateway
from pypy.interpreter.error import OperationError
-from py.impl.test.outcome import ExceptionFailure
# ____________________________________________________________
Modified: pypy/trunk/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/__init__.py (original)
+++ pypy/trunk/pypy/translator/platform/__init__.py Tue Mar 2 05:45:34 2010
@@ -6,7 +6,10 @@
import sys, py, os
from pypy.tool.ansi_print import ansi_log
-from py.impl.code.code import safe_repr
+try:
+ from py.impl.code.code import safe_repr
+except:
+ from py._code.code import safe_repr
log = py.log.Producer("platform")
py.log.setconsumer("platform", ansi_log)
From fijal at codespeak.net Tue Mar 2 05:47:53 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 05:47:53 +0100 (CET)
Subject: [pypy-svn] r71608 - in pypy/branch/jit-sandbox/pypy: . tool
tool/pytest translator/platform
Message-ID: <20100302044753.0A60751055@codespeak.net>
Author: fijal
Date: Tue Mar 2 05:47:52 2010
New Revision: 71608
Modified:
pypy/branch/jit-sandbox/pypy/conftest.py
pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py
pypy/branch/jit-sandbox/pypy/tool/ansi_print.py
pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py
pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py
Log:
Merge 71607 from trunk
Modified: pypy/branch/jit-sandbox/pypy/conftest.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/conftest.py (original)
+++ pypy/branch/jit-sandbox/pypy/conftest.py Tue Mar 2 05:47:52 2010
@@ -1,5 +1,8 @@
import py, sys, os
-from py.impl.test.outcome import Failed
+try:
+ from py.impl.test.outcome import Failed
+except:
+ from py._test.outcome import Failed
from pypy.interpreter.gateway import app2interp_temp
from pypy.interpreter.error import OperationError
from pypy.tool.pytest import appsupport
Modified: pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py (original)
+++ pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py Tue Mar 2 05:47:52 2010
@@ -1,6 +1,9 @@
import sys
-from py.impl.io.terminalwriter import ansi_print, get_terminal_width
+try:
+ from py.impl.io.terminalwriter import ansi_print, get_terminal_width
+except:
+ from py._io.terminalwriter import ansi_print, get_terminal_width
"""
Black 0;30 Dark Gray 1;30
Modified: pypy/branch/jit-sandbox/pypy/tool/ansi_print.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/tool/ansi_print.py (original)
+++ pypy/branch/jit-sandbox/pypy/tool/ansi_print.py Tue Mar 2 05:47:52 2010
@@ -4,7 +4,10 @@
import sys
-from py.impl.io.terminalwriter import ansi_print
+try:
+ from py.impl.io.terminalwriter import ansi_print
+except:
+ from py._io.terminalwriter import ansi_print
from pypy.tool.ansi_mandelbrot import Driver
class AnsiLog:
Modified: pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py (original)
+++ pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py Tue Mar 2 05:47:52 2010
@@ -1,10 +1,15 @@
import autopath
import py
-import py.impl.code.assertion
-from py.impl.code import _assertionold as exprinfo
+try:
+ import py.impl.code.assertion
+ from py.impl.code import _assertionold as exprinfo
+ from py.impl.test.outcome import ExceptionFailure
+except:
+ import py._code.assertion
+ from py._code import _assertionold as exprinfo
+ from py._test.outcome import ExceptionFailure
from pypy.interpreter import gateway
from pypy.interpreter.error import OperationError
-from py.impl.test.outcome import ExceptionFailure
# ____________________________________________________________
Modified: pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py (original)
+++ pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py Tue Mar 2 05:47:52 2010
@@ -6,7 +6,10 @@
import sys, py, os
from pypy.tool.ansi_print import ansi_log
-from py.impl.code.code import safe_repr
+try:
+ from py.impl.code.code import safe_repr
+except:
+ from py._code.code import safe_repr
log = py.log.Producer("platform")
py.log.setconsumer("platform", ansi_log)
From fijal at codespeak.net Tue Mar 2 05:51:27 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 05:51:27 +0100 (CET)
Subject: [pypy-svn] r71609 - in pypy/trunk/pypy: . tool tool/pytest
translator/platform
Message-ID: <20100302045127.AFECB51055@codespeak.net>
Author: fijal
Date: Tue Mar 2 05:51:25 2010
New Revision: 71609
Modified:
pypy/trunk/pypy/conftest.py
pypy/trunk/pypy/tool/ansi_mandelbrot.py
pypy/trunk/pypy/tool/ansi_print.py
pypy/trunk/pypy/tool/pytest/appsupport.py
pypy/trunk/pypy/translator/platform/__init__.py
Log:
Revert 71607. It seems I can't make recent py.test working with pypy anyway,
since py.test introduced regressions and holger is on holiday.
Modified: pypy/trunk/pypy/conftest.py
==============================================================================
--- pypy/trunk/pypy/conftest.py (original)
+++ pypy/trunk/pypy/conftest.py Tue Mar 2 05:51:25 2010
@@ -1,8 +1,5 @@
import py, sys, os
-try:
- from py.impl.test.outcome import Failed
-except:
- from py._test.outcome import Failed
+from py.impl.test.outcome import Failed
from pypy.interpreter.gateway import app2interp_temp
from pypy.interpreter.error import OperationError
from pypy.tool.pytest import appsupport
Modified: pypy/trunk/pypy/tool/ansi_mandelbrot.py
==============================================================================
--- pypy/trunk/pypy/tool/ansi_mandelbrot.py (original)
+++ pypy/trunk/pypy/tool/ansi_mandelbrot.py Tue Mar 2 05:51:25 2010
@@ -1,9 +1,6 @@
import sys
-try:
- from py.impl.io.terminalwriter import ansi_print, get_terminal_width
-except:
- from py._io.terminalwriter import ansi_print, get_terminal_width
+from py.impl.io.terminalwriter import ansi_print, get_terminal_width
"""
Black 0;30 Dark Gray 1;30
Modified: pypy/trunk/pypy/tool/ansi_print.py
==============================================================================
--- pypy/trunk/pypy/tool/ansi_print.py (original)
+++ pypy/trunk/pypy/tool/ansi_print.py Tue Mar 2 05:51:25 2010
@@ -4,10 +4,7 @@
import sys
-try:
- from py.impl.io.terminalwriter import ansi_print
-except:
- from py._io.terminalwriter import ansi_print
+from py.impl.io.terminalwriter import ansi_print
from pypy.tool.ansi_mandelbrot import Driver
class AnsiLog:
Modified: pypy/trunk/pypy/tool/pytest/appsupport.py
==============================================================================
--- pypy/trunk/pypy/tool/pytest/appsupport.py (original)
+++ pypy/trunk/pypy/tool/pytest/appsupport.py Tue Mar 2 05:51:25 2010
@@ -1,15 +1,10 @@
import autopath
import py
-try:
- import py.impl.code.assertion
- from py.impl.code import _assertionold as exprinfo
- from py.impl.test.outcome import ExceptionFailure
-except:
- import py._code.assertion
- from py._code import _assertionold as exprinfo
- from py._test.outcome import ExceptionFailure
+import py.impl.code.assertion
+from py.impl.code import _assertionold as exprinfo
from pypy.interpreter import gateway
from pypy.interpreter.error import OperationError
+from py.impl.test.outcome import ExceptionFailure
# ____________________________________________________________
Modified: pypy/trunk/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/__init__.py (original)
+++ pypy/trunk/pypy/translator/platform/__init__.py Tue Mar 2 05:51:25 2010
@@ -6,10 +6,7 @@
import sys, py, os
from pypy.tool.ansi_print import ansi_log
-try:
- from py.impl.code.code import safe_repr
-except:
- from py._code.code import safe_repr
+from py.impl.code.code import safe_repr
log = py.log.Producer("platform")
py.log.setconsumer("platform", ansi_log)
From fijal at codespeak.net Tue Mar 2 05:53:28 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 05:53:28 +0100 (CET)
Subject: [pypy-svn] r71610 - in pypy/branch/jit-sandbox/pypy: . tool
tool/pytest translator/platform
Message-ID: <20100302045328.5760551055@codespeak.net>
Author: fijal
Date: Tue Mar 2 05:53:26 2010
New Revision: 71610
Modified:
pypy/branch/jit-sandbox/pypy/conftest.py
pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py
pypy/branch/jit-sandbox/pypy/tool/ansi_print.py
pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py
pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py
Log:
Revert 71608
Modified: pypy/branch/jit-sandbox/pypy/conftest.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/conftest.py (original)
+++ pypy/branch/jit-sandbox/pypy/conftest.py Tue Mar 2 05:53:26 2010
@@ -1,8 +1,5 @@
import py, sys, os
-try:
- from py.impl.test.outcome import Failed
-except:
- from py._test.outcome import Failed
+from py.impl.test.outcome import Failed
from pypy.interpreter.gateway import app2interp_temp
from pypy.interpreter.error import OperationError
from pypy.tool.pytest import appsupport
Modified: pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py (original)
+++ pypy/branch/jit-sandbox/pypy/tool/ansi_mandelbrot.py Tue Mar 2 05:53:26 2010
@@ -1,9 +1,6 @@
import sys
-try:
- from py.impl.io.terminalwriter import ansi_print, get_terminal_width
-except:
- from py._io.terminalwriter import ansi_print, get_terminal_width
+from py.impl.io.terminalwriter import ansi_print, get_terminal_width
"""
Black 0;30 Dark Gray 1;30
Modified: pypy/branch/jit-sandbox/pypy/tool/ansi_print.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/tool/ansi_print.py (original)
+++ pypy/branch/jit-sandbox/pypy/tool/ansi_print.py Tue Mar 2 05:53:26 2010
@@ -4,10 +4,7 @@
import sys
-try:
- from py.impl.io.terminalwriter import ansi_print
-except:
- from py._io.terminalwriter import ansi_print
+from py.impl.io.terminalwriter import ansi_print
from pypy.tool.ansi_mandelbrot import Driver
class AnsiLog:
Modified: pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py (original)
+++ pypy/branch/jit-sandbox/pypy/tool/pytest/appsupport.py Tue Mar 2 05:53:26 2010
@@ -1,15 +1,10 @@
import autopath
import py
-try:
- import py.impl.code.assertion
- from py.impl.code import _assertionold as exprinfo
- from py.impl.test.outcome import ExceptionFailure
-except:
- import py._code.assertion
- from py._code import _assertionold as exprinfo
- from py._test.outcome import ExceptionFailure
+import py.impl.code.assertion
+from py.impl.code import _assertionold as exprinfo
from pypy.interpreter import gateway
from pypy.interpreter.error import OperationError
+from py.impl.test.outcome import ExceptionFailure
# ____________________________________________________________
Modified: pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py (original)
+++ pypy/branch/jit-sandbox/pypy/translator/platform/__init__.py Tue Mar 2 05:53:26 2010
@@ -6,10 +6,7 @@
import sys, py, os
from pypy.tool.ansi_print import ansi_log
-try:
- from py.impl.code.code import safe_repr
-except:
- from py._code.code import safe_repr
+from py.impl.code.code import safe_repr
log = py.log.Producer("platform")
py.log.setconsumer("platform", ansi_log)
From dan at codespeak.net Tue Mar 2 06:52:53 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Tue, 2 Mar 2010 06:52:53 +0100 (CET)
Subject: [pypy-svn] r71611 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100302055253.1E47151055@codespeak.net>
Author: dan
Date: Tue Mar 2 06:52:52 2010
New Revision: 71611
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/array.py
pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
pypy/branch/micronumpy/pypy/module/micronumpy/ufunc.py
Log:
Added DynamicType object implementing (somewhat) the functionality of NumPy's dtype objects, did a bit of housekeeping.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/array.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/array.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/array.py Tue Mar 2 06:52:52 2010
@@ -6,6 +6,9 @@
from pypy.module.micronumpy.dtype import iterable_type
+from pypy.module.micronumpy.dtype import get_dtype
+from pypy.module.micronumpy.dtype import retrieve_dtype #FIXME: ambiguous name?
+
class BaseNumArray(Wrappable):
pass
@@ -22,7 +25,6 @@
if e.match(space, space.w_TypeError): pass
else: raise
-
def mul_operation():
def mul(x, y): return x * y
return mul
@@ -91,9 +93,9 @@
try:
if len(shape) == 1:
length = shape[0]
- return sdresult(space, w_dtype)(space, length, w_dtype)
+ return sdresult(w_dtype.code)(space, length, w_dtype)
else:
- return mdresult(space, w_dtype)(space, shape, w_dtype)
+ return mdresult(w_dtype.code)(space, shape, w_dtype)
except KeyError, e:
raise OperationError(space.w_NotImplementedError,
space.wrap("Haven't implemented generic array yet!"))
@@ -102,7 +104,8 @@
w_buffer=NoneNotWrapped, w_offset=NoneNotWrapped,
w_strides=NoneNotWrapped, order='C'):
shape_w = unpack_shape(space, w_shape)
- result = construct_array(space, shape_w, w_dtype)
+ dtype_w = get_dtype(space, w_dtype)
+ result = construct_array(space, shape_w, dtype_w)
#TODO: load from buffer?
return space.wrap(result)
descr_new.unwrap_spec = [ObjSpace, W_Root, W_Root, W_Root,
@@ -121,8 +124,10 @@
shape = infer_shape(space, w_values)
if w_dtype is None:
- w_dtype = iterable_type(space, w_values)
- result = construct_array(space, shape, w_dtype)
+ dtype_w = retrieve_dtype(space, iterable_type(space, w_values))
+ else:
+ dtype_w = get_dtype(space, w_dtype)
+ result = construct_array(space, shape, dtype_w)
result.load_iterable(w_values)
return space.wrap(result)
array.unwrap_spec = [ObjSpace, W_Root, W_Root,
@@ -131,6 +136,10 @@
def zeros(space, w_shape, w_dtype=NoneNotWrapped, order='C'):
shape_w = unpack_shape(space, w_shape)
- result = construct_array(space, shape_w, w_dtype)
+ if w_dtype is None:
+ dtype_w = retrieve_dtype(space, 'd')
+ else:
+ dtype_w = get_dtype(space, w_dtype)
+ result = construct_array(space, shape_w, dtype_w)
return space.wrap(result)
zeros.unwrap_spec = [ObjSpace, W_Root, W_Root, str]
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py Tue Mar 2 06:52:52 2010
@@ -1,4 +1,8 @@
-?from pypy.interpreter.error import OperationError
+?from pypy.interpreter.baseobjspace import ObjSpace, W_Root, Wrappable
+from pypy.interpreter.error import OperationError
+from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.gateway import interp2app
+
def unwrap_int(space, w_x):
return space.int_w(w_x)
def coerce_int(space, w_x):
@@ -15,34 +19,108 @@
def coerce_float32(space, w_x):
return unwrap_float32(space, space.float(w_x))
-def result_mapping(space, w_types):
- types = {
- (space.w_int, space.w_int): space.w_int,
- (space.w_int, space.w_float): space.w_float,
- (space.w_float, space.w_int): space.w_float,
- (space.w_float, space.w_float): space.w_float
- }
- return types[w_types]
+def typecode(space, w_type):
+ try:
+ assert isinstance(w_type, DynamicType)
+ return w_type.code
+ except AssertionError, e: pass
+
+ try:
+ return space.str_w(w_type)
+ except OperationError, e:
+ typecode_mapping = {
+ space.w_int: 'i',
+ space.w_float: 'd',
+ }
+ try:
+ return typecode_mapping[w_type]
+ except IndexError, e:
+ raise OperationError(space.w_TypeError,
+ space.wrap("Can't understand type."))
+
+result_types = {
+ ('i', 'i'): 'i',
+ ('i', 'd'): 'd',
+ ('d', 'i'): 'd',
+ ('d', 'd'): 'd',
+ }
+
+def result_mapping(space, types):
+ types = (typecode(space, types[0]),
+ typecode(space, types[1]))
+ return result_types[types]
def iterable_type(space, w_xs):
xs = space.fixedview(w_xs)
- result_type = space.w_int
+ result_type = 'i'
for i in range(len(xs)):
try:
- space.iter(xs[i])
+ atype = iterable_type(space, xs[i])
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
- atype = space.type(xs[i])
- else:
- atype = iterable_type(space, xs[i])
- result_type = result_mapping(space, (result_type, atype))
+ atype = typecode(space, space.type(xs[i]))
+ result_type = result_types[(result_type, atype)]
return result_type
-def create_factory(dict_filler):
- result_factory = {}
- def result(space, t):
- if not result_factory:
- result_factory.update(dict_filler(space))
+def create_factory(result_factory):
+ def factory(t):
return result_factory[t]
- return result
+ return factory
+
+class DynamicType(Wrappable):
+ def __init__(self, code, name, applevel_type):
+ self.code = code
+ self.name = name
+ self.applevel_type = applevel_type
+
+ def descr_eq(self, space, w_x):
+ if space.abstract_isinstance_w(w_x, space.w_type):
+ return space.eq(self.applevel_type, w_x) #FIXME: correct comparison?
+ else:
+ try:
+ code = space.str_w(w_x)
+ if self.code == code:
+ return space.wrap(True)
+ elif self.name == code:
+ return space.wrap(True)
+ else:
+ return space.wrap(False)
+ except OperationError, e:
+ return space.wrap(False)
+ except TypeError, e:
+ return space.wrap(False) #FIXME: need to throw applevel type error
+ descr_eq.unwrap_spec = ['self', ObjSpace, W_Root]
+DynamicType.typedef = TypeDef('dtype',
+ __eq__ = interp2app(DynamicType.descr_eq),
+ )
+
+class DynamicTypes(object):
+ def __init__(self):
+ self.dtypes = {}
+ def verify_dtype_dict(self, space):
+ if not self.dtypes:
+ self.dtypes.update(
+ {
+ 'i': DynamicType('i', 'int32', space.w_int),
+ 'd': DynamicType('d', 'float64', space.w_float),
+ }
+ )
+
+ def retrieve_dtype(self, space, t):
+ self.verify_dtype_dict(space)
+ return self.dtypes[t]
+
+ def get_dtype(self, space, w_type):
+ try:
+ t = space.str_w(w_type)
+ except OperationError, e:
+ if e.match(space, space.w_TypeError):
+ t = typecode(space, w_type)
+ else:
+ raise
+ return self.retrieve_dtype(space, t)
+
+dtypes = DynamicTypes()
+get_dtype = dtypes.get_dtype
+retrieve_dtype = dtypes.retrieve_dtype
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py Tue Mar 2 06:52:52 2010
@@ -365,4 +365,4 @@
MultiDimIntArray = create_mdarray(int, unwrap_int, coerce_int)
MultiDimFloatArray = create_mdarray(float, unwrap_float, coerce_float)
-mdresult = create_factory(lambda space: {space.w_int: MultiDimIntArray, space.w_float: MultiDimFloatArray})
+mdresult = create_factory({'i': MultiDimIntArray, 'd': MultiDimFloatArray})
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py Tue Mar 2 06:52:52 2010
@@ -10,15 +10,6 @@
from pypy.module.micronumpy.mdarray import mdresult
-def result_type(space, w_types):
- types = {
- (space.w_int, space.w_int): space.w_int,
- (space.w_int, space.w_float): space.w_float,
- (space.w_float, space.w_int): space.w_float,
- (space.w_float, space.w_float): space.w_float
- }
- return types[w_types]
-
def unpack_shape(space, w_shape):
if space.is_true(space.isinstance(w_shape, space.w_int)):
return [space.int_w(w_shape)]
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Tue Mar 2 06:52:52 2010
@@ -1,5 +1,4 @@
?from pypy.interpreter.baseobjspace import W_Root, Wrappable
-from pypy.objspace.std.sliceobject import W_SliceObject
from pypy.interpreter.error import OperationError
from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.interpreter.gateway import interp2app
@@ -9,7 +8,6 @@
from pypy.module.micronumpy.array import base_typedef
from pypy.module.micronumpy.array import \
mul_operation, div_operation, add_operation, sub_operation
-from pypy.module.micronumpy.array import copy_operation
from pypy.module.micronumpy.dtype import unwrap_int, coerce_int
from pypy.module.micronumpy.dtype import unwrap_float, coerce_float
@@ -19,63 +17,22 @@
from pypy.module.micronumpy.dtype import create_factory
+from pypy.module.micronumpy.dtype import get_dtype
+from pypy.module.micronumpy.dtype import retrieve_dtype #FIXME: ambiguously named?
+from pypy.module.micronumpy.dtype import DynamicType
+
#TODO: merge unwrap_spec decorator
# from pypy.interpreter.gateway import unwrap_spec
-
class BaseSingleDimArray(BaseNumArray): pass
def descr_dtype(space, self):
- return self.dtype
+ return space.wrap(self.dtype)
def descr_shape(space, self):
return space.newtuple([space.wrap(self.len())])
-
-
-MUL = mul_operation()
-DIV = div_operation()
-ADD = add_operation()
-SUB = sub_operation()
-COPY = copy_operation()
-
def create_sdarray(data_type, unwrap, coerce):
-
- def create_math_operation(f):
- opname = f.__name__
- def math_operation(self, w_x):
- space = self.space
- try:
- space.iter(w_x)
- except OperationError, e:
- if not e.match(space, space.w_TypeError):
- raise
- result_t = result_mapping(space,
- (space.type(w_x), self.dtype))
- op2 = coerce(space, w_x)
- result = sdresult(space, result_t)(space, self.len(), result_t)
- operation = result.__class__.client_scalar[opname]
- else:
- lop = space.int_w(space.len(w_x))
- if lop != self.len():
- raise OperationError(space.w_ValueError,
- space.wrap("shape mismatch: objects cannot be"
- " broadcast to the same shape"))
- dtype = iterable_type(space, w_x)
- result_t = result_mapping(space, (dtype, self.dtype))
- op2 = sdresult(space, dtype)(space, lop, dtype)
- op2.load_iterable(w_x)
- result = sdresult(space, result_t)(space, self.len(), result_t)
- operation = result.__class__.client_fixedview[opname]
-
- operation(result, self, op2)
-
- w_result = space.wrap(result)
- return w_result
- math_operation.unwrap_spec = ['self', W_Root]
- math_operation.__name__ = 'descr_'+opname
- return math_operation
-
class SingleDimIterator(Wrappable):
def __init__(self, space, array, i):
self.space = space
@@ -105,39 +62,78 @@
def create_client_math_operation(f):
def scalar_operation(self, source, x):
for i in range(len(source.storage)):
- self.storage[i] = data_type(f(source.storage[i], x))
+ self.storage[i] = f(source.storage[i], x)
- def fixedview_operation(self, source1, source2):
+ def fixedview_operation(self, a, b):
for i in range(self.len()):
- self.storage[i] = \
- data_type(f(source1.storage[i], source2.storage[i]))
+ self.storage[i] = f(a.storage[i], b.storage[i])
return scalar_operation, fixedview_operation
+ def create_math_operation(f):
+ opname = f.__name__
+ def math_operation(self, w_x):
+ space = self.space
+ try:
+ space.iter(w_x)
+ except OperationError, e:
+ if not e.match(space, space.w_TypeError):
+ raise
+ result_t = result_mapping(space,
+ (space.type(w_x), self.dtype))
+ x = coerce(space, w_x)
+ result = sdresult(result_t)(space,
+ self.len(), retrieve_dtype(space, result_t)
+ )
+ client_scalar[opname](result, self, x)
+ else:
+ operand_length = space.int_w(space.len(w_x))
+ if operand_length != self.len():
+ raise OperationError(space.w_ValueError,
+ space.wrap("shape mismatch: objects cannot be"
+ " broadcast to the same shape"))
+ dtype_w = retrieve_dtype(space, iterable_type(space, w_x))
+ result_t = result_mapping(space, (dtype_w, self.dtype))
+ xs = sdresult(dtype_w.code)(space, operand_length, dtype_w)
+ xs.load_iterable(w_x)
+ result = sdresult(result_t)(
+ space, self.len(), retrieve_dtype(space, result_t)
+ )
+ client_fixedview[opname](result, self, xs)
+
+ return space.wrap(result)
+ math_operation.unwrap_spec = ['self', W_Root]
+ math_operation.__name__ = "%s_descr_%s" % (str(data_type), opname)
+ return math_operation
+
+ client_scalar = {}
+ client_fixedview = {}
+
+ mul = mul_operation()
+ client_scalar['mul'], client_fixedview['mul'] = \
+ create_client_math_operation(mul)
+ div = div_operation()
+ client_scalar['div'], client_fixedview['div'] = \
+ create_client_math_operation(div)
+ add = add_operation()
+ client_scalar['add'], client_fixedview['add'] = \
+ create_client_math_operation(add)
+ sub = sub_operation()
+ client_scalar['sub'], client_fixedview['sub'] = \
+ create_client_math_operation(sub)
+
class NumArray(BaseSingleDimArray):
def __init__(self, space, length, dtype):
self.shape = (length,)
self.space = space
- self.storage = make_sure_not_resized([data_type(0.0)] * length)
+ self.storage = [data_type(0.0)] * length
+ assert isinstance(dtype, DynamicType)
self.dtype = dtype
+ make_sure_not_resized(self.storage)
-
- client_scalar = {}
- client_fixedview = {}
-
- client_scalar['mul'], client_fixedview['mul'] = \
- create_client_math_operation(MUL)
- client_scalar['div'], client_fixedview['div'] = \
- create_client_math_operation(DIV)
- client_scalar['add'], client_fixedview['add'] = \
- create_client_math_operation(ADD)
- client_scalar['sub'], client_fixedview['sub'] = \
- create_client_math_operation(SUB)
-
-
- descr_mul = create_math_operation(MUL)
- descr_div = create_math_operation(DIV)
- descr_add = create_math_operation(ADD)
- descr_sub = create_math_operation(SUB)
+ descr_mul = create_math_operation(mul)
+ descr_div = create_math_operation(div)
+ descr_add = create_math_operation(add)
+ descr_sub = create_math_operation(sub)
def load_iterable(self, w_values):
space = self.space
@@ -161,9 +157,9 @@
def descr_getitem(self, w_index):
space = self.space
- if isinstance(w_index, W_SliceObject):
+ if space.is_true(space.isinstance(w_index, space.w_slice)):
start, stop, step, slen = w_index.indices4(space, self.len())
- res = sdresult(space, self.dtype)(space, slen, self.dtype)
+ res = sdresult(self.dtype.code)(space, slen, self.dtype)
if step == 1:
res.storage[:] = self.storage[start:stop]
else:
@@ -186,7 +182,7 @@
def descr_setitem(self, w_index, w_value):
space = self.space
- if isinstance(w_index, W_SliceObject):
+ if space.is_true(space.isinstance(w_index, space.w_slice)):
start, stop, step, slen = w_index.indices4(space, self.len())
try:
space.iter(w_value)
@@ -260,12 +256,15 @@
__div__ = interp2app(NumArray.descr_div),
__add__ = interp2app(NumArray.descr_add),
__sub__ = interp2app(NumArray.descr_sub),
+
__rmul__ = interp2app(NumArray.descr_mul),
__rdiv__ = interp2app(NumArray.descr_div),
__radd__ = interp2app(NumArray.descr_add),
__rsub__ = interp2app(NumArray.descr_sub),
+
__getitem__ = interp2app(NumArray.descr_getitem),
__setitem__ = interp2app(NumArray.descr_setitem),
+
__len__ = interp2app(NumArray.descr_len),
__str__ = interp2app(NumArray.descr_str),
__repr__ = interp2app(NumArray.descr_repr),
@@ -282,4 +281,4 @@
Float32Array = create_sdarray(float32, unwrap_float32, coerce_float32)
GenericArray = None
-sdresult = create_factory(lambda space: {space.w_int: IntArray, space.w_float: FloatArray})
+sdresult = create_factory({'i': IntArray, 'd': FloatArray})
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Tue Mar 2 06:52:52 2010
@@ -49,6 +49,17 @@
(float, float): float
}
+ typecodes = {int: 'i',
+ float: 'd'}
+
+ typestrings = {int: 'int32',
+ float: 'float64'}
+
+ def test_type(dtype, expected_type):
+ assert dtype == expected_type
+ assert dtype == typecodes[expected_type]
+ assert dtype == typestrings[expected_type]
+
for operand_types, result_type in types.iteritems():
for operator in (mul, div, add, sub):
a_type, b_type = operand_types
@@ -56,16 +67,16 @@
b = array(xrange(1, self.length + 1), dtype=b_type)
c = operator(a, b)
- assert c.dtype == result_type
+ test_type(c.dtype, result_type)
d = operator(b, a)
- assert d.dtype == result_type
+ test_type(d.dtype, result_type)
e = operator(a, b_type(self.value))
- assert e.dtype == result_type
+ test_type(e.dtype, result_type)
f = operator(a_type(self.value), b)
- assert f.dtype == result_type
+ test_type(f.dtype, result_type)
def test_iter(self):
from numpy import array
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/ufunc.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/ufunc.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/ufunc.py Tue Mar 2 06:52:52 2010
@@ -3,6 +3,9 @@
from pypy.module.micronumpy.dtype import result_mapping
from pypy.module.micronumpy.sdarray import sdresult
from pypy.module.micronumpy.mdarray import mdresult, compute_pos
+
+from pypy.module.micronumpy.dtype import retrieve_dtype
+
from pypy.interpreter.baseobjspace import ObjSpace, W_Root
from pypy.interpreter.error import OperationError
from pypy.rlib.debug import make_sure_not_resized
@@ -15,7 +18,7 @@
raise OperationError(space.w_ValueError,
space.wrap("minimum of arrays of different length"))
dtype = result_mapping(space, (w_a.dtype, w_b.dtype))
- res = construct_array(space, w_a.shape, dtype)
+ res = construct_array(space, w_a.shape, retrieve_dtype(space, dtype))
for i in range(len(w_a.storage)):
one = w_a.storage[i]
two = w_b.storage[i]
@@ -74,7 +77,7 @@
dtype = result_mapping(space, (w_a.dtype, w_b.dtype))
- res = construct_array(space, shape, dtype)
+ res = construct_array(space, shape, retrieve_dtype(space, dtype))
res.storage[:] = data
return space.wrap(res)
dot.unwrap_spec = [ObjSpace, W_Root, W_Root]
From arigo at codespeak.net Tue Mar 2 11:14:11 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 11:14:11 +0100 (CET)
Subject: [pypy-svn] r71615 - pypy/trunk/pypy/jit/metainterp
Message-ID: <20100302101411.DF2FD282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 11:14:10 2010
New Revision: 71615
Modified:
pypy/trunk/pypy/jit/metainterp/virtualref.py
Log:
Oups. Fix tests.
Modified: pypy/trunk/pypy/jit/metainterp/virtualref.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/virtualref.py (original)
+++ pypy/trunk/pypy/jit/metainterp/virtualref.py Tue Mar 2 11:14:10 2010
@@ -29,8 +29,9 @@
self.descr_forced = fielddescrof(self.JIT_VIRTUAL_REF, 'forced')
#
# record the type JIT_VIRTUAL_REF explicitly in the rtyper, too
- self.warmrunnerdesc.rtyper.set_type_for_typeptr(
- self.jit_virtual_ref_vtable, self.JIT_VIRTUAL_REF)
+ if hasattr(self.warmrunnerdesc, 'rtyper'): # <-- for tests
+ self.warmrunnerdesc.rtyper.set_type_for_typeptr(
+ self.jit_virtual_ref_vtable, self.JIT_VIRTUAL_REF)
def _freeze_(self):
return True
From arigo at codespeak.net Tue Mar 2 11:31:38 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 11:31:38 +0100 (CET)
Subject: [pypy-svn] r71616 - in pypy/trunk/pypy/objspace/std: . test
Message-ID: <20100302103138.83817282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 11:31:36 2010
New Revision: 71616
Modified:
pypy/trunk/pypy/objspace/std/multimethod.py
pypy/trunk/pypy/objspace/std/test/test_multimethod.py
Log:
Reintroduce this check, using __new__ to avoid it getting in
the way of the translation. See comment in new test.
Modified: pypy/trunk/pypy/objspace/std/multimethod.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/multimethod.py (original)
+++ pypy/trunk/pypy/objspace/std/multimethod.py Tue Mar 2 11:31:36 2010
@@ -25,6 +25,11 @@
class FailedToImplement(Exception):
+ def __new__(cls, *args):
+ if cls is FailedToImplement:
+ assert not args, "use FailedToImplementArgs!"
+ return Exception.__new__(cls, *args)
+
def get_w_value(self, space):
return None
Modified: pypy/trunk/pypy/objspace/std/test/test_multimethod.py
==============================================================================
--- pypy/trunk/pypy/objspace/std/test/test_multimethod.py (original)
+++ pypy/trunk/pypy/objspace/std/test/test_multimethod.py Tue Mar 2 11:31:36 2010
@@ -2,6 +2,7 @@
from pypy.objspace.std import multimethod
from pypy.objspace.std.multimethod import FailedToImplement
+from pypy.objspace.std.multimethod import FailedToImplementArgs
class W_Root(object):
@@ -27,6 +28,19 @@
return 'fine'
+def test_failedtoimplement():
+ f = FailedToImplement()
+ assert f.get_w_type("space") is None
+ assert f.get_w_value("space") is None
+ f = FailedToImplementArgs("ab", "cd")
+ assert f.get_w_type("space") == "ab"
+ assert f.get_w_value("space") == "cd"
+ # for testing it's good to get the following behavior:
+ raises(AssertionError, FailedToImplement, "ab", "cd")
+ # but the class FailedToImplement should have no __init__ for translation:
+ assert '__init__' not in FailedToImplement.__dict__
+
+
class TestMultiMethod1:
Installer = multimethod.InstallerVersion1
From arigo at codespeak.net Tue Mar 2 12:54:39 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 12:54:39 +0100 (CET)
Subject: [pypy-svn] r71617 - pypy/branch/gcremovetypeptr
Message-ID: <20100302115439.85483282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 12:54:37 2010
New Revision: 71617
Added:
pypy/branch/gcremovetypeptr/
- copied from r71616, pypy/trunk/
Log:
Make a branch just for running the performance plots.
From arigo at codespeak.net Tue Mar 2 12:55:16 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 12:55:16 +0100 (CET)
Subject: [pypy-svn] r71618 - pypy/branch/gcremovetypeptr/pypy/config
Message-ID: <20100302115516.18131282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 12:55:14 2010
New Revision: 71618
Modified:
pypy/branch/gcremovetypeptr/pypy/config/translationoption.py
Log:
Change this to True.
Modified: pypy/branch/gcremovetypeptr/pypy/config/translationoption.py
==============================================================================
--- pypy/branch/gcremovetypeptr/pypy/config/translationoption.py (original)
+++ pypy/branch/gcremovetypeptr/pypy/config/translationoption.py Tue Mar 2 12:55:14 2010
@@ -73,7 +73,7 @@
("translation.gcremovetypeptr", False)],
}),
BoolOption("gcremovetypeptr", "Remove the typeptr from every object",
- default=False, cmdline="--gcremovetypeptr"),
+ default=True, cmdline="--gcremovetypeptr"),
ChoiceOption("gcrootfinder",
"Strategy for finding GC Roots (framework GCs only)",
["n/a", "shadowstack", "asmgcc"],
From tobami at codespeak.net Tue Mar 2 13:14:56 2010
From: tobami at codespeak.net (tobami at codespeak.net)
Date: Tue, 2 Mar 2010 13:14:56 +0100 (CET)
Subject: [pypy-svn] r71619 - in codespeed/pyspeed: codespeed media/css
templates
Message-ID: <20100302121456.B2C9C51055@codespeak.net>
Author: tobami
Date: Tue Mar 2 13:14:54 2010
New Revision: 71619
Modified:
codespeed/pyspeed/codespeed/views.py
codespeed/pyspeed/media/css/main.css
codespeed/pyspeed/templates/overview.html
codespeed/pyspeed/templates/overview_table.html
codespeed/pyspeed/templates/timeline.html
Log:
Overview: Added average row. Fixed nav tabs for IE. Small fixes.
Modified: codespeed/pyspeed/codespeed/views.py
==============================================================================
--- codespeed/pyspeed/codespeed/views.py (original)
+++ codespeed/pyspeed/codespeed/views.py Tue Mar 2 13:14:54 2010
@@ -22,7 +22,11 @@
result_list = {}
baseline = Interpreter.objects.get(id=1)
- baselinerev = Revision.objects.get(tag="2.6.2")
+ baselinerev = lastbase = Revision.objects.filter(
+ tag__isnull=False
+ ).filter(
+ project='cpython'
+ ).order_by('-number')[0]
if data["baseline"] == "true":
result_list["baseline"] = Result.objects.get(
interpreter=baseline, benchmark=data["benchmark"], revision=baselinerev
@@ -54,19 +58,21 @@
# Configuration of default parameters
baseline = Interpreter.objects.get(id=1)
- lastbase = Revision.objects.filter(
+ lastbaserev = Revision.objects.filter(
tag__isnull=False
).filter(
project='cpython'
).order_by('-number')[0]
- baselinetag = lastbase.tag
+ baselinetag = lastbaserev.tag
+ baselinerev = lastbaserev.number
+
defaultbaseline = True
if data.has_key("baseline"):
if data["baseline"] == "false":
defaultbaseline = False
defaulthost = 1
- defaultbenchmark = 1
+ defaultbenchmark = 2
if data.has_key("benchmark"):
try:
defaultbenchmark = int(data["benchmark"])
@@ -83,15 +89,27 @@
lastrevisions = [50, 200, 1000]
defaultlast = 200
- if data.has_key("lastrevisions"):
- if data["lastrevisions"] in lastrevisions:
- defaultlast = data["lastrevisions"]
+ if data.has_key("revisions"):
+ if int(data["revisions"]) in lastrevisions:
+ defaultlast = data["revisions"]
# Information for template
interpreters = Interpreter.objects.filter(name__startswith=settings.PROJECT_NAME)
benchmarks = Benchmark.objects.all()
hostlist = Environment.objects.all()
- return render_to_response('timeline.html', locals())
+ return render_to_response('timeline.html', {
+ 'defaultinterpreters': defaultinterpreters,
+ 'defaultbaseline': defaultbaseline,
+ 'baseline': baseline,
+ 'baselinetag': baselinetag,
+ 'defaultbenchmark': defaultbenchmark,
+ 'defaulthost': defaulthost,
+ 'lastrevisions': lastrevisions,
+ 'defaultlast': defaultlast,
+ 'interpreters': interpreters,
+ 'benchmarks': benchmarks,
+ 'hostlist': hostlist
+ })
def getoverviewtable(request):
interpreter = int(request.GET["interpreter"])
@@ -103,7 +121,6 @@
lastrevision = lastrevisions[0].number
changerevision = lastrevisions[1].number
pastrevisions = lastrevisions[trendconfig-2:trendconfig+1]
- print pastrevisions
result_list = Result.objects.filter(
revision__number=lastrevision
).filter(
@@ -157,7 +174,7 @@
if average:
average = average / averagecount
trend = (result - average)*100/average
- trend = "%.2f" % trend
+ #trend = "%.2f" % trend
else:
trend = "-"
@@ -174,6 +191,16 @@
'relative': relative
})
+ totals = {'result': 0, 'change': 0, 'trend': 0, 'relative': 0}
+ lengths = {'result': 0, 'change': 0, 'trend': 0, 'relative': 0}
+ for row in table_list:
+ for key in totals.keys():
+ if type(row[key]) == float:
+ totals[key] += row[key]
+ lengths[key] += 1
+ for tot in totals:
+ if lengths[tot]: totals[tot] = totals[tot]/lengths[tot]
+
return render_to_response('overview_table.html', locals())
def overview(request):
Modified: codespeed/pyspeed/media/css/main.css
==============================================================================
--- codespeed/pyspeed/media/css/main.css (original)
+++ codespeed/pyspeed/media/css/main.css Tue Mar 2 13:14:54 2010
@@ -1,13 +1,14 @@
body {
min-width: 960px;
- margin: 0; padding: 0; background-color: #596A74;
+ margin: 0; padding: 0;
+ background-color: #596A74;
background-image: url(/media/images/vgradient-s.png);
background-repeat: repeat-x;
}
a:link, a:visited { text-decoration: none; }
a:hover { text-decoration: underline; }
-div#containter { width: 98%; margin-bottom: 1%; margin-left: auto; margin-right: auto; }
+div#containter { width: 98%; margin-left: auto; margin-right: auto; }
div#title {
position: relative;
@@ -24,11 +25,16 @@
div#wrapper { margin: 0; }
div#nav ul {
- display: inline;
margin: 0; padding: 0; padding-left: 15.3em;
font-family: Verdana, sans-serif;
}
-div#nav li { display: inline-block; list-style: none; }
+div#nav li {
+ display: inline-block;
+ vertical-align: top;
+ list-style: none;
+ zoom: 1; /* IE7 (hasLayout)*/
+ *display: inline; /* IE */
+}
div#nav ul li a:link, div#nav ul li a:visited {
display: block;
@@ -157,8 +163,7 @@
text-align: center;
}
-table.tablesorter thead tr td{}
-table.tablesorter thead tr th, table.tablesorter tfoot tr th {
+table.tablesorter thead tr th {
background-color: #9DADC6;
border: 1px solid #CDCDCD;
font-size: 8pt;
@@ -170,6 +175,14 @@
background-position: center right;
cursor: pointer;
}
+table.tablesorter tfoot tr td {
+ border: 2px solid #CDCDCD;
+ border-right: 1px solid #CDCDCD;
+ padding: 4px;
+ vertical-align: top;
+ text-align: right;
+}
+table.tablesorter tfoot tr td.text { text-align: left; }
table.tablesorter tbody td {
color: #3D3D3D;
padding: 4px;
@@ -194,7 +207,7 @@
table.tablesorter tbody td.text {text-align: left;}
-table.tablesorter tbody td.bar {
+table.tablesorter tbody td.bar, table.tablesorter tfoot tr td.bar {
background-image: url(/media/images/gridline.png);
background-repeat: repeat;
background-position: left top;
@@ -203,13 +216,16 @@
border: none;
background-color:transparent;
}
+
+table.tablesorter tfoot tr td.bar { border: 2px solid #CDCDCD; border-left: 1px solid #CDCDCD;}/*Firefox table border-collapse bug*/
+
table.tablesorter tbody td.bar img {
vertical-align: middle;
margin: 5px 5px 5px 0;
border: none;
}
-table.tablesorter tbody span {
+table.tablesorter tbody span, table.tablesorter tfoot span {
display: block;
height: 1.45em;
margin-top: 0.2em;
@@ -218,8 +234,8 @@
overflow: hidden;
}
-table.tablesorter tbody tr td.status-red { background-color: #FF5640; }
-table.tablesorter tbody tr td.status-green { background-color: #9FD54D; }
+table.tablesorter tbody tr td.status-red, .status-red { background-color: #FF5640; }
+table.tablesorter tbody tr td.status-green, .status-green { background-color: #9FD54D; }
/* table.tablesorter tbody tr td.status-yellow { background-color: #FEE772; } */
table.tablesorter tbody tr.highlight td {
background-color: #9DADC6 !important;
Modified: codespeed/pyspeed/templates/overview.html
==============================================================================
--- codespeed/pyspeed/templates/overview.html (original)
+++ codespeed/pyspeed/templates/overview.html Tue Mar 2 13:14:54 2010
@@ -51,10 +51,20 @@
var comp = parseFloat($(this).children("td:eq(4)").text());
$(this).children("td:eq(4)").addClass(getColorcode(comp, 1+compthres, 1-compthres));
});
+ //process average row
+ $("#results > tfoot > tr").each(function() {
+ //Color change column
+ var change = $(this).children("td:eq(2)").text().slice(0, -1);
+ $(this).children("td:eq(2)").addClass(getColorcode(-change, changethres, -changethres));
+ //Color trend column
+ var trend = $(this).children("td:eq(3)").text().slice(0, -1);
+ $(this).children("td:eq(3)").addClass(getColorcode(-trend, trendthres, -trendthres));
+ });
}
function updateTable() {
colorTable();
+ //process table rows
$("#results > tbody > tr").each(function() {
//Size plot bars
var tdwidth = parseInt($("#results thead tr").find("th:eq(5)").css("width"));
@@ -65,8 +75,15 @@
permalinkToTimeline($(this).children("td:eq(0)").text());
});
});
+ //process average row
+ $("#results > tfoot > tr").each(function() {
+ //Size plot bar for Average
+ var tdwidth = parseInt($("#results thead tr").find("th:eq(5)").css("width"));
+ var bar = transToLogBars(58, tdwidth, parseFloat($(this).children("td:eq(4)").text()));
+ $(this).children("td:eq(5)").find("span").css("width", bar["width"]).css("margin-left", bar["margin"]);
+ });
//Configure table as tablesorter
- $.tablesorter.defaults.sortList = [[4,0]];//sort by default by the 5th column
+ $.tablesorter.defaults.sortList = [[4,1]];//sort by default by the 5th column
$.tablesorter.defaults.headers = { 5: { sorter: false } };//disable sorting for bar column
$("#results").tablesorter({widgets: ['zebra']});
$("#results tbody td").hover(function() {
@@ -104,13 +121,11 @@
{% endblock %}
{% block navigation %}
-
-
{% endblock %}
{% block body %}
Modified: codespeed/pyspeed/templates/overview_table.html
==============================================================================
--- codespeed/pyspeed/templates/overview_table.html (original)
+++ codespeed/pyspeed/templates/overview_table.html Tue Mar 2 13:14:54 2010
@@ -4,9 +4,12 @@
Benchmark Time (s) Current change Trend ({{ trendconfig }}) Times cpython slower
(log2 scale)
faster
+
+ Average {{ totals.change|floatformat:2 }}% {{ totals.trend|floatformat:2 }}% {{ totals.relative|floatformat:2 }} -
+
{% for row in table_list %}
- {{ row.benchmark }} {{ row.result|floatformat:3 }} {{ row.change|floatformat:2 }}% {{ row.trend }}{% ifnotequal row.trend "-" %}%{% endifnotequal %} {{ row.relative|floatformat:2 }} -
+ {{ row.benchmark }} {{ row.result|floatformat:3 }} {{ row.change|floatformat:2 }}% {% ifequal row.trend "-" %}-{% endifequal %}{% ifnotequal row.trend "-" %}{{ row.trend|floatformat:2 }}%{% endifnotequal %} {{ row.relative|floatformat:2 }} -
{% endfor %}
\ No newline at end of file
Modified: codespeed/pyspeed/templates/timeline.html
==============================================================================
--- codespeed/pyspeed/templates/timeline.html (original)
+++ codespeed/pyspeed/templates/timeline.html Tue Mar 2 13:14:54 2010
@@ -54,7 +54,7 @@
series.push({
"label": $("label[for*='baseline']").html(), "color": seriesColors[id-1],
showMarker: false,
- lineWidth: 1
+ lineWidth: 1.5
});
plotdata.push([[xmin, data["baseline"]], [xmax, data["baseline"]]]);
}
From tobami at codespeak.net Tue Mar 2 13:31:13 2010
From: tobami at codespeak.net (tobami at codespeak.net)
Date: Tue, 2 Mar 2010 13:31:13 +0100 (CET)
Subject: [pypy-svn] r71620 - codespeed/pyspeed/fixtures
Message-ID: <20100302123113.2054E51057@codespeak.net>
Author: tobami
Date: Tue Mar 2 13:31:12 2010
New Revision: 71620
Added:
codespeed/pyspeed/fixtures/backup-02-03-2010.json
Log:
make big fixtures data backup
Added: codespeed/pyspeed/fixtures/backup-02-03-2010.json
==============================================================================
--- (empty file)
+++ codespeed/pyspeed/fixtures/backup-02-03-2010.json Tue Mar 2 13:31:12 2010
@@ -0,0 +1 @@
+[{"pk": 22, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_message", "name": "Can add message", "content_type": 4}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_message", "name": "Can change message", "content_type": 4}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_message", "name": "Can delete message", "content_type": 4}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_benchmark", "name": "Can add benchmark", "content_type": 11}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_environment", "name": "Can add environment", "content_type": 12}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_interpreter", "name": "Can add interpreter", "content_type": 10}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_result", "name": "Can add result", "content_type": 13}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_revision", "name": "Can add revision", "content_type": 9}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_benchmark", "name": "Can change benchmark", "content_type": 11}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_environment", "name": "Can change environment", "content_type": 12}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_interpreter", "name": "Can change interpreter", "content_type": 10}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_result", "name": "Can change result", "content_type": 13}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_revision", "name": "Can change revision", "content_type": 9}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_benchmark", "name": "Can delete benchmark", "content_type": 11}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_environment", "name": "Can delete environment", "content_type": 12}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_interpreter", "name": "Can delete interpreter", "content_type": 10}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_result", "name": "Can delete result", "content_type": 13}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_revision", "name": "Can delete revision", "content_type": 9}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 5}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 7}}, {"pk": 1, "model": "auth.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": 1, "is_superuser": 1, "is_staff": 1, "last_login": "2010-02-26 04:29:14", "groups": [], "user_permissions": [], "password": "sha1$b0b95$4c4e8730bc9b85fe60473f982088bf0c4d4f86c0", "email": "a at a.es", "date_joined": "2010-01-26 06:05:17"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "benchmark", "name": "benchmark", "app_label": "codespeed"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "environment", "name": "environment", "app_label": "codespeed"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "interpreter", "name": "interpreter", "app_label": "codespeed"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "message", "name": "message", "app_label": "auth"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "result", "name": "result", "app_label": "codespeed"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "revision", "name": "revision", "app_label": "codespeed"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": "459091210dde06b3f6d9ec26151831de", "model": "sessions.session", "fields": {"expire_date": "2010-02-09 06:07:11", "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEEigEBdS5lMzBlMjdkMjI0MTk5MzIwODE3\nNTI4ZDMyZjRlODQzZQ==\n"}}, {"pk": "5bbb7e90abcc234173df52612a9275bd", "model": "sessions.session", "fields": {"expire_date": "2010-03-05 07:17:37", "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEEigEBdS5lMzBlMjdkMjI0MTk5MzIwODE3\nNTI4ZDMyZjRlODQzZQ==\n"}}, {"pk": "98500323e6ce3d116bcbe7dc6f463d78", "model": "sessions.session", "fields": {"expire_date": "2010-03-12 04:29:48", "session_data": "gAJ9cQEuYjkzZDg3YWNjNTY3MDJmNjdhMTM3YWQ2ZjY3ZGI0NmI=\n"}}, {"pk": "b5882da2ec0524a0bb0838cc319c7a79", "model": "sessions.session", "fields": {"expire_date": "2010-03-15 18:37:29", "session_data": "gAJ9cQFVCnRlc3Rjb29raWVxAlUGd29ya2VkcQNzLmVjM2Q5MWY1ZDg3MjA2NTc3ZjliNTRiZjRl\nOGRjZmI4\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 15, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:27:06", "object_repr": "rietveld", "object_id": "5", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 14, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:26:20", "object_repr": "spambayes", "object_id": "7", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 13, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:25:57", "object_repr": "spitfire", "object_id": "16", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 12, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:24:03", "object_repr": "slowspitfire", "object_id": "6", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 11, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:23:45", "object_repr": "slowspitfire", "object_id": "6", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 10, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:22:58", "object_repr": "spitfire", "object_id": "16", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 9, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:21:19", "object_repr": "html5lib", "object_id": "3", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 8, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:20:53", "object_repr": "float", "object_id": "8", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 7, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-26 04:20:33", "object_repr": "django", "object_id": "2", "change_message": "Changed description.", "user": 1, "content_type": 11}}, {"pk": 6, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-23 15:14:43", "object_repr": "bigdog", "object_id": "1", "change_message": "Changed cpu, memory and os.", "user": 1, "content_type": 12}}, {"pk": 5, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-19 08:09:39", "object_repr": "bigdog", "object_id": "1", "change_message": "Changed name.", "user": 1, "content_type": 12}}, {"pk": 4, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-02-08 05:07:36", "object_repr": "pypy-c-jit gc=hybrid", "object_id": "2", "change_message": "Changed coptions.", "user": 1, "content_type": 10}}, {"pk": 3, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-01-27 05:42:38", "object_repr": "262", "object_id": "3", "change_message": "Changed tag.", "user": 1, "content_type": 9}}, {"pk": 2, "model": "admin.logentry", "fields": {"action_flag": 3, "action_time": "2010-01-27 05:42:21", "object_repr": "2620", "object_id": "1", "change_message": "", "user": 1, "content_type": 9}}, {"pk": 1, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-01-26 06:07:22", "object_repr": "Dual Core Linux", "object_id": "1", "change_message": "", "user": 1, "content_type": 12}}, {"pk": 2, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70632}}, {"pk": 3, "model": "codespeed.revision", "fields": {"project": "cpython", "date": null, "message": "", "tag": "2.6.2", "number": 262}}, {"pk": 4, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70634}}, {"pk": 5, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70641}}, {"pk": 6, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70643}}, {"pk": 7, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70671}}, {"pk": 8, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70678}}, {"pk": 9, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70688}}, {"pk": 10, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70694}}, {"pk": 11, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70721}}, {"pk": 12, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70740}}, {"pk": 13, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70764}}, {"pk": 14, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70789}}, {"pk": 15, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70794}}, {"pk": 16, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70813}}, {"pk": 17, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70831}}, {"pk": 18, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70857}}, {"pk": 19, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70901}}, {"pk": 20, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70929}}, {"pk": 21, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70933}}, {"pk": 22, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70961}}, {"pk": 23, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70971}}, {"pk": 24, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 70993}}, {"pk": 25, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71013}}, {"pk": 26, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71019}}, {"pk": 27, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71074}}, {"pk": 28, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71086}}, {"pk": 29, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71091}}, {"pk": 30, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71101}}, {"pk": 31, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71119}}, {"pk": 32, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71129}}, {"pk": 33, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71131}}, {"pk": 34, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71134}}, {"pk": 35, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71140}}, {"pk": 36, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71145}}, {"pk": 37, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71154}}, {"pk": 38, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71212}}, {"pk": 39, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71187}}, {"pk": 40, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71188}}, {"pk": 41, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71202}}, {"pk": 42, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71220}}, {"pk": 43, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71234}}, {"pk": 44, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71250}}, {"pk": 45, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71262}}, {"pk": 46, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71284}}, {"pk": 47, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71314}}, {"pk": 48, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71343}}, {"pk": 49, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71385}}, {"pk": 50, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71388}}, {"pk": 51, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71392}}, {"pk": 52, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71428}}, {"pk": 53, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71432}}, {"pk": 54, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71443}}, {"pk": 55, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71452}}, {"pk": 56, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71473}}, {"pk": 57, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71480}}, {"pk": 58, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71509}}, {"pk": 59, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71525}}, {"pk": 60, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71526}}, {"pk": 61, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 0}}, {"pk": 62, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71544}}, {"pk": 63, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71557}}, {"pk": 64, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71562}}, {"pk": 65, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71576}}, {"pk": 66, "model": "codespeed.revision", "fields": {"project": "pypy", "date": null, "message": "", "tag": "", "number": 71603}}, {"pk": 1, "model": "codespeed.interpreter", "fields": {"coptions": "default", "name": "cpython"}}, {"pk": 3, "model": "codespeed.interpreter", "fields": {"coptions": "gc=hybrid", "name": "pypy-c"}}, {"pk": 2, "model": "codespeed.interpreter", "fields": {"coptions": "gc=hybrid", "name": "pypy-c-jit"}}, {"pk": 1, "model": "codespeed.benchmark", "fields": {"name": "ai", "benchmark_type": "T", "description": ""}}, {"pk": 2, "model": "codespeed.benchmark", "fields": {"name": "django", "benchmark_type": "T", "description": "Uses the Django template system to build a 150x150-cell HTML table"}}, {"pk": 3, "model": "codespeed.benchmark", "fields": {"name": "html5lib", "benchmark_type": "T", "description": "Parses the HTML 5 spec using html5lib"}}, {"pk": 4, "model": "codespeed.benchmark", "fields": {"name": "richards", "benchmark_type": "T", "description": ""}}, {"pk": 5, "model": "codespeed.benchmark", "fields": {"name": "rietveld", "benchmark_type": "T", "description": "Macrobenchmark for Django using the Rietveld code review app"}}, {"pk": 6, "model": "codespeed.benchmark", "fields": {"name": "slowspitfire", "benchmark_type": "T", "description": "Uses the Spitfire template system to build a 1000x1000-cell HTML table"}}, {"pk": 7, "model": "codespeed.benchmark", "fields": {"name": "spambayes", "benchmark_type": "T", "description": "Runs a canned mailbox through a SpamBayes ham/spam classifier"}}, {"pk": 8, "model": "codespeed.benchmark", "fields": {"name": "float", "benchmark_type": "T", "description": "Artificial, floating point-heavy benchmark originally used by Factor"}}, {"pk": 9, "model": "codespeed.benchmark", "fields": {"name": "chaos", "benchmark_type": "T", "description": ""}}, {"pk": 10, "model": "codespeed.benchmark", "fields": {"name": "fannkuch", "benchmark_type": "T", "description": ""}}, {"pk": 11, "model": "codespeed.benchmark", "fields": {"name": "meteor-contest", "benchmark_type": "T", "description": ""}}, {"pk": 12, "model": "codespeed.benchmark", "fields": {"name": "nbody_modified", "benchmark_type": "T", "description": ""}}, {"pk": 13, "model": "codespeed.benchmark", "fields": {"name": "spectral-norm", "benchmark_type": "T", "description": ""}}, {"pk": 14, "model": "codespeed.benchmark", "fields": {"name": "telco", "benchmark_type": "T", "description": ""}}, {"pk": 15, "model": "codespeed.benchmark", "fields": {"name": "gcbench", "benchmark_type": "T", "description": ""}}, {"pk": 16, "model": "codespeed.benchmark", "fields": {"name": "spitfire", "benchmark_type": "T", "description": "Uses the Spitfire template system to build a 1000x1000-cell HTML table, taking advantage of Psyco for acceleration"}}, {"pk": 17, "model": "codespeed.benchmark", "fields": {"name": "spitfire_cstringio", "benchmark_type": "T", "description": ""}}, {"pk": 18, "model": "codespeed.benchmark", "fields": {"name": "twisted_iteration", "benchmark_type": "T", "description": ""}}, {"pk": 19, "model": "codespeed.benchmark", "fields": {"name": "twisted_web", "benchmark_type": "T", "description": ""}}, {"pk": 20, "model": "codespeed.benchmark", "fields": {"name": "twisted_names", "benchmark_type": "T", "description": ""}}, {"pk": 1, "model": "codespeed.environment", "fields": {"memory": "1Gb", "os": "Ubuntu Jaunty", "name": "bigdog", "cpu": "QEMU VM CPU"}}, {"pk": 1, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43707809448200002, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 2, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.65519900322000002, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 3, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.343158960299998, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 4, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029869985580400001, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 5, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.36875300408, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 6, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9608736038200001, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 7, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2217754364, "environment": 1, "date": "2010-01-27 09:41:22", "interpreter": 2, "result_type": "T", "revision": 2}}, {"pk": 8, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42444438934299999, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 9, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.82142634391799996, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 10, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 11.6034450531, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 11, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.29558792114299998, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 12, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 0.48473563194300001, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 13, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 0.66251654624900003, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 14, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 0.26918497085600002, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 15, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42492904663100001, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 16, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.62576680183400002, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 17, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.203540086699999, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 18, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029346752166800001, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 19, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3492350578300001, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 20, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9761237621300001, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 21, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.3172614097599999, "environment": 1, "date": "2010-01-27 09:41:23", "interpreter": 2, "result_type": "T", "revision": 4}}, {"pk": 22, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.442705011368, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 23, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.69898595809899999, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 24, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 19.623087883, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 25, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.031779193878200003, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 26, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.35385112762, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 27, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.0196122646300001, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 28, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2326191902200001, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 5}}, {"pk": 29, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.427397823334, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 30, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.64163026809699997, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 31, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.129413127900001, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 32, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.031384038925200003, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 33, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.38800883293, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 34, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.97738900185, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 35, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2374196052499999, "environment": 1, "date": "2010-01-27 09:41:24", "interpreter": 2, "result_type": "T", "revision": 6}}, {"pk": 36, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44572839736999997, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 37, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.619217777252, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 38, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.536835908899999, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 39, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.031195306778, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 40, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.37284536361, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 41, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9654173851000001, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 42, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.21845993996, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 7}}, {"pk": 43, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43448724746700002, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 44, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.65551400184599995, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 45, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.218690061569, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 46, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.542385101299999, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 47, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030475807189899999, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 48, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.34365615845, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 49, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.00317382812, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 50, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2182968139699999, "environment": 1, "date": "2010-01-27 09:41:25", "interpreter": 2, "result_type": "T", "revision": 8}}, {"pk": 51, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.422487783432, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 52, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.121007490158, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 53, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.64096617698699998, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 54, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.37990322113000002, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 55, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.135547828674, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 56, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.0433809757, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 57, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.37866396903999999, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 58, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.076025152206400007, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 59, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029587221145600001, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 60, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.33778300285, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 61, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.95510158539, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 62, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.21777257919, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 63, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.062807464599600002, "environment": 1, "date": "2010-01-27 09:41:26", "interpreter": 2, "result_type": "T", "revision": 9}}, {"pk": 64, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42574295997599998, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 65, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.116217041016, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 66, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.67578072547900003, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 67, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.391155767441, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 68, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.12938299179099999, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 69, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.0490338802, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 70, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38244643211399998, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 71, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.075785207748500005, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 72, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030660200118999999, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 73, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.33663039207, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 74, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9485769748699999, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 75, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.22385950089, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 76, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.063131237029999995, "environment": 1, "date": "2010-01-27 09:41:27", "interpreter": 2, "result_type": "T", "revision": 10}}, {"pk": 77, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43206744194000002, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 78, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.120690727234, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 79, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.62421946525600003, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 80, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.373276233673, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 81, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.15013499259999999, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 82, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.6344439983, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 83, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38476510047899998, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 84, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.077058410644600006, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 85, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030047035217300001, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 86, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3758056163800001, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 87, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.0055235862699998, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 88, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2375351429000001, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 89, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.063822555542000003, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 90, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.65200000000000002, "environment": 1, "date": "2010-01-27 09:41:28", "interpreter": 2, "result_type": "T", "revision": 11}}, {"pk": 91, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43032097816499998, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 92, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11874918937700001, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 93, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.65952877998299997, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 94, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38479938507099998, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 95, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.148169994354, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 96, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.341817855799999, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 97, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38457193374600002, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 98, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079361963272, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 99, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030018854141200001, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 100, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3934579849299999, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 101, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9659803867300001, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 102, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.24824433327, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 103, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.0622970581055, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 104, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.624, "environment": 1, "date": "2010-01-27 09:41:29", "interpreter": 2, "result_type": "T", "revision": 12}}, {"pk": 105, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42947344780000002, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 106, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.118019390106, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 107, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.64448981285100004, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 108, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39367756843500001, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 109, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.131764364243, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 110, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 7.6069629192399999, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 111, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.664299011200001, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 112, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38062396049500002, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 113, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079070186614999996, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 114, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029060602188099999, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 115, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.36374936104, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 116, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9975749492599999, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 117, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2262028217300001, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 118, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067093992233299996, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 119, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.63600000000000001, "environment": 1, "date": "2010-01-27 09:41:30", "interpreter": 2, "result_type": "T", "revision": 13}}, {"pk": 120, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43611154556300002, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 121, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.122742033005, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 122, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.67777743339499996, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 123, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38444399833699999, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 124, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.146523761749, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 125, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 7.8365619182600001, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 126, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 19.585288047799999, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 127, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39473080635000002, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 128, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.074167156219499999, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 129, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0297776699066, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 130, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.45638175011, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 131, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9965989589699999, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 132, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.26717119217, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 133, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.065821361541800003, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 134, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.63400000000000001, "environment": 1, "date": "2010-01-27 09:41:31", "interpreter": 2, "result_type": "T", "revision": 14}}, {"pk": 135, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.426050901413, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 136, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.122226619721, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 137, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.67538876533500003, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 138, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38024778366099998, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 139, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.142001438141, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 140, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 7.6646499633799996, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 141, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 19.0767159462, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 142, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38860616683999999, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 143, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.074223804473800004, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 144, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030911397933999999, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 145, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.4178003788, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 146, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.95840940476, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 147, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2289570808400001, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 148, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068292617797899996, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 149, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.64400000000000002, "environment": 1, "date": "2010-01-27 09:41:32", "interpreter": 2, "result_type": "T", "revision": 15}}, {"pk": 150, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43184123039299999, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 151, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.128963375091, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 152, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.67031297683699997, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 153, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.37783699035599999, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 154, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14520840644800001, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 155, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 7.7148549556699999, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 156, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 19.313369989400002, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 157, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.40089354515100001, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 158, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.076049709320000006, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 159, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030450057983399999, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 160, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.41337842941, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 161, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.0009929657000001, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 162, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2717852592500001, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 163, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067063713073700001, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 164, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.68799999999999994, "environment": 1, "date": "2010-01-27 09:41:33", "interpreter": 2, "result_type": "T", "revision": 16}}, {"pk": 165, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.428143215179, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 166, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.117868947983, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 167, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.585657787323, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 168, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38937940597499998, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 169, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.130286979675, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 170, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.4381451606800004, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 171, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 19.300865888600001, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 172, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39005379676800001, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 173, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.073681354522599996, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 174, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.027494049072299999, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 175, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.39566936493, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 176, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9981239795700001, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 177, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.21310677528, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 178, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.0675278663635, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 179, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.53000000000000003, "environment": 1, "date": "2010-01-27 09:41:34", "interpreter": 2, "result_type": "T", "revision": 17}}, {"pk": 180, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42251968383799998, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 181, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11669778823800001, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 182, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.629346036911, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 183, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39522018432599998, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 184, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14308924675000001, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 185, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0056009292599999, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 186, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.969789028200001, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 187, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38797254562400002, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 188, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.072004508972299999, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 189, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.027719545364400001, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 190, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.4016525745399999, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 191, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.0152218341800001, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 192, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2458042144799999, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 193, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066313076019300005, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 194, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.52000000000000002, "environment": 1, "date": "2010-01-27 09:41:35", "interpreter": 2, "result_type": "T", "revision": 18}}, {"pk": 195, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44146103859000002, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 196, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.116399478912, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 197, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.56150536537200002, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 198, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.37951617240899999, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 199, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14459261894200001, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 200, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2366421222700001, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 201, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 18.872216939899999, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 202, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.386883449554, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 203, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.077071142196599995, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 204, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029833173751799998, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 205, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.35280065537, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 206, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9402369976, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 207, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1963545799299999, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 208, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066495370864899997, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 209, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.46600000000000003, "environment": 1, "date": "2010-01-27 09:59:21", "interpreter": 2, "result_type": "T", "revision": 19}}, {"pk": 210, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.42351732254000002, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 211, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.7979119777699999, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 212, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.51181406974800003, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 213, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 27.097495079000002, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 214, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.31325550079300002, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 215, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.53843350410400004, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 216, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.50088262557999996, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 217, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.05, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 218, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43200035095200001, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 219, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.117177915573, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 220, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.53456697464000003, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 221, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.37750501632700001, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 222, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.143707418442, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 223, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0006799697900002, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 224, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.459820032100001, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 225, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39029078483599999, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 226, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.072830963134800003, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 227, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029026174545300001, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 228, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.4049810409600001, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 229, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9356455802899999, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 230, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2247850418099999, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 231, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068435764312700001, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 232, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.47799999999999998, "environment": 1, "date": "2010-02-08 12:57:07", "interpreter": 2, "result_type": "T", "revision": 20}}, {"pk": 233, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42829480171200002, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 234, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.124062108994, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 235, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.56471238136299995, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 236, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38404459953300002, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 237, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.142818832398, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 238, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2628729343399998, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 239, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.444487094900001, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 240, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39220576286300002, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 241, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.073698616027800007, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 242, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.02878241539, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 243, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3572861671400001, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 244, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.99017038345, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 245, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2404726028399999, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 246, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067131233215400002, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 247, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.47999999999999998, "environment": 1, "date": "2010-02-08 12:57:08", "interpreter": 2, "result_type": "T", "revision": 21}}, {"pk": 248, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43037562370299998, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 249, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.121508789063, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 250, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50206098556500001, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 251, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.37895998954799998, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 252, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14183044433600001, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 253, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1084389686599998, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 254, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.209439992899998, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 255, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38838734626799998, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 256, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.074748563766500006, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 257, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028778171539299999, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 258, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.36066980362, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 259, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9895885467500001, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 260, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2577526569399999, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 261, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067212057113599996, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 262, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.47799999999999998, "environment": 1, "date": "2010-02-08 12:57:09", "interpreter": 2, "result_type": "T", "revision": 22}}, {"pk": 263, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45690660476700001, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 264, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.120519590378, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 265, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.54817218780499999, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 266, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39389805793799998, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 267, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.15938162803600001, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 268, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1659770011899999, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 269, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.709064960500001, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 270, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39093775749199999, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 271, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079464387893800004, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 272, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029051446914700001, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 273, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.33928961754, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 274, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8708491325400001, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 275, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2492036342599999, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 276, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068829250335700004, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 277, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.46999999999999997, "environment": 1, "date": "2010-02-08 12:57:10", "interpreter": 2, "result_type": "T", "revision": 23}}, {"pk": 278, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44754805564900002, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 279, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.12157001495399999, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 280, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.53904900550799995, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 281, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39877815246600001, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 282, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.141833972931, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 283, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1433038711499997, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 284, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.2865948677, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 285, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38513965606700001, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 286, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078276109695500001, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 287, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028567647934, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 288, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3498888492600001, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 289, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5695494651799999, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 290, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.2771122932500001, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 291, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.065087032318099994, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 292, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.47999999999999998, "environment": 1, "date": "2010-02-08 12:57:11", "interpreter": 2, "result_type": "T", "revision": 24}}, {"pk": 293, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43687658309900002, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 294, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11778059005700001, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 295, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.55812158584600002, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 296, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39432578086800002, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 297, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14308495521600001, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 298, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1556611061100002, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 299, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.827883958800001, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 300, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.37860097885100003, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 301, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.0791513442993, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 302, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028306150436400002, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 303, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3929077625299999, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 304, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.57587604523, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 305, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.22806482315, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 306, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066839694976799993, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 307, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.496, "environment": 1, "date": "2010-02-08 12:57:13", "interpreter": 2, "result_type": "T", "revision": 25}}, {"pk": 308, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45311346054099999, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 309, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.120071363449, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 310, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.52496376037600001, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 311, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38780541419999998, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 312, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.128447532654, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 313, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.9577949047100001, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 314, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 16.4755749702, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 315, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38462038040199997, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 316, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078198528289700003, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 317, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028803586959799999, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 318, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.35955696106, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 319, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5860638141600001, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 320, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.23515124321, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 321, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.070180845260600005, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 322, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.46400000000000002, "environment": 1, "date": "2010-02-08 12:57:14", "interpreter": 2, "result_type": "T", "revision": 26}}, {"pk": 323, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44099764823900001, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 324, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.116354751587, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 325, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.49744930267300003, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 326, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38121018409700003, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 327, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.143323135376, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 328, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.9482378959700002, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 329, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.7915890217, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 330, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38683800697300003, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 331, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079219770431399994, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 332, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0284921646118, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 333, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.34892821312, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 334, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5913082599599999, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 335, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.22848973274, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 336, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066678333282500002, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 337, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.432, "environment": 1, "date": "2010-02-08 12:57:15", "interpreter": 2, "result_type": "T", "revision": 27}}, {"pk": 338, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43412504196200002, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 339, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11484541893, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 340, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.51569437980699995, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 341, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38811478614799999, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 342, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14066257476800001, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 343, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1109030246699998, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 344, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.547342062, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 345, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.51018061637900003, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 346, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079201698303299997, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 347, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.027072429657000002, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 348, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3053493976599999, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 349, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5995460510199999, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 350, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.09114394188, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 351, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067341756820699997, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 352, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.41999999999999998, "environment": 1, "date": "2010-02-08 12:57:16", "interpreter": 2, "result_type": "T", "revision": 28}}, {"pk": 353, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43453879356399999, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 354, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11760058403, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 355, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50038580894499995, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 356, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38978376388500002, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 357, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.126835155487, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 358, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0113921165499997, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 359, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.472515106199999, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 360, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.37842659950300001, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 361, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.081173038482699994, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 362, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028962564468399999, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 363, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3032561779, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 364, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5998044490800001, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 365, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0052612304699999, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 366, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067598628997800003, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 367, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42799999999999999, "environment": 1, "date": "2010-02-08 12:57:17", "interpreter": 2, "result_type": "T", "revision": 29}}, {"pk": 368, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43935694694499999, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 369, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11619195938100001, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 370, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.53101701736499995, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 371, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38734254836999998, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 372, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.142231178284, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 373, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0254831314099997, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 374, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.6835122108, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 375, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38142361640900002, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 376, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078077650070199997, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 377, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0292743682861, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 378, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3089139461499999, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 379, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.60704088211, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 380, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0411904335, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 381, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067225265502900006, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 382, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.434, "environment": 1, "date": "2010-02-08 12:57:18", "interpreter": 2, "result_type": "T", "revision": 30}}, {"pk": 383, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44037966728200001, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 384, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11571192741399999, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 385, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.51071386337299995, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 386, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38245801925700001, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 387, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.125499439239, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 388, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.8924760818499999, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 389, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.6689431667, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 390, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.382358026505, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 391, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078869438171400005, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 392, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0268948078156, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 393, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.31747603416, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 394, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5961161613499999, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 395, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.02343401909, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 396, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.065925025939900003, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 397, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42599999999999999, "environment": 1, "date": "2010-02-08 12:57:19", "interpreter": 2, "result_type": "T", "revision": 31}}, {"pk": 398, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44511313438400002, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 399, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.123738050461, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 400, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.52820878028899998, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 401, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38264322280899998, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 402, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14330682754499999, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 403, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.9724481105800002, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 404, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.7132329941, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 405, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38648300170900002, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 406, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.080526351928700002, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 407, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028388643264799999, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 408, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3175216197999999, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 409, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6084318161, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 410, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0272073745700001, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 411, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066053199768099993, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 412, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.8099999999999996, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 413, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.5720000000000001, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 414, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42599999999999999, "environment": 1, "date": "2010-02-08 12:57:20", "interpreter": 2, "result_type": "T", "revision": 32}}, {"pk": 415, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.453927755356, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 416, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.121992349625, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 417, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.52232122421299998, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 418, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38407201766999999, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 419, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.141575145721, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 420, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.06002688408, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 421, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.3287079334, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 422, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.387917757034, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 423, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.083066082000799998, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 424, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.026917457580600001, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 425, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.31879124642, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 426, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.62367901802, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 427, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0268442153899999, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 428, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067343568801899997, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 429, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.6859999999999999, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 430, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.4279999999999999, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 431, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.438, "environment": 1, "date": "2010-02-08 12:57:22", "interpreter": 2, "result_type": "T", "revision": 33}}, {"pk": 432, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.483631706238, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 433, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11660304069499999, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 434, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.51569676399200004, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 435, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.382478189468, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 436, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.12743959426900001, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 437, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2178769111600003, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 438, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.719299078000001, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 439, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38842058181799999, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 440, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079445600509699996, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 441, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.027382421493600002, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 442, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3188374519399999, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 443, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5849890232099999, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 444, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.01821317673, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 445, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.065883016586299997, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 446, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1040000000000001, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 447, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3739999999999997, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 448, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.436, "environment": 1, "date": "2010-02-08 12:57:23", "interpreter": 2, "result_type": "T", "revision": 34}}, {"pk": 449, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45719275474499999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 450, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.120211029053, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 451, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50765895843499997, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 452, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.390260744095, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 453, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14059381485, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 454, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.9633219242099997, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 455, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.672068119, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 456, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38170418739299999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 457, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.081372261047299999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 458, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028692531585699999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 459, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3357413768799999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 460, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6702152728999999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 461, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0448349475900001, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 462, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068740367889399995, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 463, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.4039999999999999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 464, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.5380000000000003, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 465, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42999999999999999, "environment": 1, "date": "2010-02-08 12:57:24", "interpreter": 2, "result_type": "T", "revision": 35}}, {"pk": 466, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45246744155899998, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 467, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.115577602386, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 468, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.53764219284100001, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 469, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39720401763899998, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 470, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14264602661100001, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 471, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.9869220256800002, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 472, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.157873868899999, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 473, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38921575546300002, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 474, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.080121755599999997, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 475, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.03005900383, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 476, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.35679936409, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 477, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5685717582700001, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 478, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0374664306600001, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 479, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.070476913452099998, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 480, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.0640000000000001, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 481, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3639999999999999, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 482, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42599999999999999, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 483, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036658235272600002, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 484, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.62893081761000003, "environment": 1, "date": "2010-02-08 12:57:25", "interpreter": 2, "result_type": "T", "revision": 36}}, {"pk": 485, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.451867008209, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 486, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.122903156281, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 487, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.52295198440599999, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 488, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39611358642599998, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 489, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14402337074300001, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 490, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0354669094100002, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 491, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.4241089821, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 492, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38023424148500001, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 493, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.080273628234900002, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 494, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029130172729500001, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 495, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3123150825500001, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 496, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5844192027999999, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 497, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0873519897499999, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 498, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.065541601180999998, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 499, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1159999999999997, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 500, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3780000000000001, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 501, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.432, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 502, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036170852297399997, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 503, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.61728395061700003, "environment": 1, "date": "2010-02-22 13:50:11", "interpreter": 2, "result_type": "T", "revision": 37}}, {"pk": 504, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.016, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 505, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.6460000000000008, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 506, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.148112381751, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 507, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.119760479042, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 508, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43322672843900001, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 509, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11744904518099999, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 510, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.48571481704699998, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 511, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38401727676399999, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 512, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.15490598678600001, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 513, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.3500790595999996, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 514, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.6703209877, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 515, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38782238960299997, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 516, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078919744491499993, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 517, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029299402236899998, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 518, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3126312732700001, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 519, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6204295635199999, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 520, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.01780185699, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 521, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066225481033300004, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 522, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.2779999999999996, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 523, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.306, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 524, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42199999999999999, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 525, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.035354803126799998, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 526, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.625, "environment": 1, "date": "2010-02-23 07:11:03", "interpreter": 2, "result_type": "T", "revision": 38}}, {"pk": 527, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.430691766739, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 528, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11717157363900001, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 529, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.514612388611, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 530, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.393562173844, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 531, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14185461998000001, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 532, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2862169742600003, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 533, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.7301180363, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 534, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38952765464799999, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 535, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078011417388999998, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 536, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030347156524699999, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 537, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.29316658974, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 538, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.55049118996, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 539, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0247521877300001, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 540, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066597604751599995, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 541, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.0620000000000003, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 542, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3179999999999996, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 543, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.432, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 544, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036612159703699999, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 545, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.61349693251500004, "environment": 1, "date": "2010-02-22 13:50:12", "interpreter": 2, "result_type": "T", "revision": 39}}, {"pk": 546, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42884359359699997, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 547, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.114629793167, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 548, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.49477019309999998, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 549, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39401621818499999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 550, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.144149160385, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 551, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2031950950599999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 552, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.641324043299999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 553, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38706464767499998, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 554, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.077932405471799998, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 555, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028376531601, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 556, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.30154781342, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 557, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.60555825233, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 558, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.05130105019, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 559, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066271257400499994, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 560, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.4960000000000004, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 561, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3760000000000003, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 562, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.442, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 563, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036362723989799998, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 564, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.62111801242200004, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 40}}, {"pk": 565, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.42880434989900001, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 566, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.12032480239899999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 567, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50316696166999997, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 568, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.388308906555, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 569, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14445853233299999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 570, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.33303499222, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 571, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.8706271648, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 572, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39889183044400001, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 573, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079198551177900006, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 574, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0296399593353, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 575, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3223052024899999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 576, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.64126338959, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 577, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.04748206138, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 578, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066780710220299994, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 579, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.4100000000000001, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 580, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.2519999999999998, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 581, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42799999999999999, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 582, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036406794964199997, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 583, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.625, "environment": 1, "date": "2010-02-22 13:50:13", "interpreter": 2, "result_type": "T", "revision": 41}}, {"pk": 584, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.43862233161899999, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 585, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.123193025589, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 586, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.53653941154499996, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 587, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.381501626968, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 588, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14009056091300001, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 589, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1545431613900003, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 590, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.7329018116, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 591, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39437122344999997, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 592, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.078885030746599999, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 593, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0277119636536, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 594, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3141985893300001, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 595, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.58513402939, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 596, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0044934272799999, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 597, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.071096849441500007, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 598, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.048, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 599, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.7880000000000003, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 600, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.42999999999999999, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 601, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036226633821199998, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 602, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.62111801242200004, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 42}}, {"pk": 603, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44809217453, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 604, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.113735437393, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 605, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50106139182999998, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 606, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39928603172299998, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 607, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14171442985499999, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 608, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2781009674100003, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 609, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.5502259731, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 610, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39536585807800001, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 611, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079635190963800007, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 612, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0281164646149, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 613, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3367244243600001, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 614, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5766518592800001, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 615, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.04758167267, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 616, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.065478754043599999, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 617, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1120000000000001, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 618, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.2839999999999998, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 619, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.434, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 620, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.035202727225700003, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 621, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.62111801242200004, "environment": 1, "date": "2010-02-22 13:50:15", "interpreter": 2, "result_type": "T", "revision": 43}}, {"pk": 622, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44513745307899999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 623, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.121272754669, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 624, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.49722375869699997, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 625, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39374003410399999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 626, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14083724021899999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 627, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.3038730621300001, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 628, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.5741548538, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 629, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38799338340799999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 630, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.081650590896599998, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 631, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0283284187317, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 632, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.2966595649699999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 633, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5907944679199999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 634, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.02476892471, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 635, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066187715530399996, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 636, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1280000000000001, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 637, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.4059999999999997, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 638, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.44, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 639, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036464144806399999, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 640, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.61349693251500004, "environment": 1, "date": "2010-02-22 13:50:16", "interpreter": 2, "result_type": "T", "revision": 44}}, {"pk": 641, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.444679403305, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 642, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11603541374199999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 643, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.501110553741, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 644, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38651690483099999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 645, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.12641596794099999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 646, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 4.9901590347300004, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 647, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.0504281521, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 648, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38429880142200001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 649, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.079768466949399999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 650, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028708219528200001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 651, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3060919761700001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 652, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6433506011900001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 653, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0471677780199999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 654, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066263961792000003, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 655, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1260000000000003, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 656, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.8920000000000003, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 657, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.434, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 658, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036082716018199998, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 659, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.61728395061700003, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 45}}, {"pk": 660, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.47966413497900001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 661, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.12769103050200001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 662, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.49365983009300002, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 663, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39229197502099999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 664, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.12834277153000001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 665, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0687980651900002, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 666, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.0278940201, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 667, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38894824981699999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 668, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.089199447631800002, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 669, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.031850814819300001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 670, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.31683301926, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 671, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5949654579100001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 672, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0184495925899999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 673, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067186117172199994, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 674, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1040000000000001, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 675, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3719999999999999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 676, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.436, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 677, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.037156847226699999, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 678, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.62111801242200004, "environment": 1, "date": "2010-02-22 13:50:17", "interpreter": 2, "result_type": "T", "revision": 46}}, {"pk": 679, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45030741691600001, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 680, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.12841868400600001, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 681, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.49538087844799999, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 682, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38673725128199998, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 683, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14405679702800001, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 684, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.3096809387199997, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 685, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.751036882399999, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 686, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38835844993599999, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 687, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.084215450286900001, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 688, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0287984848023, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 689, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.3020512103999999, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 690, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.60323505402, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 691, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0276945591, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 692, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066935873031599993, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 693, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1020000000000003, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 694, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3499999999999996, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 695, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.436, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 696, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036920259623299999, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 697, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.62111801242200004, "environment": 1, "date": "2010-02-22 13:50:18", "interpreter": 2, "result_type": "T", "revision": 47}}, {"pk": 698, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.82477416992200003, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 699, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60206642150900003, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 700, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.36654295921, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 701, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.0027895450600002, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 702, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.62338137626699996, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 703, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.400223970399999, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 704, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.7271881104, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 705, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.56917352676400002, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 706, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.47060441970799999, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 707, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.39701581001300001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 708, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.1005847930899999, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 709, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.3264100074799998, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 710, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.12871608734, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 711, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.73006982803300002, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 712, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 13.608000000000001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 713, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 10.602, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 714, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 2.0499999999999998, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 33}}, {"pk": 715, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.84513964652999995, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 716, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60191202163699997, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 717, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.33260784149, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 718, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.91208238602, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 719, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.62002520561200003, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 720, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.039499998099998, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 721, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.0058350563, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 722, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54553537368799998, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 723, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46591038703900001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 724, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.393785429001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 725, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.06237754822, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 726, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8074742794000001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 727, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1310554981200001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 728, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.74119162559499996, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 729, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.69, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 730, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.8940000000000001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 731, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8640000000000001, "environment": 1, "date": "2010-02-19 16:08:20", "interpreter": 3, "result_type": "T", "revision": 34}}, {"pk": 732, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.82429704666100001, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 733, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.64444694519099999, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 734, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3891027927399999, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 735, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.88681240082, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 736, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.63113179206799996, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 737, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.6499958038, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 738, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.3453910351, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 739, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.56427459716799999, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 740, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45401077270500001, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 741, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.399842166901, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 742, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0861895561199999, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 743, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1729546070099999, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 744, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1470741272, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 745, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.81053409576400004, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 746, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.906000000000001, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 747, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 10.036, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 748, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9319999999999999, "environment": 1, "date": "2010-02-19 16:08:21", "interpreter": 3, "result_type": "T", "revision": 35}}, {"pk": 749, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81729073524499996, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 750, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60419778823799997, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 751, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3336909771000001, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 752, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.8685907363900001, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 753, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.62722463607800005, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 754, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.211711883500001, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 755, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.213441133500002, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 756, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.545457029343, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 757, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.44319858551000002, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 758, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.38666386604300002, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 759, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0961834430699999, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 760, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1912564754499999, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 761, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1196137428299999, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 762, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.73046774864200004, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 763, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.832000000000001, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 764, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.9100000000000001, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 765, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.966, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 766, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.33651225241100002, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 767, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22421524663699999, "environment": 1, "date": "2010-02-19 16:08:22", "interpreter": 3, "result_type": "T", "revision": 36}}, {"pk": 768, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.79749684333799997, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 769, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.61308960914599997, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 770, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.30101675987, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 771, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.90628948212, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 772, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.67123160362300005, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 773, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.249785184899999, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 774, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.109343051900002, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 775, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55449948310800001, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 776, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46671156883199999, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 777, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40526518821700003, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 778, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.08151521683, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 779, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8464411735499999, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 780, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.13508119583, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 781, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.798368501663, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 782, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.276, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 783, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.5600000000000005, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 784, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8240000000000001, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 785, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.31230090817099998, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 786, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22172949002199999, "environment": 1, "date": "2010-02-22 13:50:50", "interpreter": 3, "result_type": "T", "revision": 37}}, {"pk": 787, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.83035979271000004, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 788, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60074591636700003, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 789, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3346575736999999, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 790, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9715472698200001, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 791, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.64911155700699996, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 792, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.670989990199999, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 793, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.622494935999999, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 794, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.53635263443000003, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 795, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46351580619799998, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 796, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.39642324447600003, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 797, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0690033435799999, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 798, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1434367656700002, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 799, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.13720517158, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 800, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.82075018882799999, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 801, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.308, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 802, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.1999999999999993, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 803, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8300000000000001, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 804, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32250574060199999, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 805, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22026431718100001, "environment": 1, "date": "2010-02-22 13:50:51", "interpreter": 3, "result_type": "T", "revision": 39}}, {"pk": 806, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81249780654899995, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 807, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60438241958600003, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 808, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3172108173399999, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 809, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9098683834100001, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 810, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.615597724914, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 811, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.1788218021, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 812, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.9537820816, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 813, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.56479210853600004, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 814, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46403212547299999, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 815, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40978136062600001, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 816, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0841445922899999, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 817, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.2318727493299999, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 818, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.14017772674, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 819, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.79409842491100002, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 820, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.529999999999999, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 821, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.7360000000000007, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 822, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8979999999999999, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 823, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.327959175642, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 824, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22675736961500001, "environment": 1, "date": "2010-02-22 13:50:52", "interpreter": 3, "result_type": "T", "revision": 40}}, {"pk": 825, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.79013576507600003, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 826, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.59992961883499996, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 827, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.37495040894, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 828, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.0804708004000001, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 829, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.63301577568, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 830, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.648062944399999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 831, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.675555944399999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 832, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.56692299842799998, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 833, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45670142173799999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 834, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41493639945999999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 835, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.08938102722, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 836, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1204952716799998, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 837, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1762467861200001, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 838, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.85524315834099995, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 839, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.34, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 840, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0899999999999999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 841, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8720000000000001, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 842, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.33690792643299999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 843, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.228832951945, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 41}}, {"pk": 844, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.85355405807499996, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 845, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.62819538116499996, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 846, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3379057407399999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 847, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9366400241899999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 848, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.63744120597800003, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 849, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.020072936999998, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 850, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.6028900146, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 851, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54798460006700001, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 852, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.47037715911900002, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 853, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40876960754399999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 854, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0835155010199999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 855, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1811104297599999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 856, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1400179863, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 857, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.78229937553399997, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 858, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.51, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 859, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0820000000000007, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 860, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8759999999999999, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 861, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.30985365611799998, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 862, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22321428571400001, "environment": 1, "date": "2010-02-22 13:50:53", "interpreter": 3, "result_type": "T", "revision": 38}}, {"pk": 863, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.80612177848800004, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 864, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.63574557304400003, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 865, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3749926567099999, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 866, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9882120132400001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 867, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.64184756278999999, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 868, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.0659239292, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 869, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.008901834500001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 870, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55423078537000003, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 871, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45567989349400001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 872, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.43450298309300001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 873, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.11993894577, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 874, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1544956207300001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 875, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1387714386000001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 876, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.75036334991499998, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 877, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.282, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 878, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0079999999999991, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 879, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9139999999999999, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 880, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32344769365600001, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 881, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22935779816499999, "environment": 1, "date": "2010-02-22 13:50:54", "interpreter": 3, "result_type": "T", "revision": 42}}, {"pk": 882, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.80018930435199997, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 883, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.59213438033999999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 884, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3235432147999999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 885, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9277043819399999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 886, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.62833967208899999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 887, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.127498865100002, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 888, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.327387809800001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 889, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.56621112823499997, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 890, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45159125328100003, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 891, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.38968000411999998, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 892, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0736969471, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 893, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1472087860100002, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 894, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.13990058899, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 895, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.77609677314799996, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 896, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.045999999999999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 897, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.3460000000000001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 898, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8240000000000001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 899, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32112006679299998, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 900, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22271714921999999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 43}}, {"pk": 901, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.80318298339799998, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 902, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.61232824325599999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 903, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3392906189, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 904, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9800031661999999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 905, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.64127964973499996, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 906, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.156852006899999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 907, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.053118228900001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 908, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55627279281599995, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 909, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45560183525100001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 910, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41682891845699999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 911, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0842313289600001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 912, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.20537576675, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 913, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1362669944799999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 914, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.77727856636100001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 915, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.422000000000001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 916, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0340000000000007, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 917, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8919999999999999, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 918, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32001843306200001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 919, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22321428571400001, "environment": 1, "date": "2010-02-22 13:50:55", "interpreter": 3, "result_type": "T", "revision": 44}}, {"pk": 920, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.818012475967, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 921, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60698575973500002, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 922, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.2975725650800001, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 923, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9775249958100001, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 924, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.62256784439099999, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 925, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.1509029865, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 926, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.7618701458, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 927, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.58412351608299995, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 928, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.48972077369700001, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 929, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40206174850499998, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 930, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0852341651899999, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 931, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.17764463425, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 932, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1558308124500001, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 933, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.73517060279900004, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 934, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.656000000000001, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 935, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.2460000000000004, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 936, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8140000000000001, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 937, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.311458560439, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 938, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.225733634312, "environment": 1, "date": "2010-02-22 13:50:56", "interpreter": 3, "result_type": "T", "revision": 45}}, {"pk": 939, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.825184011459, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 940, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60307979583799998, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 941, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3379285812399999, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 942, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.97367358208, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 943, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.63664975166299997, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 944, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.364063978200001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 945, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.421370983100001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 946, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55586194992100002, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 947, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.47209377288799997, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 948, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41157622337400002, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 949, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.07824172973, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 950, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1591178417200001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 951, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1331048965399999, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 952, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.782281541824, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 953, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.128, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 954, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.9540000000000006, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 955, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8400000000000001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 956, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32229577728100001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 957, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22624434389100001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 46}}, {"pk": 958, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.83132643699599995, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 959, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.61693515777600005, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 960, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.38650422096, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 961, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.94930934906, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 962, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.62898721694899995, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 963, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.428918123199999, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 964, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.086130857499999, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 965, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54965958595300002, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 966, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.472414779663, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 967, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40663475990300002, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 968, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.1000701904300001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 969, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1739943981200001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 970, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1460503578200001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 971, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.79650421142600003, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 972, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.506, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 973, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.8940000000000001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 974, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9239999999999999, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 975, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32730760041000001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 976, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23255813953500001, "environment": 1, "date": "2010-02-22 13:50:57", "interpreter": 3, "result_type": "T", "revision": 47}}, {"pk": 977, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44249439239499999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 978, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.115298175812, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 979, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.47745585441600003, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 980, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38079981803899998, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 981, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14702963828999999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 982, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0517730712900004, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 983, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.591430902500001, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 984, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.386064386368, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 985, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085122537612900007, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 986, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.031057214736899999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 987, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0331740379300001, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 988, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.59146933556, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 989, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0149888515500001, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 990, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066960000991799995, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 991, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1219999999999999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 992, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.4880000000000004, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 993, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.44600000000000001, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 994, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.037968733507299998, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 995, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.19801980197999999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 48}}, {"pk": 996, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44992356300399999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 997, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11578998565699999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 998, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.52114281654399996, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 999, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38190956115699998, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1000, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14550876617399999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1001, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.4469690322900002, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1002, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.040622949599999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1003, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39632396698, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1004, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.087449455261099998, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1005, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0308654308319, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1006, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.02835979462, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1007, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6254161357900001, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1008, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0877672195400001, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1009, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068438577651999996, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1010, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.282, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1011, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.7880000000000003, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1012, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.45800000000000002, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1013, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.069796139435900004, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1014, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0113739763421, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1015, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23584905660399999, "environment": 1, "date": "2010-02-22 13:50:19", "interpreter": 2, "result_type": "T", "revision": 49}}, {"pk": 1016, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44951915740999998, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1017, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.119570827484, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1018, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50683159828199997, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1019, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38480520248400002, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1020, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.13045554161100001, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1021, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.0542590618099998, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1022, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.618311882, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1023, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38234896659899997, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1024, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085056781768799994, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1025, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028561258316, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1026, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 0.99944243431099999, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1027, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5851112842599999, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1028, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.04048018456, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1029, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068225431442300005, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1030, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1639999999999997, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1031, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3200000000000003, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1032, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.438, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1033, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.071269182991499994, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1034, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.010442773600700001, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1035, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23980815347699999, "environment": 1, "date": "2010-02-22 13:50:20", "interpreter": 2, "result_type": "T", "revision": 50}}, {"pk": 1036, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45416383743299998, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1037, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11950340271, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1038, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.50190320015000001, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1039, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38935637474099999, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1040, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.141454029083, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1041, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1508920192699996, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1042, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.764722108799999, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1043, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39560799598700003, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1044, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085687160491900005, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1045, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.032861232757600001, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1046, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0266308307700001, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1047, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6459937572500001, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1048, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.03217101097, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1049, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067571258544899995, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1050, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.218, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1051, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3300000000000001, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1052, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.44, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1053, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.073424619715500003, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1054, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0103723680116, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1055, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.21978021978000001, "environment": 1, "date": "2010-02-25 17:41:31", "interpreter": 2, "result_type": "T", "revision": 51}}, {"pk": 1056, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.82982683181799999, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1057, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60214085578900001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1058, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3062074184400001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1059, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9530392646800001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1060, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.68191056251500004, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1061, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.747576951999999, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1062, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.599431991599999, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1063, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55478401184100001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1064, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46533699035600001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1065, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40102734565699999, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1066, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0711554050400001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1067, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1195827484100001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1068, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.12413043976, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1069, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.80542078018200003, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1070, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.284000000000001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1071, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0139999999999993, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1072, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8600000000000001, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1073, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.320771905513, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1074, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22421524663699999, "environment": 1, "date": "2010-02-22 13:50:58", "interpreter": 3, "result_type": "T", "revision": 48}}, {"pk": 1075, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.82888002395600002, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1076, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.61254525184599995, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1077, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3402440071099999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1078, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.0057998180399998, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1079, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.64979376792900001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1080, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.7988710403, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1081, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.237363100100001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1082, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.576547431946, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1083, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46138100624099998, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1084, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.425237989426, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1085, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.11317052841, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1086, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.2928051948600001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1087, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1661899089800001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1088, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.74127879142800002, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1089, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.648, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1090, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.1419999999999995, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1091, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.972, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1092, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.34889765784999999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1093, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017879492222400001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1094, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.24154589371999999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 49}}, {"pk": 1095, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.80748338699300004, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1096, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.64595766067500004, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1097, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.34966516495, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1098, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9725692272199999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1099, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.67069840431200001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1100, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.412612915, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1101, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.542129039799999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1102, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55608296394400003, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1103, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46792197227499999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1104, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.43663582801799999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1105, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.12121682167, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1106, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1302556514700002, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1107, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1370074749000001, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1108, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.77292299270599996, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1109, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.385999999999999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1110, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.766, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1111, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8839999999999999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1112, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.34493463488699999, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1113, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0181653042688, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1114, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.25773195876299998, "environment": 1, "date": "2010-02-22 13:50:59", "interpreter": 3, "result_type": "T", "revision": 50}}, {"pk": 1115, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.839103937149, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1116, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.62290124893200005, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1117, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.352064991, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1118, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.96297559738, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1119, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.66007223129299997, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1120, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.4323091507, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1121, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.007483005499999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1122, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.57246360778799998, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1123, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45583200454700001, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1124, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40182261467000002, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1125, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0838566303299999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1126, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.2438461780600001, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1127, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1411762237500001, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1128, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.77591519355799998, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1129, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.869999999999999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1130, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.9039999999999999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1131, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9219999999999999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1132, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.34908156639900001, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1133, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.018047283883799999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1134, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23640661938499999, "environment": 1, "date": "2010-02-25 17:42:36", "interpreter": 3, "result_type": "T", "revision": 51}}, {"pk": 1135, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0089007565643100008, "environment": 1, "date": "2010-02-22 22:50:46", "interpreter": 1, "result_type": "T", "revision": 3}}, {"pk": 1136, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.448057985306, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1137, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.11555995941199999, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1138, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.49367198944099999, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1139, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38178725242599998, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1140, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14414062499999999, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1141, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.26692891121, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1142, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.8284919262, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1143, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39418716430700002, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1144, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.084006786346499995, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1145, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0311054229736, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1146, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0089781761200001, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1147, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5698737621300001, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1148, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0389833450299999, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1149, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067387390136700004, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1150, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1619999999999999, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1151, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3520000000000003, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1152, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.436, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1153, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.038059802606600003, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1154, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0103519668737, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1155, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22172949002199999, "environment": 1, "date": "2010-02-25 17:41:37", "interpreter": 2, "result_type": "T", "revision": 52}}, {"pk": 1156, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44408721923799999, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1157, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.112195158005, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1158, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.51022124290500004, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1159, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.388197803497, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1160, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14437212944, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1161, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2189810275999999, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1162, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.086513996100001, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1163, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38531522750800001, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1164, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085148906707700006, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1165, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030429601669300001, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1166, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.03384494782, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1167, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.59535541534, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1168, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0123787879899999, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1169, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067564201355000006, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1170, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1399999999999997, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1171, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3860000000000001, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1172, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.44400000000000001, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1173, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.037619866299, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1174, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0102711585867, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1175, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22123893805299999, "environment": 1, "date": "2010-02-25 17:41:43", "interpreter": 2, "result_type": "T", "revision": 53}}, {"pk": 1176, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81052999496400002, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1177, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60681195259099996, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1178, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3620525836999999, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1179, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.0445516109500002, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1180, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.66781439781200003, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1181, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.898710966100001, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1182, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.466968059500001, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1183, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54495458602900004, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1184, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45498123168900001, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1185, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41278085708599999, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1186, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.11716094017, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1187, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1672815322900001, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1188, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1426439285300001, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1189, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.81872644424399998, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1190, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.182, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1191, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.4760000000000009, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1192, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.982, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1193, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32717160150500002, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1194, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.018073377914299998, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1195, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23584905660399999, "environment": 1, "date": "2010-02-25 17:42:41", "interpreter": 3, "result_type": "T", "revision": 52}}, {"pk": 1196, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81454219818100004, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1197, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.58032360076900003, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1198, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3387816429099999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1199, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.97203726769, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1200, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.63259410858200005, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1201, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 20.859583854699999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1202, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.379150867500002, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1203, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.57165603637700002, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1204, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45756387710599999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1205, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.39372558593700002, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1206, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0734197616600001, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1207, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.1528988361299999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1208, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1308839798000001, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1209, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.79903836250299998, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1210, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.738, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1211, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.4019999999999992, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1212, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8859999999999999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1213, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32575199848899999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1214, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017908309455599999, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1215, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.2331002331, "environment": 1, "date": "2010-02-25 17:42:47", "interpreter": 3, "result_type": "T", "revision": 53}}, {"pk": 1216, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45804414749099998, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1217, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.115968990326, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1218, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.48907217979399997, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1219, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38519783019999998, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1220, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14626255035399999, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1221, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.1265881061599998, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1222, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.7702999115, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1223, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39003753662099999, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1224, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.084774303436300005, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1225, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029919195175199999, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1226, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0257995605500001, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1227, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.62077980042, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1228, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0428582668299999, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1229, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.070467472076500004, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1230, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.242, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1231, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.298, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1232, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.442, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1233, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.037317470920399998, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1234, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0099304865938400003, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1235, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22727272727299999, "environment": 1, "date": "2010-02-25 17:41:49", "interpreter": 2, "result_type": "T", "revision": 54}}, {"pk": 1236, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.444884967804, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1237, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.108579969406, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1238, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.453775405884, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1239, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.384858369827, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1240, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.128339385986, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1241, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.3236289024400003, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1242, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.518028020899999, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1243, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38674168586699997, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1244, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085645389556900001, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1245, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0302715778351, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1246, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 0.96801753044000005, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1247, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.6657386302899999, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1248, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0189362049099999, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1249, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.066940832138099995, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1250, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.0620000000000003, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1251, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.2999999999999998, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1252, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.39400000000000002, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1253, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.034491500432, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1254, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0096964995636599997, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1255, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.21881838074400001, "environment": 1, "date": "2010-02-25 17:41:55", "interpreter": 2, "result_type": "T", "revision": 55}}, {"pk": 1256, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45656323432899998, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1257, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.100545215607, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1258, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.44828081131000003, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1259, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.384632444382, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1260, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.147346925735, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1261, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.21665978432, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1262, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.8010621071, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1263, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38664641380300002, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1264, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.084958982467600003, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1265, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029856157302900001, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1266, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 0.99990673065299995, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1267, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5721438884700001, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1268, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.02581982613, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1269, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.067750024795500005, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1270, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.016, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1271, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3460000000000001, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1272, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.376, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1273, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.035244700430599997, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1274, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0095428953144399992, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1275, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.21321961620499999, "environment": 1, "date": "2010-02-25 17:42:01", "interpreter": 2, "result_type": "T", "revision": 56}}, {"pk": 1276, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.46178841590899999, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1277, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.1129591465, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1278, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.43405041694699997, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1279, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38426795005800002, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1280, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.15274157524099999, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1281, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.7065730094899996, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1282, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.9334080219, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1283, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39407739639299999, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1284, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.088228225707899996, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1285, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.031113147735599998, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1286, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.01411137581, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1287, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.61271309852, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1288, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.07136049271, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1289, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.074827194213800005, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1290, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1319999999999997, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1291, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.4139999999999997, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1292, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.38200000000000001, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1293, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036029881742699998, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1294, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0095593155530099994, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1295, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22421524663699999, "environment": 1, "date": "2010-02-26 18:59:54", "interpreter": 2, "result_type": "T", "revision": 57}}, {"pk": 1296, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.85082454681399999, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1297, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.61203422546399999, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1298, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3484340667700001, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1299, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.98840494156, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1300, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.66602497100799996, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1301, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.658634900999999, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1302, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.885036945300001, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1303, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55738453865000004, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1304, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46480779647800002, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1305, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41746883392299999, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1306, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.08952593804, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1307, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 2.2202427864100001, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1308, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.13921570778, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1309, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.79952316284199998, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1310, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.948, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1311, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0920000000000005, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1312, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9199999999999999, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1313, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.313706790811, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1314, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017847581652699999, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1315, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.238663484487, "environment": 1, "date": "2010-02-25 17:42:53", "interpreter": 3, "result_type": "T", "revision": 54}}, {"pk": 1316, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.79085426330599995, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1317, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60729656219499994, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1318, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3056642055500001, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1319, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.0160846233399998, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1320, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.65244479179399995, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1321, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.919422149700001, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1322, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.3051650524, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1323, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54550724029499997, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1324, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.465325450897, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1325, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.39617018699599998, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1326, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0816519737200001, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1327, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8300115585300001, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1328, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1155103206600001, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1329, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.76063995361299996, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1330, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.464, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1331, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.8759999999999994, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1332, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9299999999999999, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1333, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.31936739706, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1334, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0176616036736, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1335, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23584905660399999, "environment": 1, "date": "2010-02-25 17:42:59", "interpreter": 3, "result_type": "T", "revision": 55}}, {"pk": 1336, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81474299430800001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1337, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60512480735800001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1338, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.2889076232900001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1339, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9643778324100001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1340, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.64361505508399997, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1341, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.331362962699998, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1342, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.8378589153, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1343, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55839338302599995, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1344, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45960297584499998, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1345, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40125541686999999, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1346, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0857021331800001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1347, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8316388130200001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1348, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1152890682200001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1349, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.77295160293599996, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1350, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.374000000000001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1351, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.7119999999999997, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1352, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8160000000000001, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1353, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.31291559101900002, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1354, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017847581652699999, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1355, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.234741784038, "environment": 1, "date": "2010-02-25 17:43:05", "interpreter": 3, "result_type": "T", "revision": 56}}, {"pk": 1356, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.822621583938, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1357, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.630578756332, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1358, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.29953403473, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1359, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9671210289000001, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1360, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.66527023315400002, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1361, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.566417932499998, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1362, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.973475933100001, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1363, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55666618347200003, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1364, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.482868957519, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1365, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.394734144211, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1366, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.11282200813, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1367, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.91158242226, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1368, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1191850185400001, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1369, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.80140380859399996, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1370, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 13.284000000000001, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1371, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.5299999999999994, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1372, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8180000000000001, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1373, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32664900584399997, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1374, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017503938386099999, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1375, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23584905660399999, "environment": 1, "date": "2010-02-25 17:43:11", "interpreter": 3, "result_type": "T", "revision": 57}}, {"pk": 1376, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44489483833299998, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1377, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.105377578735, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1378, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.457850837708, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1379, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.37966885566699998, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1380, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14510221481300001, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1381, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.4667971134200002, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1382, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.5440018177, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1383, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39170231819200002, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1384, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085892868041999998, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1385, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.029967641830399998, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1386, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0068406105000001, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1387, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.54476356506, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1388, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0442651271800001, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1389, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.069172906875600002, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1390, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.0720000000000001, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1391, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3339999999999996, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1392, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.38, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1393, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.035657234139699998, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1394, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0095066070919300003, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1395, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22371364653199999, "environment": 1, "date": "2010-02-27 21:43:46", "interpreter": 2, "result_type": "T", "revision": 58}}, {"pk": 1396, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81667156219500003, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1397, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.615085601807, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1398, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.32389659881, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1399, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.04861159325, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1400, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.65821557045000001, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1401, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.099758148199999, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1402, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.639731884, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1403, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54571781158400001, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1404, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.47730937004099999, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1405, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40550541877700003, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1406, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0857443332700001, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1407, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.81036801338, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1408, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1507472515099999, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1409, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.809006977081, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1410, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.1, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1411, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.6479999999999997, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1412, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9239999999999999, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1413, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.34295199358, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1414, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.018142235123400002, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1415, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23809523809499999, "environment": 1, "date": "2010-02-27 21:44:21", "interpreter": 3, "result_type": "T", "revision": 58}}, {"pk": 1416, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.46689500808700002, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1417, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.101242828369, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1418, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.461251974106, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1419, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.40458841323799999, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1420, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14812512397800001, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1421, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.4392459392500001, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1422, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.2095711231, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1423, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38774418830899998, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1424, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.084470415115299999, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1425, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0286624908447, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1426, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 0.96723861694400004, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1427, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.57787842751, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1428, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0276158332800001, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1429, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.069204616546599998, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1430, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1319999999999997, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1431, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3159999999999998, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1432, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.376, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1433, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.035623382475799999, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1434, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0095165588123299998, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1435, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.215982721382, "environment": 1, "date": "2010-02-27 21:43:53", "interpreter": 2, "result_type": "T", "revision": 59}}, {"pk": 1436, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44878969192500001, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1437, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.102875375748, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1438, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.44437599182100002, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1439, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38299818038900002, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1440, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.147850465775, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1441, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.3565158844000003, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1442, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.7846372128, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1443, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38794851303099998, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1444, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.088661241531399995, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1445, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.033090448379500002, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1446, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.03507781029, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1447, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.55236797333, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1448, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0271584034000001, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1449, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068535995483400003, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1450, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.2400000000000002, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1451, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.4299999999999997, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1452, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.38200000000000001, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1453, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.034904087059199999, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1454, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0095156532495999993, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1455, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22172949002199999, "environment": 1, "date": "2010-02-28 19:33:09", "interpreter": 2, "result_type": "T", "revision": 60}}, {"pk": 1456, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.83027701377899998, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1457, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.63213887214700004, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1458, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.42247524261, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1459, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9096373557999999, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1460, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.67448458671599998, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1461, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.167097091700001, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1462, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.9996509552, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1463, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.555860853195, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1464, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.466407012939, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1465, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41221237182600001, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1466, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.08523554802, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1467, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.85844759941, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1468, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.11829023361, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1469, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.80534501075800002, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1470, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.31, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1471, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.8480000000000008, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1472, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8879999999999999, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1473, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.31432900188000001, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1474, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017956545160699999, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1475, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.240384615385, "environment": 1, "date": "2010-02-27 21:44:27", "interpreter": 3, "result_type": "T", "revision": 59}}, {"pk": 1476, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.847062635422, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1477, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60602283477800001, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1478, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.2716722011599999, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1479, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9713500022899999, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1480, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.67579350471499999, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1481, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.250501871099999, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1482, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.9543099403, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1483, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55667443275399997, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1484, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45424156188999998, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1485, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.41209263801599999, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1486, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.05464816093, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1487, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8427532196, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1488, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1250155925800001, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1489, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.79359149932899997, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1490, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.778, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1491, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 10.24, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1492, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8200000000000001, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1493, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32223761802000001, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1494, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0176273576591, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1495, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.24154589371999999, "environment": 1, "date": "2010-02-28 19:33:38", "interpreter": 3, "result_type": "T", "revision": 60}}, {"pk": 1496, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45392632484399997, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1497, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.10515236854600001, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1498, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.46378026008599998, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1499, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39573121070900003, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1500, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.14984130859399999, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1501, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.4562458991999998, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1502, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.3465771675, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1503, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.393889474869, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1504, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085029458999600002, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1505, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.030173635482799999, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1506, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0155347824100001, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1507, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5645229816399999, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1508, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0234948158299999, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1509, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.069688177108699997, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1510, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.024, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1511, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3399999999999999, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1512, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.38200000000000001, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1513, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.0347887073073, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1514, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0095840521372399998, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1515, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22779043280200001, "environment": 1, "date": "2010-02-28 19:33:14", "interpreter": 2, "result_type": "T", "revision": 62}}, {"pk": 1516, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45768628120400001, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1517, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.102807283401, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1518, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.44194078445399998, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1519, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.39308223724399999, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1520, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.148639535904, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1521, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.47355914116, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1522, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.3875479698, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1523, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38404874801599997, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1524, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.085509252548199993, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1525, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0290965557098, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1526, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.01390161514, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1527, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5859676361099999, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1528, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0421810150099999, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1529, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.068690395355199996, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1530, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.2140000000000004, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1531, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.4720000000000004, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1532, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.378, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1533, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.034278177004299998, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1534, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0097228974234300006, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1535, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.22624434389100001, "environment": 1, "date": "2010-02-28 19:33:21", "interpreter": 2, "result_type": "T", "revision": 63}}, {"pk": 1536, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.84530577659600004, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1537, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.65466022491499998, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1538, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.32963061333, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1539, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 2.0214459896100001, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1540, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.65645537376399998, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1541, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.7919268608, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1542, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.792870044699999, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1543, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.57997598648100002, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1544, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.46688303947499998, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1545, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.42110581398000002, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1546, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.09828057289, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1547, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8856233596800001, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1548, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.15739431381, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1549, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.83371262550299996, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1550, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 13.012, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1551, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.9580000000000002, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1552, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8640000000000001, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1553, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32444778986200001, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1554, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017730496453899999, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1555, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.24330900243299999, "environment": 1, "date": "2010-02-28 19:33:44", "interpreter": 3, "result_type": "T", "revision": 62}}, {"pk": 1556, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.84411401748600001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1557, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.61131138801600005, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1558, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.2597750186900001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1559, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.9098272323600001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1560, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.64554233550999995, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1561, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 22.6058950424, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1562, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 30.589322090100001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1563, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.565101003647, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1564, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.47021636962899999, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1565, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40374174118, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1566, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0665364742300001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1567, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.9011094093300001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1568, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.14229836464, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1569, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.78607759475700001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1570, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 13.246, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1571, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.6679999999999993, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1572, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8759999999999999, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1573, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.31259964113599997, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1574, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017780938833600001, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1575, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23584905660399999, "environment": 1, "date": "2010-02-28 19:33:50", "interpreter": 3, "result_type": "T", "revision": 63}}, {"pk": 1576, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44622616767899997, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1577, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.107070589066, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1578, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.43866982460100001, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1579, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38838577270500002, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1580, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.15012764930700001, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1581, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.4506390094799997, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1582, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 13.067947864500001, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1583, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.40876240730300001, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1584, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.088262462616000001, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1585, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.028443384170500002, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1586, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.06712737083, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1587, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.59952788353, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1588, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0184711933099999, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1589, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.072306680679300003, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1590, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.1079999999999997, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1591, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.2679999999999998, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1592, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.38, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1593, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.0359476113891, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1594, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0089686098654700001, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1595, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.21929824561399999, "environment": 1, "date": "2010-02-28 14:27:59", "interpreter": 2, "result_type": "T", "revision": 64}}, {"pk": 1596, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.83433814048800004, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1597, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.64714412689199996, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1598, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.3383019924199999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1599, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.95747179985, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1600, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.671983814239, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1601, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 23.567461013799999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1602, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.516593933100001, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1603, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54677157402099996, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1604, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.48577184677099999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1605, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.40487165451099999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1606, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.1173414230400001, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1607, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8498204231299999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1608, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1754987716700001, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1609, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.80178961753800004, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1610, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 13.119999999999999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1611, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0440000000000005, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1612, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.8959999999999999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1613, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.32424790698, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1614, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017550017550000001, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1615, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.24449877750599999, "environment": 1, "date": "2010-02-28 14:33:40", "interpreter": 3, "result_type": "T", "revision": 64}}, {"pk": 1616, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.44191761016800002, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1617, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.10400633812, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1618, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.43336944580100001, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1619, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38262453079199998, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1620, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.147160387039, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1621, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.2604360580399998, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1622, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.004042863800001, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1623, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.39151244163499999, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1624, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.0865023612976, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1625, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.0307010650635, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1626, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0037835598, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1627, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.59009137154, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1628, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0323631286599999, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1629, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.0668954372406, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1630, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.2619999999999996, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1631, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.2919999999999998, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1632, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.378, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1633, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.036066891098900003, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1634, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0088245675961900003, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1635, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.206611570248, "environment": 1, "date": "2010-02-28 21:24:00", "interpreter": 2, "result_type": "T", "revision": 65}}, {"pk": 1636, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.81694869995099995, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1637, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.60080008506799998, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1638, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.29332318306, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1639, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.94990301132, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1640, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.627879810333, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1641, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 21.8504049778, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1642, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 31.166146040000001, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1643, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.54563751220699996, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1644, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45113015174799997, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1645, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.39523072242700003, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1646, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0735355853999999, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1647, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.85528740883, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1648, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.14838995934, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1649, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.74506740570100005, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1650, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.51, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1651, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 8.8819999999999997, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1652, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9419999999999999, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1653, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.31149348667100002, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1654, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017442874585699999, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1655, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.23752969121100001, "environment": 1, "date": "2010-02-28 21:29:44", "interpreter": 3, "result_type": "T", "revision": 65}}, {"pk": 1656, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.45410990714999999, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1657, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.10466055870099999, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1658, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 0.45182080268800001, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1659, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 0.38567900657699999, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1660, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.146999073028, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1661, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 5.3140039443999996, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1662, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 12.571560144399999, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1663, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.38504338264400001, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1664, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.0867322444917, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1665, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.032523155212399998, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1666, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.02836461067, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1667, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.5925312042199999, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1668, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.0333966732099999, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1669, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.069301605224599994, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1670, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 7.234, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1671, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 4.3860000000000001, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1672, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 0.372, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1673, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.035737259666900001, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1674, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.0089206066012500005, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1675, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.215517241379, "environment": 1, "date": "2010-03-01 21:24:03", "interpreter": 2, "result_type": "T", "revision": 66}}, {"pk": 1676, "model": "codespeed.result", "fields": {"benchmark": 1, "value": 0.82377424240099995, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1677, "model": "codespeed.result", "fields": {"benchmark": 9, "value": 0.632643413544, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1678, "model": "codespeed.result", "fields": {"benchmark": 2, "value": 1.34495921135, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1679, "model": "codespeed.result", "fields": {"benchmark": 10, "value": 1.95318017006, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1680, "model": "codespeed.result", "fields": {"benchmark": 8, "value": 0.68747582435599996, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1681, "model": "codespeed.result", "fields": {"benchmark": 15, "value": 24.735080957400001, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1682, "model": "codespeed.result", "fields": {"benchmark": 3, "value": 32.807960987100003, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1683, "model": "codespeed.result", "fields": {"benchmark": 11, "value": 0.55493221283000005, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1684, "model": "codespeed.result", "fields": {"benchmark": 12, "value": 0.45760521888799999, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1685, "model": "codespeed.result", "fields": {"benchmark": 4, "value": 0.42563171386699999, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1686, "model": "codespeed.result", "fields": {"benchmark": 5, "value": 1.0995021819999999, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1687, "model": "codespeed.result", "fields": {"benchmark": 6, "value": 1.8535705089600001, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1688, "model": "codespeed.result", "fields": {"benchmark": 7, "value": 1.1260583877599999, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1689, "model": "codespeed.result", "fields": {"benchmark": 13, "value": 0.78196883201599998, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1690, "model": "codespeed.result", "fields": {"benchmark": 16, "value": 12.554, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1691, "model": "codespeed.result", "fields": {"benchmark": 17, "value": 9.0600000000000005, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1692, "model": "codespeed.result", "fields": {"benchmark": 14, "value": 1.9379999999999999, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1693, "model": "codespeed.result", "fields": {"benchmark": 18, "value": 0.34095132237999998, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1694, "model": "codespeed.result", "fields": {"benchmark": 20, "value": 0.017470300489200001, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}, {"pk": 1695, "model": "codespeed.result", "fields": {"benchmark": 19, "value": 0.2331002331, "environment": 1, "date": "2010-03-01 21:29:48", "interpreter": 3, "result_type": "T", "revision": 66}}]
From arigo at codespeak.net Tue Mar 2 13:58:06 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 13:58:06 +0100 (CET)
Subject: [pypy-svn] r71627 -
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc
Message-ID: <20100302125806.13A7951057@codespeak.net>
Author: arigo
Date: Tue Mar 2 13:58:05 2010
New Revision: 71627
Modified:
pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py
Log:
Replace tabs with \t. I know it doesn't look as good,
but it's needed to make test_tab happy. Another solution
would be to turn these bits of text into their own files.
Modified: pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/trackgcroot.py Tue Mar 2 13:58:05 2010
@@ -1246,36 +1246,36 @@
long pypy_asm_stackwalk(void *callback)
{
__asm {
- mov edx, DWORD PTR [esp+4] ; my argument, which is the callback
- mov eax, esp ; my frame top address
- push eax ; ASM_FRAMEDATA[6]
- push ebp ; ASM_FRAMEDATA[5]
- push edi ; ASM_FRAMEDATA[4]
- push esi ; ASM_FRAMEDATA[3]
- push ebx ; ASM_FRAMEDATA[2]
+ mov\tedx, DWORD PTR [esp+4]\t; my argument, which is the callback
+ mov\teax, esp\t\t; my frame top address
+ push\teax\t\t\t; ASM_FRAMEDATA[6]
+ push\tebp\t\t\t; ASM_FRAMEDATA[5]
+ push\tedi\t\t\t; ASM_FRAMEDATA[4]
+ push\tesi\t\t\t; ASM_FRAMEDATA[3]
+ push\tebx\t\t\t; ASM_FRAMEDATA[2]
; Add this ASM_FRAMEDATA to the front of the circular linked
; list. Let's call it 'self'.
- mov eax, DWORD PTR [__gcrootanchor+4] ; next = gcrootanchor->next
- push eax ; self->next = next
- push OFFSET __gcrootanchor ; self->prev = gcrootanchor
- mov DWORD PTR [__gcrootanchor+4], esp ; gcrootanchor->next = self
- mov DWORD PTR [eax+0], esp ; next->prev = self
+ mov\teax, DWORD PTR [__gcrootanchor+4]\t\t; next = gcrootanchor->next
+ push\teax\t\t\t\t\t\t\t\t\t; self->next = next
+ push\tOFFSET __gcrootanchor ; self->prev = gcrootanchor
+ mov\tDWORD PTR [__gcrootanchor+4], esp\t\t; gcrootanchor->next = self
+ mov\tDWORD PTR [eax+0], esp\t\t\t\t\t; next->prev = self
- call edx ; invoke the callback
+ call\tedx\t\t\t\t\t\t; invoke the callback
; Detach this ASM_FRAMEDATA from the circular linked list
- pop esi ; prev = self->prev
- pop edi ; next = self->next
- mov DWORD PTR [esi+4], edi ; prev->next = next
- mov DWORD PTR [edi+0], esi ; next->prev = prev
-
- pop ebx ; restore from ASM_FRAMEDATA[2]
- pop esi ; restore from ASM_FRAMEDATA[3]
- pop edi ; restore from ASM_FRAMEDATA[4]
- pop ebp ; restore from ASM_FRAMEDATA[5]
- pop ecx ; ignored ASM_FRAMEDATA[6]
+ pop\tesi\t\t\t\t\t\t\t; prev = self->prev
+ pop\tedi\t\t\t\t\t\t\t; next = self->next
+ mov\tDWORD PTR [esi+4], edi\t\t; prev->next = next
+ mov\tDWORD PTR [edi+0], esi\t\t; next->prev = prev
+
+ pop\tebx\t\t\t\t; restore from ASM_FRAMEDATA[2]
+ pop\tesi\t\t\t\t; restore from ASM_FRAMEDATA[3]
+ pop\tedi\t\t\t\t; restore from ASM_FRAMEDATA[4]
+ pop\tebp\t\t\t\t; restore from ASM_FRAMEDATA[5]
+ pop\tecx\t\t\t\t; ignored ASM_FRAMEDATA[6]
; the return value is the one of the 'call' above,
; because %eax (and possibly %edx) are unmodified
ret
@@ -1293,37 +1293,37 @@
print >> output, """\
/* See description in asmgcroot.py */
- movl 4(%esp), %edx /* my argument, which is the callback */
- movl %esp, %eax /* my frame top address */
- pushl %eax /* ASM_FRAMEDATA[6] */
- pushl %ebp /* ASM_FRAMEDATA[5] */
- pushl %edi /* ASM_FRAMEDATA[4] */
- pushl %esi /* ASM_FRAMEDATA[3] */
- pushl %ebx /* ASM_FRAMEDATA[2] */
+ movl\t4(%esp), %edx\t/* my argument, which is the callback */
+ movl\t%esp, %eax\t/* my frame top address */
+ pushl\t%eax\t\t/* ASM_FRAMEDATA[6] */
+ pushl\t%ebp\t\t/* ASM_FRAMEDATA[5] */
+ pushl\t%edi\t\t/* ASM_FRAMEDATA[4] */
+ pushl\t%esi\t\t/* ASM_FRAMEDATA[3] */
+ pushl\t%ebx\t\t/* ASM_FRAMEDATA[2] */
/* Add this ASM_FRAMEDATA to the front of the circular linked */
/* list. Let's call it 'self'. */
- movl __gcrootanchor + 4, %eax /* next = gcrootanchor->next */
- pushl %eax /* self->next = next */
- pushl $__gcrootanchor /* self->prev = gcrootanchor */
- movl %esp, __gcrootanchor + 4 /* gcrootanchor->next = self */
- movl %esp, 0(%eax) /* next->prev = self */
+ movl\t__gcrootanchor + 4, %eax\t/* next = gcrootanchor->next */
+ pushl\t%eax\t\t\t\t/* self->next = next */
+ pushl\t$__gcrootanchor\t\t\t/* self->prev = gcrootanchor */
+ movl\t%esp, __gcrootanchor + 4\t/* gcrootanchor->next = self */
+ movl\t%esp, 0(%eax)\t\t\t/* next->prev = self */
/* note: the Mac OS X 16 bytes aligment must be respected. */
- call *%edx /* invoke the callback */
+ call\t*%edx\t\t/* invoke the callback */
/* Detach this ASM_FRAMEDATA from the circular linked list */
- popl %esi /* prev = self->prev */
- popl %edi /* next = self->next */
- movl %edi, 4(%esi) /* prev->next = next */
- movl %esi, 0(%edi) /* next->prev = prev */
-
- popl %ebx /* restore from ASM_FRAMEDATA[2] */
- popl %esi /* restore from ASM_FRAMEDATA[3] */
- popl %edi /* restore from ASM_FRAMEDATA[4] */
- popl %ebp /* restore from ASM_FRAMEDATA[5] */
- popl %ecx /* ignored ASM_FRAMEDATA[6] */
+ popl\t%esi\t\t/* prev = self->prev */
+ popl\t%edi\t\t/* next = self->next */
+ movl\t%edi, 4(%esi)\t/* prev->next = next */
+ movl\t%esi, 0(%edi)\t/* next->prev = prev */
+
+ popl\t%ebx\t\t/* restore from ASM_FRAMEDATA[2] */
+ popl\t%esi\t\t/* restore from ASM_FRAMEDATA[3] */
+ popl\t%edi\t\t/* restore from ASM_FRAMEDATA[4] */
+ popl\t%ebp\t\t/* restore from ASM_FRAMEDATA[5] */
+ popl\t%ecx\t\t/* ignored ASM_FRAMEDATA[6] */
/* the return value is the one of the 'call' above, */
/* because %eax (and possibly %edx) are unmodified */
@@ -1346,8 +1346,8 @@
.align 4
.globl __gcrootanchor
__gcrootanchor:
- .long __gcrootanchor /* prev */
- .long __gcrootanchor /* next */
+ .long\t__gcrootanchor /* prev */
+ .long\t__gcrootanchor /* next */
""".replace("__gcrootanchor", _globalname("__gcrootanchor"))
shapes = {}
From arigo at codespeak.net Tue Mar 2 14:05:03 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:05:03 +0100 (CET)
Subject: [pypy-svn] r71629 - in pypy/trunk/pypy: rpython/memory/gctransform
translator/c translator/c/gcc translator/c/gcc/test
translator/c/gcc/test/darwin translator/c/gcc/test/elf
translator/c/gcc/test/msvc translator/c/src
Message-ID: <20100302130503.75A3C282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:05:01 2010
New Revision: 71629
Added:
pypy/trunk/pypy/translator/c/gcc/test/darwin/track9.s
- copied unchanged from r71628, pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/darwin/track9.s
pypy/trunk/pypy/translator/c/gcc/test/elf/track9.s
- copied unchanged from r71628, pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/elf/track9.s
pypy/trunk/pypy/translator/c/gcc/test/msvc/track9.s
- copied unchanged from r71628, pypy/branch/asmgcc-cantcollect/pypy/translator/c/gcc/test/msvc/track9.s
Modified:
pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py
pypy/trunk/pypy/rpython/memory/gctransform/framework.py
pypy/trunk/pypy/translator/c/gcc/instruction.py
pypy/trunk/pypy/translator/c/gcc/test/elf/track5.s
pypy/trunk/pypy/translator/c/gcc/test/msvc/track0.s
pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py
pypy/trunk/pypy/translator/c/gcc/trackgcroot.py
pypy/trunk/pypy/translator/c/genc.py
pypy/trunk/pypy/translator/c/src/mem.h
Log:
Merge of branch/asmgcc-cantcollect:
Don't analyze in trackgcroot calls to functions that cannot collect.
Some of these are very small and the C compiler perform some optimizations
that we don't want to follow.
Modified: pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py
==============================================================================
--- pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py (original)
+++ pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py Tue Mar 2 14:05:01 2010
@@ -40,6 +40,9 @@
def build_root_walker(self):
return AsmStackRootWalker(self)
+ def mark_call_cannotcollect(self, hop, name):
+ hop.genop("direct_call", [c_asm_nocollect, name])
+
def gct_direct_call(self, hop):
fnptr = hop.spaceop.args[0].value
try:
@@ -487,6 +490,12 @@
_nowrapper=True)
c_asm_gcroot = Constant(pypy_asm_gcroot, lltype.typeOf(pypy_asm_gcroot))
+pypy_asm_nocollect = rffi.llexternal('pypy_asm_gc_nocollect',
+ [rffi.CCHARP], lltype.Void,
+ sandboxsafe=True,
+ _nowrapper=True)
+c_asm_nocollect = Constant(pypy_asm_nocollect, lltype.typeOf(pypy_asm_nocollect))
+
QSORT_CALLBACK_PTR = lltype.Ptr(lltype.FuncType([llmemory.Address,
llmemory.Address], rffi.INT))
qsort = rffi.llexternal('qsort',
Modified: pypy/trunk/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/trunk/pypy/rpython/memory/gctransform/framework.py (original)
+++ pypy/trunk/pypy/rpython/memory/gctransform/framework.py Tue Mar 2 14:05:01 2010
@@ -40,7 +40,12 @@
return True
return graphanalyze.GraphAnalyzer.analyze_direct_call(self, graph,
seen)
-
+ def analyze_external_call(self, op, seen=None):
+ funcobj = op.args[0].value._obj
+ if funcobj._name == 'pypy_asm_stackwalk':
+ return True
+ return graphanalyze.GraphAnalyzer.analyze_external_call(self, op,
+ seen)
def analyze_simple_operation(self, op):
if op.opname in ('malloc', 'malloc_varsize'):
flags = op.args[1].value
@@ -577,6 +582,11 @@
self.pop_roots(hop, livevars)
else:
self.default(hop)
+ if hop.spaceop.opname == "direct_call":
+ self.mark_call_cannotcollect(hop, hop.spaceop.args[0])
+
+ def mark_call_cannotcollect(self, hop, name):
+ pass
gct_indirect_call = gct_direct_call
Modified: pypy/trunk/pypy/translator/c/gcc/instruction.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/instruction.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/instruction.py Tue Mar 2 14:05:01 2010
@@ -164,8 +164,8 @@
return dict(zip(self.registers, self.registers))
class InsnCall(Insn):
- _args_ = ['lineno', 'gcroots']
- def __init__(self, lineno):
+ _args_ = ['lineno', 'name', 'gcroots']
+ def __init__(self, name, lineno):
# 'gcroots' is a dict built by side-effect during the call to
# FunctionGcRootTracker.trackgcroots(). Its meaning is as
# follows: the keys are the locations that contain gc roots
@@ -189,12 +189,13 @@
# %ebx from there in the prologue and epilogue).
self.gcroots = {}
self.lineno = lineno
+ self.name = name
def source_of(self, localvar, tag):
tag1 = self.gcroots.setdefault(localvar, tag)
assert tag1 == tag, (
- "conflicting entries for InsnCall.gcroots[%s]:\n%r and %r" % (
- localvar, tag1, tag))
+ "conflicting entries for\n%s.gcroots[%s]:\n%r and %r" % (
+ self, localvar, tag1, tag))
return localvar
def all_sources_of(self, localvar):
Modified: pypy/trunk/pypy/translator/c/gcc/test/elf/track5.s
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/elf/track5.s (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/elf/track5.s Tue Mar 2 14:05:01 2010
@@ -42,9 +42,9 @@
call pypy_g_SemiSpaceGC_get_size
;; expected {28(%esp) | 20(%esp), 24(%esp), %edi, %ebp | }
addl %eax, %ebx
+ jmp .L1221
.L1227:
call RPyAbort
- ;; expected {28(%esp) | 20(%esp), 24(%esp), %edi, %ebp | }
cmpl 12(%esi), %ebx
jb .L1229
addl $20, %esp
Modified: pypy/trunk/pypy/translator/c/gcc/test/msvc/track0.s
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/msvc/track0.s (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/msvc/track0.s Tue Mar 2 14:05:01 2010
@@ -64,7 +64,6 @@
jl SHORT $LN15 at pypy_g_ll_@139
$LN14 at pypy_g_ll_@139:
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
$LN15 at pypy_g_ll_@139:
; 1529 : l_v420 = l_v419;
@@ -76,7 +75,6 @@
test ebx, ebx
jne SHORT $LN16 at pypy_g_ll_@139
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
$LN16 at pypy_g_ll_@139:
; 1531 : OP_INT_ADD(l_v402, l_v421, l_v422);
@@ -183,7 +181,6 @@
jl SHORT $LN10 at pypy_g_ll_@139
$LN9 at pypy_g_ll_@139:
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
$LN10 at pypy_g_ll_@139:
; 1517 : l_v413 = l_v412;
@@ -195,7 +192,6 @@
test edi, edi
jne SHORT $LN11 at pypy_g_ll_@139
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
$LN11 at pypy_g_ll_@139:
mov edi, DWORD PTR [edi+8]
@@ -208,7 +204,6 @@
jl SHORT $LN13 at pypy_g_ll_@139
$LN12 at pypy_g_ll_@139:
call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
$LN13 at pypy_g_ll_@139:
; 1520 : pypy_g_copy_string_contents__rpy_stringPtr_rpy_stringPt(l_v415, l_result_2, 0L, l_res_index_0, l_v414);
Modified: pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py Tue Mar 2 14:05:01 2010
@@ -169,6 +169,9 @@
assert len(seen) == len(tabledict), (
"computed table contains unexpected entries:\n%r" %
[key for key in tabledict if key not in seen])
- print lines
- print expectedlines
+ print '--------------- got ---------------'
+ print ''.join(lines)
+ print '------------- expected ------------'
+ print ''.join(expectedlines)
+ print '-----------------------------------'
assert lines == expectedlines
Modified: pypy/trunk/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/trackgcroot.py Tue Mar 2 14:05:01 2010
@@ -43,7 +43,8 @@
self.findlabels()
self.parse_instructions()
try:
- if not self.list_call_insns():
+ self.find_noncollecting_calls()
+ if not self.list_collecting_call_insns():
return []
self.findframesize()
self.fixlocalvars()
@@ -62,7 +63,7 @@
See format_callshape() for more details about callshape_tuple.
"""
table = []
- for insn in self.list_call_insns():
+ for insn in self.list_collecting_call_insns():
if not hasattr(insn, 'framesize'):
continue # calls that never end up reaching a RET
if self.is_stack_bottom:
@@ -81,10 +82,11 @@
if isinstance(localvar, LocalVar):
loc = localvar.getlocation(insn.framesize,
self.uses_frame_pointer)
- else:
- assert localvar in self.REG2LOC, "%s: %s" % (self.funcname,
- localvar)
+ elif localvar in self.REG2LOC:
loc = self.REG2LOC[localvar]
+ else:
+ assert False, "%s: %s" % (self.funcname,
+ localvar)
assert isinstance(loc, int)
if tag is None:
gcroots.append(loc)
@@ -116,6 +118,20 @@
assert label not in self.labels, "duplicate label: %s" % label
self.labels[label] = Label(label, lineno)
+ def find_noncollecting_calls(self):
+ cannot_collect = self.CANNOT_COLLECT.copy()
+ for line in self.lines:
+ match = self.r_gcnocollect_marker.search(line)
+ if match:
+ name = match.group(1)
+ cannot_collect[name] = True
+ #
+ if self.format in ('darwin', 'mingw32', 'msvc'):
+ self.cannot_collect = dict.fromkeys(
+ ['_' + name for name in cannot_collect])
+ else:
+ self.cannot_collect = cannot_collect
+
def append_instruction(self, insn):
# Add the instruction to the list, and link it to the previous one.
previnsn = self.insns[-1]
@@ -179,8 +195,9 @@
raise UnrecognizedOperation(opname)
setattr(cls, 'visit_' + opname, cls.visit_nop)
- def list_call_insns(self):
- return [insn for insn in self.insns if isinstance(insn, InsnCall)]
+ def list_collecting_call_insns(self):
+ return [insn for insn in self.insns if isinstance(insn, InsnCall)
+ if insn.name not in self.cannot_collect]
def findframesize(self):
# the 'framesize' attached to an instruction is the number of bytes
@@ -292,7 +309,7 @@
# walk backwards, because inserting the global labels in self.lines
# is going to invalidate the lineno of all the InsnCall objects
# after the current one.
- for call in self.list_call_insns()[::-1]:
+ for call in self.list_collecting_call_insns()[::-1]:
if hasattr(call, 'framesize'):
self.create_global_label(call)
@@ -334,6 +351,12 @@
# ____________________________________________________________
+ CANNOT_COLLECT = { # some of the most used functions that cannot collect
+ 'pypy_debug_catch_fatal_exception': None,
+ 'RPyAbort': None,
+ 'RPyAssertFailed': None,
+ }
+
def _visit_gcroot_marker(self, line):
match = self.r_gcroot_marker.match(line)
loc = match.group(1)
@@ -641,7 +664,7 @@
if match is None:
assert self.r_unaryinsn_star.match(line) # indirect call
- return [InsnCall(self.currentlineno),
+ return [InsnCall('', self.currentlineno),
InsnSetLocal(self.EAX)] # the result is there
target = match.group(1)
@@ -691,7 +714,7 @@
assert lineoffset in (1,2)
return [InsnStackAdjust(-4)]
- insns = [InsnCall(self.currentlineno),
+ insns = [InsnCall(target, self.currentlineno),
InsnSetLocal(self.EAX)] # the result is there
if self.format in ('mingw32', 'msvc'):
# handle __stdcall calling convention:
@@ -737,6 +760,7 @@
r_jmptable_end = re.compile(r"\t.text|\t.section\s+.text|\t\.align|"+LABEL)
r_gcroot_marker = re.compile(r"\t/[*] GCROOT ("+LOCALVARFP+") [*]/")
+ r_gcnocollect_marker = re.compile(r"\t/[*] GC_NOCOLLECT ("+OPERAND+") [*]/")
r_bottom_marker = re.compile(r"\t/[*] GC_STACK_BOTTOM [*]/")
FUNCTIONS_NOT_RETURNING = {
@@ -813,6 +837,7 @@
r_gcroot_marker = re.compile(r"$1") # never matches
r_gcroot_marker_var = re.compile(r"DWORD PTR .+_constant_always_one_.+pypy_asm_gcroot")
+ r_gcnocollect_marker = re.compile(r"\spypy_asm_gc_nocollect\(("+OPERAND+")\);")
r_bottom_marker = re.compile(r"; .+\tpypy_asm_stack_bottom\(\);")
FUNCTIONS_NOT_RETURNING = {
@@ -864,10 +889,21 @@
'visit_' + name + 'l')
visit_int = FunctionGcRootTracker.visit_nop
- visit_npad = FunctionGcRootTracker.visit_nop
# probably not GC pointers
visit_cdq = FunctionGcRootTracker.visit_nop
+ def visit_npad(self, line):
+ # MASM has a nasty bug: it implements "npad 5" with "add eax, 0"
+ # which is a not no-op because it clears flags.
+ # I've seen this instruction appear between "test" and "jne"...
+ # see http://www.masm32.com/board/index.php?topic=13122
+ match = self.r_unaryinsn.match(line)
+ arg = match.group(1)
+ if arg == "5":
+ # replace with "npad 3; npad 2"
+ self.lines[self.currentlineno] = "\tnpad\t3\n" "\tnpad\t2\n"
+ return []
+
def extract_immediate(self, value):
try:
return int(value)
@@ -1183,229 +1219,209 @@
def dump(self, output):
assert self.seen_main
- shapes = {}
- shapelines = []
- shapeofs = 0
+
def _globalname(name, disp=""):
if self.format in ('darwin', 'mingw32', 'msvc'):
name = '_' + name
+ return name
- if self.format == 'msvc':
- if disp:
- return "DWORD PTR [%s+%s]" % (name, disp)
- else:
- return name
- else:
- if disp:
- return "%s + %s" % (name, disp)
- else:
- return name
-
- def _globl(name):
- if self.format == 'msvc':
- print >> output, "PUBLIC %s" % _globalname(name)
- else:
- print >> output, "\t.globl %s" % _globalname(name)
- def _label(name):
- print >> output, "%s:" % _globalname(name)
def _variant(**kwargs):
txt = kwargs[self.format]
print >> output, "\t%s" % txt
- def _comment(comment):
- if self.format == 'msvc':
- print >> output, "; %s" % comment
- else:
- print >> output, "/* %s */" % comment
-
- def _movl(source, target, comment):
- if self.format == 'msvc':
- print >> output, "\tmov\t%s, %s\t\t; %s" % (target, source, comment)
- else:
- print >> output, "\tmovl\t%s, %s\t\t/* %s */ " % (source, target, comment)
-
- def _pushl(source, comment):
- if self.format == 'msvc':
- print >> output, "\tpush\t%s\t\t; %s" % (source, comment)
- else:
- print >> output, "\tpushl\t%s\t\t/* %s */ " % (source, comment)
-
- def _popl(source, comment):
- if self.format == 'msvc':
- print >> output, "\tpop\t%s\t\t; %s" % (source, comment)
- else:
- print >> output, "\tpopl\t%s\t\t/* %s */ " % (source, comment)
-
-
- def _register(name, disp=""):
- if self.format == 'msvc':
- if disp:
- return "DWORD PTR [%s+%s]" % (name, disp)
- else:
- return name
- else:
- if disp:
- return "%s(%%%s)" % (disp, name)
- else:
- return '%' + name
-
- def _offset(name):
- if self.format == 'msvc':
- return "OFFSET %s" % _globalname(name)
- else:
- return "$%s" % _globalname(name)
-
- def _call(arg, comment):
- if self.format == 'msvc':
- print >> output, "\tcall\t%s\t\t;%s" % (arg, comment)
- else:
- print >> output, "\tcall\t%s\t\t/* %s */" % (arg, comment)
-
- def _indirectjmp(arg):
- if self.format == 'msvc':
- return "DWORD PTR " + arg
- else:
- return "*%" + arg
+ # The pypy_asm_stackwalk() function
if self.format == 'msvc':
print >> output, """\
- TITLE\tgcmaptable.s
- .686P
- .XMM
- .model\tflat
+ /* A circular doubly-linked list of all
+ * the ASM_FRAMEDATAs currently alive
+ */
+ struct asm_framedata {
+ struct asm_framedata* prev;
+ struct asm_framedata* next;
+ } __gcrootanchor = { &__gcrootanchor, &__gcrootanchor };
+
+ /* See description in asmgcroot.py */
+ __declspec(naked)
+ long pypy_asm_stackwalk(void *callback)
+ {
+ __asm {
+ mov\tedx, DWORD PTR [esp+4]\t; my argument, which is the callback
+ mov\teax, esp\t\t; my frame top address
+ push\teax\t\t\t; ASM_FRAMEDATA[6]
+ push\tebp\t\t\t; ASM_FRAMEDATA[5]
+ push\tedi\t\t\t; ASM_FRAMEDATA[4]
+ push\tesi\t\t\t; ASM_FRAMEDATA[3]
+ push\tebx\t\t\t; ASM_FRAMEDATA[2]
+
+ ; Add this ASM_FRAMEDATA to the front of the circular linked
+ ; list. Let's call it 'self'.
+
+ mov\teax, DWORD PTR [__gcrootanchor+4]\t\t; next = gcrootanchor->next
+ push\teax\t\t\t\t\t\t\t\t\t; self->next = next
+ push\tOFFSET __gcrootanchor ; self->prev = gcrootanchor
+ mov\tDWORD PTR [__gcrootanchor+4], esp\t\t; gcrootanchor->next = self
+ mov\tDWORD PTR [eax+0], esp\t\t\t\t\t; next->prev = self
+
+ call\tedx\t\t\t\t\t\t; invoke the callback
+
+ ; Detach this ASM_FRAMEDATA from the circular linked list
+ pop\tesi\t\t\t\t\t\t\t; prev = self->prev
+ pop\tedi\t\t\t\t\t\t\t; next = self->next
+ mov\tDWORD PTR [esi+4], edi\t\t; prev->next = next
+ mov\tDWORD PTR [edi+0], esi\t\t; next->prev = prev
+
+ pop\tebx\t\t\t\t; restore from ASM_FRAMEDATA[2]
+ pop\tesi\t\t\t\t; restore from ASM_FRAMEDATA[3]
+ pop\tedi\t\t\t\t; restore from ASM_FRAMEDATA[4]
+ pop\tebp\t\t\t\t; restore from ASM_FRAMEDATA[5]
+ pop\tecx\t\t\t\t; ignored ASM_FRAMEDATA[6]
+ ; the return value is the one of the 'call' above,
+ ; because %eax (and possibly %edx) are unmodified
+ ret
+ }
+ }
"""
- _variant(elf='\t.text',
- darwin='\t.text',
- mingw32='\t.text',
- msvc='_TEXT\tSEGMENT')
-
- _globl('pypy_asm_stackwalk')
- _variant(elf='.type pypy_asm_stackwalk, @function',
- darwin='',
- mingw32='',
- msvc='')
- _label('pypy_asm_stackwalk')
- _comment("See description in asmgcroot.py")
- _movl(_register("esp", disp="4"), _register("edx"), "my argument, which is the callback")
- _movl(_register("esp"), _register("eax"), "my frame top address")
- _pushl(_register("eax"), "ASM_FRAMEDATA[6]")
- _pushl(_register("ebp"), "ASM_FRAMEDATA[5]")
- _pushl(_register("edi"), "ASM_FRAMEDATA[4]")
- _pushl(_register("esi"), "ASM_FRAMEDATA[3]")
- _pushl(_register("ebx"), "ASM_FRAMEDATA[2]")
-
- print >> output
- _comment("Add this ASM_FRAMEDATA to the front of the circular linked")
- _comment("list. Let's call it 'self'.")
- print >> output
- _movl(_globalname("__gcrootanchor", disp=4), _register("eax"), "next = gcrootanchor->next")
- _pushl(_register("eax"), "self->next = next")
- _pushl(_offset("__gcrootanchor"), "self->prev = gcrootanchor")
- _movl(_register("esp"), _globalname("__gcrootanchor", disp=4), "gcrootanchor->next = self")
- _movl(_register("esp"), _register("eax", "0"), "next->prev = self")
- print >> output
-
- _comment("note: the Mac OS X 16 bytes aligment must be respected.")
- _call(_indirectjmp("edx"), "invoke the callback")
- print >> output
-
- _comment("Detach this ASM_FRAMEDATA from the circular linked list")
- _popl(_register("esi"), "prev = self->prev")
- _popl(_register("edi"), "next = self->next")
- _movl(_register("edi"), _register("esi", disp="4"), "prev->next = next")
- _movl(_register("esi"), _register("edi", disp="0"), "next->prev = prev")
- print >> output
-
- _popl(_register("ebx"), "restore from ASM_FRAMEDATA[2]")
- _popl(_register("esi"), "restore from ASM_FRAMEDATA[3]")
- _popl(_register("edi"), "restore from ASM_FRAMEDATA[4]")
- _popl(_register("ebp"), "restore from ASM_FRAMEDATA[5]")
- _popl(_register("ecx"), "ignored ASM_FRAMEDATA[6]")
- _comment("the return value is the one of the 'call' above,")
- _comment("because %eax (and possibly %edx) are unmodified")
-
- print >> output, "\tret"
-
- _variant(elf='.size pypy_asm_stackwalk, .-pypy_asm_stackwalk',
- darwin='',
- mingw32='',
- msvc='')
-
- if self.format == 'msvc':
- for label, state, is_range in self.gcmaptable:
- print >> output, "EXTERN %s:NEAR" % label
+ else:
+ print >> output, "\t.text"
+ print >> output, "\t.globl %s" % _globalname('pypy_asm_stackwalk')
+ _variant(elf='.type pypy_asm_stackwalk, @function',
+ darwin='',
+ mingw32='')
+ print >> output, "%s:" % _globalname('pypy_asm_stackwalk')
- if self.format == 'msvc':
- print >> output, '_DATA SEGMENT'
+ print >> output, """\
+ /* See description in asmgcroot.py */
+ movl\t4(%esp), %edx\t/* my argument, which is the callback */
+ movl\t%esp, %eax\t/* my frame top address */
+ pushl\t%eax\t\t/* ASM_FRAMEDATA[6] */
+ pushl\t%ebp\t\t/* ASM_FRAMEDATA[5] */
+ pushl\t%edi\t\t/* ASM_FRAMEDATA[4] */
+ pushl\t%esi\t\t/* ASM_FRAMEDATA[3] */
+ pushl\t%ebx\t\t/* ASM_FRAMEDATA[2] */
+
+ /* Add this ASM_FRAMEDATA to the front of the circular linked */
+ /* list. Let's call it 'self'. */
+
+ movl\t__gcrootanchor + 4, %eax\t/* next = gcrootanchor->next */
+ pushl\t%eax\t\t\t\t/* self->next = next */
+ pushl\t$__gcrootanchor\t\t\t/* self->prev = gcrootanchor */
+ movl\t%esp, __gcrootanchor + 4\t/* gcrootanchor->next = self */
+ movl\t%esp, 0(%eax)\t\t\t/* next->prev = self */
+
+ /* note: the Mac OS X 16 bytes aligment must be respected. */
+ call\t*%edx\t\t/* invoke the callback */
+
+ /* Detach this ASM_FRAMEDATA from the circular linked list */
+ popl\t%esi\t\t/* prev = self->prev */
+ popl\t%edi\t\t/* next = self->next */
+ movl\t%edi, 4(%esi)\t/* prev->next = next */
+ movl\t%esi, 0(%edi)\t/* next->prev = prev */
+
+ popl\t%ebx\t\t/* restore from ASM_FRAMEDATA[2] */
+ popl\t%esi\t\t/* restore from ASM_FRAMEDATA[3] */
+ popl\t%edi\t\t/* restore from ASM_FRAMEDATA[4] */
+ popl\t%ebp\t\t/* restore from ASM_FRAMEDATA[5] */
+ popl\t%ecx\t\t/* ignored ASM_FRAMEDATA[6] */
+
+ /* the return value is the one of the 'call' above, */
+ /* because %eax (and possibly %edx) are unmodified */
+ ret
+ """.replace("__gcrootanchor", _globalname("__gcrootanchor"))
+
+ _variant(elf='.size pypy_asm_stackwalk, .-pypy_asm_stackwalk',
+ darwin='',
+ mingw32='')
- _comment("A circular doubly-linked list of all")
- _comment("the ASM_FRAMEDATAs currently alive")
if self.format == 'msvc':
- _globl('__gcrootanchor')
- print >> output, '%s\tDD FLAT:___gcrootanchor ; prev' % _globalname("__gcrootanchor")
- print >> output, '\tDD FLAT:___gcrootanchor ; next'
- else:
- print >> output, '\t.data'
- print >> output, '\t.align\t4'
- _globl('__gcrootanchor')
- _label('__gcrootanchor')
+ for label, state, is_range in self.gcmaptable:
+ label = label[1:]
+ print >> output, "extern void* %s;" % label
+ else:
print >> output, """\
+ /* A circular doubly-linked list of all */
+ /* the ASM_FRAMEDATAs currently alive */
+ .data
+ .align 4
+ .globl __gcrootanchor
+ __gcrootanchor:
.long\t__gcrootanchor /* prev */
.long\t__gcrootanchor /* next */
-""".replace("__gcrootanchor", _globalname("__gcrootanchor"))
+ """.replace("__gcrootanchor", _globalname("__gcrootanchor"))
+
+ shapes = {}
+ shapelines = []
+ shapeofs = 0
+
+ # write the tables
- _globl('__gcmapstart')
if self.format == 'msvc':
- print >> output, '%s' % _globalname('__gcmapstart'),
+ print >> output, """\
+ static struct { void* addr; long shape; } __gcmap[%d] = {
+ """ % (len(self.gcmaptable),)
+ for label, state, is_range in self.gcmaptable:
+ label = label[1:]
+ try:
+ n = shapes[state]
+ except KeyError:
+ n = shapes[state] = shapeofs
+ bytes = [str(b) for b in compress_callshape(state)]
+ shapelines.append('\t%s,\t/* %s */\n' % (
+ ', '.join(bytes),
+ shapeofs))
+ shapeofs += len(bytes)
+ if is_range:
+ n = ~ n
+ print >> output, '{ &%s, %d},' % (label, n)
+ print >> output, """\
+ };
+ void* __gcmapstart = __gcmap;
+ void* __gcmapend = __gcmap + %d;
+
+ char __gccallshapes[] = {
+ """ % (len(self.gcmaptable),)
+ output.writelines(shapelines)
+ print >> output, """\
+ };
+ """
else:
- _label('__gcmapstart')
- for label, state, is_range in self.gcmaptable:
- try:
- n = shapes[state]
- except KeyError:
- n = shapes[state] = shapeofs
- bytes = [str(b) for b in compress_callshape(state)]
- if self.format == 'msvc':
- shapelines.append('\tDB\t%s\t;%s\n' % (
- ', '.join(bytes),
- shapeofs))
- else:
+ print >> output, """\
+ .globl __gcmapstart
+ __gcmapstart:
+ """.replace("__gcmapstart", _globalname("__gcmapstart"))
+
+ for label, state, is_range in self.gcmaptable:
+ try:
+ n = shapes[state]
+ except KeyError:
+ n = shapes[state] = shapeofs
+ bytes = [str(b) for b in compress_callshape(state)]
shapelines.append('\t/*%d*/\t.byte\t%s\n' % (
shapeofs,
', '.join(bytes)))
- shapeofs += len(bytes)
- if is_range:
- n = ~ n
- if self.format == 'msvc':
- print >> output, '\tDD\t%s' % (label,)
- print >> output, '\tDD\t%d' % (n,)
- else:
+ shapeofs += len(bytes)
+ if is_range:
+ n = ~ n
print >> output, '\t.long\t%s-%d' % (
label,
PARSERS[self.format].FunctionGcRootTracker.OFFSET_LABELS)
print >> output, '\t.long\t%d' % (n,)
- _globl('__gcmapend')
- if self.format == 'msvc':
- print >> output, '%s DD ?' % _globalname('__gcmapend')
- else:
- _label('__gcmapend')
- _variant(elf='.section\t.rodata',
- darwin='.const',
- mingw32='',
- msvc='')
-
- _globl('__gccallshapes')
- if self.format == 'msvc':
- print >> output, _globalname('__gccallshapes'),
- else:
- _label('__gccallshapes')
- output.writelines(shapelines)
+ print >> output, """\
+ .globl __gcmapend
+ __gcmapend:
+ """.replace("__gcmapend", _globalname("__gcmapend"))
+
+ _variant(elf='.section\t.rodata',
+ darwin='.const',
+ mingw32='')
- if self.format == 'msvc':
- print >> output, "_DATA\tENDS"
- print >> output, "END"
+ print >> output, """\
+ .globl __gccallshapes
+ __gccallshapes:
+ """.replace("__gccallshapes", _globalname("__gccallshapes"))
+ output.writelines(shapelines)
def process(self, iterlines, newfile, entrypoint='main', filename='?'):
parser = PARSERS[format](verbose=self.verbose, shuffle=self.shuffle)
Modified: pypy/trunk/pypy/translator/c/genc.py
==============================================================================
--- pypy/trunk/pypy/translator/c/genc.py (original)
+++ pypy/trunk/pypy/translator/c/genc.py Tue Mar 2 14:05:01 2010
@@ -532,7 +532,7 @@
['$(CC) /nologo $(ASM_CFLAGS) /c /FAs /Fa$*.s $< $(INCLUDEDIRS)',
'cmd /c ' + python + '$(PYPYDIR)/translator/c/gcc/trackgcroot.py -fmsvc -t $*.s > $@']
)
- mk.rule('gcmaptable.s', '$(GCMAPFILES)',
+ mk.rule('gcmaptable.c', '$(GCMAPFILES)',
'cmd /c ' + python + '$(PYPYDIR)/translator/c/gcc/trackgcroot.py -fmsvc $(GCMAPFILES) > $@')
else:
Modified: pypy/trunk/pypy/translator/c/src/mem.h
==============================================================================
--- pypy/trunk/pypy/translator/c/src/mem.h (original)
+++ pypy/trunk/pypy/translator/c/src/mem.h Tue Mar 2 14:05:01 2010
@@ -2,6 +2,7 @@
/************************************************************/
/*** C header subsection: operations on LowLevelTypes ***/
+#ifndef _MSC_VER
extern char __gcmapstart;
extern char __gcmapend;
extern char __gccallshapes;
@@ -18,7 +19,6 @@
and one in a register), pass one to GCROOT, and later use the other
one. In practice the pypy_asm_gcroot() is often a no-op in the final
machine code and doesn't prevent most optimizations. */
-#ifndef _MSC_VER
/* With gcc, getting the asm() right was tricky, though. The asm() is
not volatile so that gcc is free to delete it if the output variable
@@ -34,13 +34,28 @@
"0" (p), "m" (__gcnoreorderhack)); \
_r; })
+#define pypy_asm_gc_nocollect(f) asm volatile ("/* GC_NOCOLLECT " #f " */" \
+ : : )
+
#define pypy_asm_keepalive(v) asm volatile ("/* keepalive %0 */" : : \
"g" (v))
/* marker for trackgcroot.py */
#define pypy_asm_stack_bottom() asm volatile ("/* GC_STACK_BOTTOM */" : : )
+#define OP_GC_ASMGCROOT_STATIC(i, r) r = \
+ i == 0 ? (void*)&__gcmapstart : \
+ i == 1 ? (void*)&__gcmapend : \
+ i == 2 ? (void*)&__gccallshapes : \
+ i == 3 ? (void*)&__gcrootanchor : \
+ NULL
+
#else
+extern void* __gcmapstart;
+extern void* __gcmapend;
+extern char* __gccallshapes;
+extern void* __gcrootanchor;
+extern long pypy_asm_stackwalk(void*);
/* With the msvc Microsoft Compiler, the optimizer seems free to move
any code (even asm) that involves local memory (registers and stack).
@@ -58,20 +73,22 @@
return _r1;
}
+#define pypy_asm_gc_nocollect(f) "/* GC_NOCOLLECT " #f " */"
+
#define pypy_asm_keepalive(v) __asm { }
static __declspec(noinline) void pypy_asm_stack_bottom() { }
-#endif
-
-
-
#define OP_GC_ASMGCROOT_STATIC(i, r) r = \
- i == 0 ? (void*)&__gcmapstart : \
- i == 1 ? (void*)&__gcmapend : \
+ i == 0 ? (void*)__gcmapstart : \
+ i == 1 ? (void*)__gcmapend : \
i == 2 ? (void*)&__gccallshapes : \
i == 3 ? (void*)&__gcrootanchor : \
NULL
+#endif
+
+
+
#define RAW_MALLOC_ZERO_FILLED 0
#if RAW_MALLOC_ZERO_FILLED
From arigo at codespeak.net Tue Mar 2 14:08:46 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:08:46 +0100 (CET)
Subject: [pypy-svn] r71630 - pypy/trunk/pypy/module/sys
Message-ID: <20100302130846.D094C282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:08:45 2010
New Revision: 71630
Modified:
pypy/trunk/pypy/module/sys/version.py
Log:
Bump the version number of PyPy.
Modified: pypy/trunk/pypy/module/sys/version.py
==============================================================================
--- pypy/trunk/pypy/module/sys/version.py (original)
+++ pypy/trunk/pypy/module/sys/version.py Tue Mar 2 14:08:45 2010
@@ -7,7 +7,7 @@
CPYTHON_VERSION = (2, 5, 2, "beta", 42)
CPYTHON_API_VERSION = 1012
-PYPY_VERSION = (1, 1, 0, "beta", '?')
+PYPY_VERSION = (1, 2, 0, "beta", '?')
# the last item is replaced by the svn revision ^^^
TRIM_URL_UP_TO = 'svn/pypy/'
From arigo at codespeak.net Tue Mar 2 14:09:00 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:09:00 +0100 (CET)
Subject: [pypy-svn] r71631 - pypy/release/1.2.x
Message-ID: <20100302130900.0D9A1282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:08:58 2010
New Revision: 71631
Added:
pypy/release/1.2.x/
- copied from r71630, pypy/trunk/
Log:
Make a release branch.
From arigo at codespeak.net Tue Mar 2 14:27:26 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:27:26 +0100 (CET)
Subject: [pypy-svn] r71632 - pypy/trunk/pypy/doc/tool
Message-ID: <20100302132726.2705E282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:27:23 2010
New Revision: 71632
Modified:
pypy/trunk/pypy/doc/tool/makecontributor.py
Log:
Actually exclude the authors that want to be excluded :-/
Modified: pypy/trunk/pypy/doc/tool/makecontributor.py
==============================================================================
--- pypy/trunk/pypy/doc/tool/makecontributor.py (original)
+++ pypy/trunk/pypy/doc/tool/makecontributor.py Tue Mar 2 14:27:23 2010
@@ -8,12 +8,12 @@
try:
path = py.std.sys.argv[1]
except IndexError:
- print "usage: %s PATH" %(py.std.sys.argv[0])
+ print "usage: %s ROOTPATH" %(py.std.sys.argv[0])
raise SystemExit, 1
d = {}
-for logentry in py.path.svnwc(py.std.sys.argv[1]).log():
+for logentry in py.path.svnwc(path).log():
a = logentry.author
if a in d:
d[a] += 1
@@ -30,6 +30,8 @@
cutoff = 5 # cutoff for authors in the LICENSE file
mark = False
for author, count in items:
+ if author in excluded:
+ continue
user = uconf.system.User(author)
try:
realname = user.realname.strip()
From arigo at codespeak.net Tue Mar 2 14:31:05 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:31:05 +0100 (CET)
Subject: [pypy-svn] r71633 - pypy/trunk/pypy/doc
Message-ID: <20100302133105.EAB45282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:31:04 2010
New Revision: 71633
Modified:
pypy/trunk/pypy/doc/contributor.txt
Log:
Update the list of contributors.
Modified: pypy/trunk/pypy/doc/contributor.txt
==============================================================================
--- pypy/trunk/pypy/doc/contributor.txt (original)
+++ pypy/trunk/pypy/doc/contributor.txt Tue Mar 2 14:31:04 2010
@@ -8,18 +8,18 @@
Armin Rigo
- Samuele Pedroni
- Carl Friedrich Bolz
Maciek Fijalkowski
- Michael Hudson
+ Carl Friedrich Bolz
+ Samuele Pedroni
Antonio Cuni
+ Michael Hudson
Christian Tismer
Holger Krekel
Eric van Riet Paap
Richard Emslie
Anders Chrigstrom
- Aurelien Campeas
Amaury Forgeot d Arc
+ Aurelien Campeas
Anders Lehmann
Niklaus Haldimann
Seo Sanghyeon
@@ -27,11 +27,12 @@
Lawrence Oluyede
Jakub Gustak
Guido Wesdorp
- Niko Matsakis
- Toon Verwaest
+ Benjamin Peterson
Alexander Schremmer
+ Niko Matsakis
Ludovic Aubry
Alex Martelli
+ Toon Verwaest
Stephan Diehl
Adrien Di Mascio
Stefan Schwarzer
@@ -39,8 +40,8 @@
Patrick Maupin
Jacob Hallen
Laura Creighton
- Camillo Bruni
Bob Ippolito
+ Camillo Bruni
Simon Burton
Bruno Gola
Alexandre Fayolle
@@ -48,46 +49,46 @@
Guido van Rossum
Valentino Volonghi
Adrian Kuhn
- Anders Hammarquist
Paul deGrandis
Gerald Klix
Wanja Saatkamp
+ Anders Hammarquist
Oscar Nierstrasz
Eugene Oden
Lukas Renggli
- Bartosz SKOWRON
Guenter Jantzen
Dinu Gherman
+ Bartosz SKOWRON
Georg Brandl
Ben Young
- Nicolas Chauvat
Jean-Paul Calderone
+ Nicolas Chauvat
Rocco Moretti
Michael Twomey
- Boris Feigin
+ boria
Jared Grubb
Olivier Dormond
Stuart Williams
Jens-Uwe Mager
Justas Sadzevicius
+ Mikael Sch?nenberg
Brian Dorsey
Jonathan David Riehl
Beatrice During
Elmo M?ntynen
Andreas Friedge
+ Alex Gaynor
Anders Qvist
Alan McIntyre
Bert Freudenberg
Pieter Zieschang
- Ignas Mikalajunas
Jacob Oscarson
Lutz Paelike
- Benjamin Peterson
Michael Schneider
Artur Lisiecki
Lene Wagner
Christopher Armstrong
- Joshua Gilbert
+ Jan de Mooij
Jacek Generowicz
Gasper Zejn
Stephan Busemann
@@ -95,11 +96,10 @@
Godefroid Chappelle
Toby Watson
Andrew Thompson
- Gintautas Miliauskas
+ Joshua Gilbert
Anders Sigfridsson
- Neil Shepperd
+ David Schneider
Michael Chermside
tav
- Igor Trindade Oliveira
Martin Blais
Victor Stinner
From arigo at codespeak.net Tue Mar 2 14:37:02 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:37:02 +0100 (CET)
Subject: [pypy-svn] r71634 - pypy/trunk
Message-ID: <20100302133702.33BF0282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:36:59 2010
New Revision: 71634
Modified:
pypy/trunk/LICENSE
Log:
Update LICENSE.
Modified: pypy/trunk/LICENSE
==============================================================================
--- pypy/trunk/LICENSE (original)
+++ pypy/trunk/LICENSE Tue Mar 2 14:36:59 2010
@@ -35,18 +35,18 @@
copyrighted by one or more of the following people and organizations:
Armin Rigo
- Samuele Pedroni
- Carl Friedrich Bolz
Maciek Fijalkowski
- Michael Hudson
+ Carl Friedrich Bolz
+ Samuele Pedroni
Antonio Cuni
+ Michael Hudson
Christian Tismer
Holger Krekel
Eric van Riet Paap
Richard Emslie
Anders Chrigstrom
- Aurelien Campeas
Amaury Forgeot d Arc
+ Aurelien Campeas
Anders Lehmann
Niklaus Haldimann
Seo Sanghyeon
@@ -54,11 +54,12 @@
Lawrence Oluyede
Jakub Gustak
Guido Wesdorp
- Niko Matsakis
- Toon Verwaest
+ Benjamin Peterson
Alexander Schremmer
+ Niko Matsakis
Ludovic Aubry
Alex Martelli
+ Toon Verwaest
Stephan Diehl
Adrien Di Mascio
Stefan Schwarzer
@@ -66,8 +67,8 @@
Patrick Maupin
Jacob Hallen
Laura Creighton
- Camillo Bruni
Bob Ippolito
+ Camillo Bruni
Simon Burton
Bruno Gola
Alexandre Fayolle
@@ -75,34 +76,35 @@
Guido van Rossum
Valentino Volonghi
Adrian Kuhn
- Anders Hammarquist
Paul deGrandis
Gerald Klix
Wanja Saatkamp
+ Anders Hammarquist
Oscar Nierstrasz
Eugene Oden
Lukas Renggli
- Bartosz SKOWRON
Guenter Jantzen
Dinu Gherman
+ Bartosz SKOWRON
Georg Brandl
- Benjamin Peterson
Ben Young
- Nicolas Chauvat
Jean-Paul Calderone
+ Nicolas Chauvat
Rocco Moretti
Michael Twomey
- Boris Feigin
+ boria
Jared Grubb
Olivier Dormond
Stuart Williams
Jens-Uwe Mager
Justas Sadzevicius
+ Mikael Sch?nenberg
Brian Dorsey
Jonathan David Riehl
Beatrice During
Elmo M?ntynen
Andreas Friedge
+ Alex Gaynor
Anders Qvist
Alan McIntyre
Bert Freudenberg
From arigo at codespeak.net Tue Mar 2 14:46:22 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 14:46:22 +0100 (CET)
Subject: [pypy-svn] r71635 - pypy/trunk/pypy/doc
Message-ID: <20100302134622.2C143282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 14:46:20 2010
New Revision: 71635
Modified:
pypy/trunk/pypy/doc/how-to-release.txt
Log:
Update how-to-release.txt.
Modified: pypy/trunk/pypy/doc/how-to-release.txt
==============================================================================
--- pypy/trunk/pypy/doc/how-to-release.txt (original)
+++ pypy/trunk/pypy/doc/how-to-release.txt Tue Mar 2 14:46:20 2010
@@ -23,14 +23,14 @@
some of the next updates may be done before or after branching; make
sure things are ported back to the trunk and to the branch as
necessary
-* update dist/pypy/doc/contributor.txt (and possibly dist/LICENSE)
-* update dist/README
-* write release announcement dist/pypy/doc/release-x.y(.z).txt
+* update pypy/doc/contributor.txt (and possibly LICENSE)
+* update README
+* write release announcement pypy/doc/release-x.y(.z).txt
the release announcement should contain a direct link to the download page
(which is getting started).
-* update dist/pypy/doc/getting-started.txt links at the top
+* update pypy/doc/getting-started.txt links at the top
and release number references, make sure it is generally up-to-date
-* use, after the necessary updates, dist/pypy/tool/makerelease.py to
+* use, after the necessary updates, pypy/tool/makerelease.py to
make the tarballs on codespeak; this generates html doc for the
tarballs too. Use::
@@ -44,6 +44,8 @@
if some stuff is missing. We have some support for running part of
our nightly tests on tarballs (see
http://codespeak.net/svn/user/pedronis/tarball-testing).
-* write a news item for the release in dist/pypy/doc/news.txt
+* write a news item for the release in pypy/doc/news.txt
+* update http://codespeak.net/svn/pypy/dist and codespeak's
+ precomputed html files
* send announcements to pypy-dev, pypy-funding, python-list,
python-announce, python-dev ...
From arigo at codespeak.net Tue Mar 2 15:04:50 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 15:04:50 +0100 (CET)
Subject: [pypy-svn] r71636 - pypy/trunk/pypy/doc
Message-ID: <20100302140450.80B52282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 15:04:47 2010
New Revision: 71636
Added:
pypy/trunk/pypy/doc/release-1.2.0.txt (contents, props changed)
Log:
Start writing the release announcement.
Added: pypy/trunk/pypy/doc/release-1.2.0.txt
==============================================================================
--- (empty file)
+++ pypy/trunk/pypy/doc/release-1.2.0.txt Tue Mar 2 15:04:47 2010
@@ -0,0 +1,75 @@
+=============================================
+PyPy 1.2: Preview of Just-in-Time Compilation
+=============================================
+
+Welcome to the PyPy 1.2 release. The highlight of this release is a
+version of PyPy that includes a rather good JIT (Just-in-Time) Compiler.
+
+Download page:
+
+ http://codespeak.net/pypy/dist/pypy/doc/download.html
+
+PyPy's Getting Started lives at:
+
+ http://codespeak.net/pypy/dist/pypy/doc/getting-started.html
+
+Highlights of This Release
+==========================
+
+ - JIT. XXX only on 32-bit Intel CPUs so far.
+
+ http://morepypy.blogspot.com/search/label/jit
+
+ - Graphs:
+
+ http://speed.pypy.org/
+ http://codespeak.net:8099/plotsummary.html
+ http://codespeak.net/pypy/jitplots.html
+
+ - Improvements in GC and in our object model: we use much less memory
+ than CPython now
+
+ http://morepypy.blogspot.com/2009/10/gc-improvements.html
+ http://? for the object model, e.g. sharingdict.py
+
+
+Other Changes
+=============
+
+ - ?
+
+
+What is PyPy?
+=============
+
+Technically, PyPy is both a Python interpreter implementation and an
+advanced compiler, or more precisely a framework for implementing dynamic
+languages and generating virtual machines for them.
+
+The framework allows for alternative frontends as well as for alternative
+backends, currently C, Java and .NET. For our main target "C", we can
+"mix in" different garbage collectors and threading models,
+including micro-threads aka "Stackless". The inherent complexity that
+arises from this ambitious approach is mostly kept away from the Python
+interpreter implementation, our main frontend.
+
+The focus of this release is the introduction of a new transformation,
+the JIT Compiler Generator, which is able to produce a JIT Compiler for
+any interpreter frontend, given a very small number of hand-written hints.
+
+Socially, PyPy is a collaborative effort of many individuals working
+together in a distributed and sprint-driven way since 2003. PyPy would
+not have gotten as far as it has without the coding, feedback and
+general support from numerous people.
+
+
+
+Have fun,
+
+ the PyPy release team, [in alphabetical order]
+
+ Amaury Forgeot d'Arc, Antonio Cuni, Armin Rigo, Carl Friedrich Bolz,
+ Holger Krekel, Maciek Fijalkowski, Samuele Pedroni
+
+ and many others:
+ http://codespeak.net/pypy/dist/pypy/doc/contributor.html
From arigo at codespeak.net Tue Mar 2 15:11:05 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 15:11:05 +0100 (CET)
Subject: [pypy-svn] r71637 - pypy/trunk/pypy/doc
Message-ID: <20100302141105.A77A9282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 15:11:04 2010
New Revision: 71637
Modified:
pypy/trunk/pypy/doc/download.txt
Log:
Start updating download.txt.
Modified: pypy/trunk/pypy/doc/download.txt
==============================================================================
--- pypy/trunk/pypy/doc/download.txt (original)
+++ pypy/trunk/pypy/doc/download.txt Tue Mar 2 15:11:04 2010
@@ -2,19 +2,28 @@
Download one of the following release files:
=============================================
-PyPy 1.1 Sources:
+PyPy 1.2 Sources:
-----------------
-* `pypy-1.1.0.tar.bz2`_ (sources, unix line endings) or
-* `pypy-1.1.0.tar.gz`_ (sources, unix line endings) or
-* `pypy-1.1.0.zip`_ (sources, windows line-endings)
-
-.. _`pypy-1.1.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-1.1.0.tar.bz2
-.. _`pypy-1.1.0.zip`: http://codespeak.net/download/pypy/pypy-1.1.0.zip
-.. _`pypy-1.1.0.tar.gz`: http://codespeak.net/download/pypy/pypy-1.1.0.tar.gz
+* `pypy-1.2.0.tar.bz2`_ (sources, unix line endings) or
+* `pypy-1.2.0.tar.gz`_ (sources, unix line endings) or
+* `pypy-1.2.0.zip`_ (sources, windows line-endings)
+
+.. _`pypy-1.2.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.bz2
+.. _`pypy-1.2.0.zip`: http://codespeak.net/download/pypy/pypy-1.2.0.zip
+.. _`pypy-1.2.0.tar.gz`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.gz
Prebuilt binaries
~~~~~~~~~~~~~~~~~
-We do not provide prebuilt binaries yet (but would happily
-link to other people's pages with one version or another).
+XXX
+
+The ``lang`` repository
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``lang`` part of our repository, which contains other interpreters
+developped mostly as external contributions, has moved and is no longer
+included in the above packages. You can grab it by `browsing the
+Subversion source`__.
+
+.. __: http://codespeak.net/svn/pypy/lang/
From getxsick at codespeak.net Tue Mar 2 15:16:08 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 15:16:08 +0100 (CET)
Subject: [pypy-svn] r71638 - in pypy/build/ubuntu/debian: . manpages
Message-ID: <20100302141608.DC10D282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 15:16:07 2010
New Revision: 71638
Removed:
pypy/build/ubuntu/debian/manpages/pypy-stackless.1
pypy/build/ubuntu/debian/pypy-stackless.install
pypy/build/ubuntu/debian/pypy-stackless.manpages
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/configure.py
pypy/build/ubuntu/debian/control
Log:
remove pypy-stackless package
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 2 15:16:07 2010
@@ -3,13 +3,11 @@
TRANSLATE=pypy/translator/goal/translate.py
TRANSLATEOPTS=--text --batch -b c --source --thread
TARGETOPTS=%(TARGETOPTS)s
-TARGETOPTS_STACKLESS=%(TARGETOPTS_STACKLESS)s
PREFIX=%(PREFIX)s
OUTPUTDIR=debian/tmp/usr/bin
-STACKLESS=--stackless
LOGIC=-o logic
-BINARIES=bin/pypy bin/pypy-stackless
+BINARIES=bin/pypy
all: $(BINARIES)
@@ -23,14 +21,6 @@
make -C $(TMPDIR)/debian-pypy-usession-0/testing_1
install -D $(TMPDIR)/debian-pypy-usession-0/testing_1/testing_1 $@
-bin/pypy-stackless: export TMPDIR = $(CURDIR)/build-stackless
-bin/pypy-stackless:
- @rm -rf $(TMPDIR)
- mkdir $(TMPDIR)
- $(TRANSLATE) $(TRANSLATEOPTS) $(STACKLESS) $(TARGET) $(TARGETOPTS_STACKLESS)
- make -C $(TMPDIR)/debian-pypy-usession-0/testing_1
- install -D $(TMPDIR)/debian-pypy-usession-0/testing_1/testing_1 $@
-
clean:
rm -rf bin
rm -rf build-*
Modified: pypy/build/ubuntu/debian/configure.py
==============================================================================
--- pypy/build/ubuntu/debian/configure.py (original)
+++ pypy/build/ubuntu/debian/configure.py Tue Mar 2 15:16:07 2010
@@ -25,17 +25,14 @@
def gen_make(make_in, build_arch, host_arch, prefix):
options = {'default': {'TARGETOPTS': '--allworkingmodules',
- 'TARGETOPTS_STACKLESS': '--allworkingmodules',
'TARGETOPTS_LOGIC': '--allworkingmodules',
},
'i386': {'TARGETOPTS': '--allworkingmodules --faassen',
- 'TARGETOPTS_STACKLESS': '--allworkingmodules --faassen',
'TARGETOPTS_LOGIC': '--allworkingmodules',
},
'amd64':{'TARGETOPTS': '--allworkingmodules --faassen',
- 'TARGETOPTS_STACKLESS': '--allworkingmodules',
'TARGETOPTS_LOGIC': '--allworkingmodules',
},
}
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Tue Mar 2 15:16:07 2010
@@ -34,18 +34,7 @@
.
This package provides the PyPy interpreter compiled using the C backend
and no special additionnal functionality. As such it can be used as another
- implementation of the Python language. See pypy-stackless for an enhanced
- version.
-
-Package: pypy-stackless
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, pypy-lib
-Description: the python in python interpreter, C backend translation
- The PyPy project aims to provide a Python implementation of the Python
- interpreter.
- .
- This package provides the PyPy interpreter compiled using the C backend, with
- stackless functionality.
+ implementation of the Python language.
Package: pypy-doc
Architecture: all
From arigo at codespeak.net Tue Mar 2 15:24:40 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 15:24:40 +0100 (CET)
Subject: [pypy-svn] r71639 - pypy/trunk/pypy/doc/jit
Message-ID: <20100302142440.ABD31282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 15:24:39 2010
New Revision: 71639
Modified:
pypy/trunk/pypy/doc/jit/pyjitpl5.txt
Log:
Fix broken url.
Modified: pypy/trunk/pypy/doc/jit/pyjitpl5.txt
==============================================================================
--- pypy/trunk/pypy/doc/jit/pyjitpl5.txt (original)
+++ pypy/trunk/pypy/doc/jit/pyjitpl5.txt Tue Mar 2 15:24:39 2010
@@ -172,7 +172,7 @@
* `Tracing the Meta-Level: PyPy's Tracing JIT Compiler`__
-.. __: http://codespeak.net/svn/pypy/extradoc/talk/ipcoolps2009/bolz-tracing-jit.pdf
+.. __: http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit-final.pdf
as well as the `blog posts with the JIT tag.`__
From arigo at codespeak.net Tue Mar 2 15:34:42 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 15:34:42 +0100 (CET)
Subject: [pypy-svn] r71640 - pypy/trunk/pypy/doc
Message-ID: <20100302143442.5B1B2282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 15:34:40 2010
New Revision: 71640
Modified:
pypy/trunk/pypy/doc/architecture.txt
pypy/trunk/pypy/doc/faq.txt
pypy/trunk/pypy/doc/release-1.2.0.txt
Log:
Updates.
Modified: pypy/trunk/pypy/doc/architecture.txt
==============================================================================
--- pypy/trunk/pypy/doc/architecture.txt (original)
+++ pypy/trunk/pypy/doc/architecture.txt Tue Mar 2 15:34:40 2010
@@ -250,7 +250,7 @@
.. _`Extreme Programming`: http://www.extremeprogramming.org/
.. _fast: faq.html#how-fast-is-pypy
-.. _`very compliant`: http://codespeak.net:8099/summary?category=lib-python&branch=%3Ctrunk%3E
+.. _`very compliant`: cpython_differences.html
.. _`RPython`: coding-guide.html#rpython
Modified: pypy/trunk/pypy/doc/faq.txt
==============================================================================
--- pypy/trunk/pypy/doc/faq.txt (original)
+++ pypy/trunk/pypy/doc/faq.txt Tue Mar 2 15:34:40 2010
@@ -131,19 +131,25 @@
.. _whysoslow:
-The answer to this question depends on how the PyPy interpreter is run. When
-optimized and translated to C, the PyPy interpreter runs somewhere between 1
-and 2 times slower than CPython. If the PyPy interpreter is run on top of
-CPython, i.e., without translation of any kind, then it is slower by a factor
-of 2000. Obtaining good measurements for the performance when run on the CLI or
-JVM is difficult, but it is safe to say that PyPy currently runs slower than
-IronPython (CLI) or Jython (JVM) for most tests.
-
-The work on the Just-In-Time compiler is currently at its fifth revision,
-but it looks like this revision is finally going to make it. It is work
-in progress; see the `JIT documentation`_.
+In three words, PyPy is "kind of fast". In more than three
+words, the answer to this question is hard to give as a single
+number. The fastest PyPy available so far is clearly PyPy
+`with a JIT included`_, optimized and translated to C. This
+version of PyPy is "kind of fast" in the sense that there are
+numerous examples of Python code that run *much faster* than
+CPython, up to a large number of times faster. And there are
+also examples of code that are just as slow as without the
+JIT. A PyPy that does not include a JIT has performance that
+is more predictable: it runs generally somewhere between 1 and
+2 times slower than CPython, in the worst case up to 4 times
+slower.
+
+Obtaining good measurements for the performance when run on
+the CLI or JVM is difficult, but the JIT on the CLI `seems to
+work nicely`__ too.
-.. _`JIT documentation`: jit/index.html
+.. __: http://codespeak.net/svn/user/antocuni/phd/thesis/thesis.pdf
+.. _`with a JIT included`: jit/index.html
.. _`prolog and javascript`:
@@ -163,10 +169,11 @@
Currently, we have preliminary versions of a JavaScript interpreter
(Leonardo Santagada as his Summer of PyPy project), a `Prolog interpreter`_
(Carl Friedrich Bolz as his Bachelor thesis), and a `SmallTalk interpreter`_
-(produced during a sprint). All of them are unfinished at the moment.
+(produced during a sprint). `All of them`_ are unfinished at the moment.
.. _`Prolog interpreter`: http://codespeak.net/svn/pypy/lang/prolog/
.. _`SmallTalk interpreter`: http://dx.doi.org/10.1007/978-3-540-89275-5_7
+.. _`All of them`: http://codespeak.net/svn/pypy/lang/
Development
========================================================================
Modified: pypy/trunk/pypy/doc/release-1.2.0.txt
==============================================================================
--- pypy/trunk/pypy/doc/release-1.2.0.txt (original)
+++ pypy/trunk/pypy/doc/release-1.2.0.txt Tue Mar 2 15:34:40 2010
@@ -38,6 +38,10 @@
- ?
+ - CLI+JIT not included in the release
+
+ - Stackless incompatible with the JIT
+
What is PyPy?
=============
From arigo at codespeak.net Tue Mar 2 16:10:37 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 16:10:37 +0100 (CET)
Subject: [pypy-svn] r71641 - pypy/trunk/pypy/doc
Message-ID: <20100302151037.BBA67282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 16:10:36 2010
New Revision: 71641
Modified:
pypy/trunk/pypy/doc/faq.txt
pypy/trunk/pypy/doc/project-ideas.txt
Log:
Updates.
Modified: pypy/trunk/pypy/doc/faq.txt
==============================================================================
--- pypy/trunk/pypy/doc/faq.txt (original)
+++ pypy/trunk/pypy/doc/faq.txt Tue Mar 2 16:10:36 2010
@@ -56,10 +56,12 @@
OS X and mostly works under Windows too (but is tested there less
extensively). PyPy needs a CPython running on the target platform to
bootstrap, as cross compilation is not really meant to work yet.
-At the moment you need CPython 2.4 (with ctypes 0.9.9.6 or newer) or
-CPython 2.5 for the translation process.
+At the moment you need CPython 2.4 (with ctypes) or CPython 2.5 or 2.6
+for the translation process.
-PyPy also basically works in a 64-bit Linux environment.
+PyPy also basically works in a 64-bit Linux environment, but
+*it requires a 32-bit Intel CPU* for the JIT right now. (It works
+fine in a 32-bit chroot of an Intel 64.)
------------------------------------------------
Which Python version (2.x?) does PyPy implement?
Modified: pypy/trunk/pypy/doc/project-ideas.txt
==============================================================================
--- pypy/trunk/pypy/doc/project-ideas.txt (original)
+++ pypy/trunk/pypy/doc/project-ideas.txt Tue Mar 2 16:10:36 2010
@@ -23,35 +23,41 @@
--------------------------------
PyPy's Just-In-Time compiler relies on backends for actual code
-generation. Right now we are working on the ``pyjitpl5`` branch, which
-is not stable. Working on the JIT backends should be soon possible.
-Open ideas are to write a backend for AMD64 (Intel 64); or .NET or
-Java (requires porting the JIT frontend to ootype too, which is not too
-hard); or trying to use LLVM-JIT.
+generation. We have so far a 32-bit Intel backend, and a CLI one. Open
+ideas are to write a backend for **Intel 64** (AMD64); or a backend for
+Java; or trying again to use LLVM-JIT (which I do not really recommend).
CTypes
------
Support ctypes on more backends. Right now ctypes is supported only
-when compiling PyPy to C. A nice project would be to support it when
+when compiling PyPy to C, and there is a bit of unfinished work to
+support it on **Intel 64.** A nice project would be to support it when
compiling to .NET or the JVM. That's not too hard, the only thing needed
is to port a small module that does the actual invocation of external
-libraries (a related project would be to port this module to Jython or
-IronPython to get support for ctypes there).
+libraries (a related project is to port this module to Jython or
+IronPython to get support for ctypes there, which is something that was
+tried but not finished as far as I know).
.. _distribution:
.. _persistence:
-Experiment with distribution and persistence
---------------------------------------------
+Extensions of the Python language
+---------------------------------
+
++----------------------------------------------------------------------+
+| :NOTE: |
+| |
+| The ideas in this paragraph are marked as "experimental". We may |
+| or may not be interested in helping you out. You are warned :-) |
+| |
++----------------------------------------------------------------------+
One of the advantages of PyPy's implementation is that the Python-level type
of an object and its implementation are completely independent. This should
allow a much more intuitive interface to, for example, objects that are backed
-by a persistent store.
-
-The `transparent proxy`_ objects are a key step in this
+by a persistent store. The `transparent proxy`_ objects are a key step in this
direction; now all that remains is to implement the interesting bits :-)
An example project might be to implement functionality akin to the `ZODB's
@@ -61,15 +67,22 @@
Another example would be to implement a multi-CPU extension that internally
uses several processes and uses transparent proxies to share object views.
+Other ideas are to do something interesting with sandboxing_; or to
+work more on the Stackless_ features (e.g. integrate it with the JIT);
+or revive the logic object space, which tried to bring unification-like
+features to Python.
+
+.. _sandboxing: sandbox.html
+.. _Stackless: stackless.html
+
-Various Ideas
--------------
+Other languages
+---------------
-- improve one of the existing interpreters (e.g. the Prolog, the Scheme or
- the JavaScript interpreter or the Smalltalk VM), or start a new one
+Improve one of the `existing interpreters`__, or start a new one.
+Experiment with the JIT compiler generator.
-- revive the logic object space, which tried to bring unification-like
- features to Python
+.. __: http://codespeak.net/svn/pypy/lang/
Or else...
From arigo at codespeak.net Tue Mar 2 16:11:15 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 16:11:15 +0100 (CET)
Subject: [pypy-svn] r71642 - pypy/trunk/pypy/doc
Message-ID: <20100302151115.1812E282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 16:11:13 2010
New Revision: 71642
Modified:
pypy/trunk/pypy/doc/project-ideas.txt
Log:
Updated the list.
Modified: pypy/trunk/pypy/doc/project-ideas.txt
==============================================================================
--- pypy/trunk/pypy/doc/project-ideas.txt (original)
+++ pypy/trunk/pypy/doc/project-ideas.txt Tue Mar 2 16:11:13 2010
@@ -1,8 +1,6 @@
Independent project ideas relating to PyPy
==========================================
-*NOTE: This is an extremely outdated list, don't consider it seriously*
-
PyPy allows experimentation in many directions -- indeed facilitating
experimentation in language implementation was one of the main
motivations for the project. This page is meant to collect some ideas
From arigo at codespeak.net Tue Mar 2 16:33:22 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 16:33:22 +0100 (CET)
Subject: [pypy-svn] r71643 - pypy/trunk/pypy/doc
Message-ID: <20100302153322.809E6282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 16:33:20 2010
New Revision: 71643
Modified:
pypy/trunk/pypy/doc/getting-started-python.txt
pypy/trunk/pypy/doc/getting-started.txt
Log:
Updates.
Modified: pypy/trunk/pypy/doc/getting-started-python.txt
==============================================================================
--- pypy/trunk/pypy/doc/getting-started-python.txt (original)
+++ pypy/trunk/pypy/doc/getting-started-python.txt Tue Mar 2 16:33:20 2010
@@ -47,34 +47,28 @@
* ``libncurses-dev`` (for the optional ``_minimal_curses`` module)
* ``libexpat1-dev`` (for the optional ``pyexpat`` module)
* ``libssl-dev`` (for the optional ``_ssl`` module)
- * ``libgc-dev`` (only when translating with `--opt=0, 1` or `size`)
+ * ``libgc-dev`` (Boehm: only when translating with `--opt=0, 1` or `size`)
2. Translation is somewhat time-consuming (30 min to
over one hour) and RAM-hungry. If you have less than 1.5 GB of
RAM (or a slow machine) you might want to pick the
`optimization level`_ `1` in the next step. A level of
- `2` or `3` gives much better results, though.
+ `2` or `3` or `jit` gives much better results, though.
Let me stress this another time: at ``--opt=1`` you get the Boehm
GC, which is here mostly for historical and for testing reasons.
You really do not want to pick it. The resulting ``pypy-c`` is
slow.
- Alternatively, if you want to enable the experimental JIT, choose
- the optimization level ``jit``.
-
3. Run::
cd pypy/translator/goal
- python translate.py --opt=3 targetpypystandalone.py
-
- possibly replacing ``--opt=3`` with ``--opt=jit`` or another
- `optimization level`_ of your choice.
+ python translate.py --opt=jit targetpypystandalone.py
- On Linux 32-bit Intel machines, you can get some extra speed
- (and extra translation time) by adding ``--gcrootfinder=asmgcc``
- just after the ``--opt`` option. (This option is implied by
- ``--opt=jit``.)
+ possibly replacing ``--opt=jit`` with another `optimization level`_
+ of your choice like ``--opt=2`` if you do not want the included JIT
+ compiler. (The default level so far is 2. Do not use ``--opt=jit``
+ on something else than Intel **32-bit** machines.)
.. _`optimization level`: config/opt.html
@@ -99,11 +93,13 @@
>>>>
This executable can be moved around or copied on other machines; see
-Installation_ below.
+Installation_ below. For now a JIT-enabled ``pypy-c`` always produces
+debugging output to stderr when it exits, unless translated with
+``--jit-debug=off``.
The ``translate.py`` script takes a very large number of options controlling
what to translate and how. See ``translate.py -h``. Some of the more
-interesting options are:
+interesting options (but for now incompatible with the JIT) are:
* ``--stackless``: this produces a pypy-c that includes features
inspired by `Stackless Python `__.
@@ -121,54 +117,12 @@
.. _`translate PyPy with the thunk object space`:
-Translating with the thunk object space
+Translating with non-standard options
++++++++++++++++++++++++++++++++++++++++
-One of the original features provided by PyPy is the "thunk"
-object space, providing lazily-computed objects in a fully
-transparent manner::
-
- cd pypy
- python bin/py.py -o thunk
-
- >>>> from __pypy__ import thunk
- >>>> def longcomputation(lst):
- .... print "computing..."
- .... return sum(lst)
- ....
- >>>> x = thunk(longcomputation, range(5))
- >>>> y = thunk(longcomputation, range(10))
-
-From the application perspective, ``x`` and ``y`` represent
-exactly the objects being returned by the ``longcomputation()``
-invocations. You can put these objects into a dictionary
-without triggering the computation::
-
- >>>> d = {5: x, 10: y}
- >>>> result = d[5]
- >>>> result
- computing...
- 10
- >>>> type(d[10])
- computing...
-
- >>>> d[10]
- 45
-
-It is interesting to note that this lazy-computing Python extension
-is solely implemented in a small `objspace/thunk.py`_ file consisting
-of around 200 lines of code.
-
-It is also possible to translate a PyPy version using the "thunk" object
-space::
-
- cd pypy/translator/goal
- python translate.py targetpypystandalone.py --objspace=thunk
-
-the example above should work in the translated result.
-
-If you want know more about pypy-exclusive features go to `objspace proxies`_
-document.
+It is possible to have non-standard features enabled for translation,
+but they are not really tested any more. Look for example at the
+`objspace proxies`_ document.
.. _`objspace proxies`: objspace-proxies.html
@@ -181,7 +135,15 @@
./translate.py --backend=cli targetpypystandalone.py
-The executable and all its dependecies will be stored in the
+Or better, try out the experimental `branch/cli-jit`_ described by
+Antonio Cuni's `Ph.D. thesis`_ and translate with the JIT::
+
+ ./translate.py -Ojit --backend=cli targetpypystandalone.py
+
+.. _`branch/cli-jit`: http://codespeak.net/svn/pypy/branch/cli-jit/
+.. _`Ph.D. thesis`: http://codespeak.net/svn/user/antocuni/phd/thesis/thesis.pdf
+
+The executable and all its dependencies will be stored in the
./pypy-cli-data directory. To run pypy.NET, you can run
./pypy-cli-data/main.exe. If you are using Linux or Mac, you can use
the convenience ./pypy-cli script::
@@ -334,11 +296,6 @@
.. _`CLI backend`: cli-backend.html
.. _`Boehm-Demers-Weiser garbage collector`: http://www.hpl.hp.com/personal/Hans_Boehm/gc/
.. _clr: clr-module.html
-.. _`CPythons core language regression tests`: http://codespeak.net:8099/summary?category=lib-python&branch=%3Ctrunk%3E
+.. _`CPythons core language regression tests`: http://codespeak.net:8099/summary?category=applevel&branch=%3Ctrunk%3E
.. include:: _ref.txt
-
-
-
-
-
Modified: pypy/trunk/pypy/doc/getting-started.txt
==============================================================================
--- pypy/trunk/pypy/doc/getting-started.txt (original)
+++ pypy/trunk/pypy/doc/getting-started.txt Tue Mar 2 16:33:20 2010
@@ -14,10 +14,9 @@
Python itself, flexible and easy to experiment with.
We target a large variety of platforms, small and large, by providing a
compiler toolsuite that can produce custom Python versions. Platform, memory
-and threading models are aspects of the translation process - as
-opposed to encoding low level details into the language implementation itself.
-Eventually, dynamic optimization techniques - implemented as another
-translation aspect - should become robust against language changes. `more...`_
+and threading models, as well as the JIT compiler itself, are aspects of the
+translation process - as opposed to encoding low level details into the
+language implementation itself. `more...`_
.. _Python: http://docs.python.org/ref
.. _`more...`: architecture.html
From getxsick at codespeak.net Tue Mar 2 16:33:59 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 16:33:59 +0100 (CET)
Subject: [pypy-svn] r71644 - pypy/build/ubuntu/debian
Message-ID: <20100302153359.E347F282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 16:33:58 2010
New Revision: 71644
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/changelog
pypy/build/ubuntu/debian/configure.py
pypy/build/ubuntu/debian/pypy-dev.install
pypy/build/ubuntu/debian/pypy-dev.links
pypy/build/ubuntu/debian/pypy-dev.override
pypy/build/ubuntu/debian/pypy-lib.install
pypy/build/ubuntu/debian/rules
Log:
update to 1.2 release and merge some changes done by Chris Lamby
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 2 16:33:58 2010
@@ -1,15 +1,24 @@
TARGET=pypy/translator/goal/targetpypystandalone
TRANSLATE=pypy/translator/goal/translate.py
-TRANSLATEOPTS=--text --batch -b c --source --thread
+TRANSLATEOPTS=--batch --source --Ojit
TARGETOPTS=%(TARGETOPTS)s
PREFIX=%(PREFIX)s
OUTPUTDIR=debian/tmp/usr/bin
LOGIC=-o logic
-BINARIES=bin/pypy
+BINARIES=%(BINARIES)s
-all: $(BINARIES)
+all: $(BINARIES) test
+
+test: export TMPDIR = $(CURDIR)/tests-tmp
+test:
+ @rm -rf $(TMPDIR)
+ mkdir $(TMPDIR)
+ set -e; for SECTION in interpreter lib; do \
+ time py/bin/py.test pypy/$$SECTION || true; \
+ echo Finished tsting section $$SECTION; \
+ done
.NOTPARALLEL: $(BINARIES)
@@ -17,13 +26,14 @@
bin/pypy:
@rm -rf $(TMPDIR)
mkdir $(TMPDIR)
- $(TRANSLATE) $(TRANSLATEOPTS) $(TARGET) $(TARGETOPTS)
+ $(TRANSLATE) $(TRANSLATEOPTS) $(TARGET) $(TARGETOPTS)
make -C $(TMPDIR)/debian-pypy-usession-0/testing_1
install -D $(TMPDIR)/debian-pypy-usession-0/testing_1/testing_1 $@
clean:
rm -rf bin
rm -rf build-*
+ rm -rf tests-tmp
rm -rf pypy/_cache
rm -rf py/c-extension/greenlet/build
rm -f py/c-extension/greenlet/greenlet.so
Modified: pypy/build/ubuntu/debian/changelog
==============================================================================
--- pypy/build/ubuntu/debian/changelog (original)
+++ pypy/build/ubuntu/debian/changelog Tue Mar 2 16:33:58 2010
@@ -1,3 +1,26 @@
+pypy (1.2.0-svn71592-1) unstable; urgency=low
+
+ * New upstream release.
+ * New maintainer.
+
+ -- Bartosz Skowron Mon, 01 Mar 2010 18:30:44 +0100
+
+pypy (1.0.0-svn55443-2) unstable; urgency=low
+
+ * Bump MEMTHRESHOLD to 1400MB.
+
+ -- Chris Lamb Sat, 21 Jun 2008 21:42:09 +0100
+
+pypy (1.0.0-svn55443-1) unstable; urgency=low
+
+ * New upstream snapshot.
+ - Doesn't hardcode libc6.so.6; fixes FTBFS on ia64 (Closes: #440331)
+ * Don't build pypy-stackless on platforms the greenlet module has not been
+ ported to. (Closes: #475868)
+ * Run tests after build on request by upstream.
+
+ -- Chris Lamb Sat, 31 May 2008 18:50:58 +0100
+
pypy (1.0.0-svn51288-1) unstable; urgency=low
* New upstream release. (Closes: #459118)
Modified: pypy/build/ubuntu/debian/configure.py
==============================================================================
--- pypy/build/ubuntu/debian/configure.py (original)
+++ pypy/build/ubuntu/debian/configure.py Tue Mar 2 16:33:58 2010
@@ -2,7 +2,7 @@
import sys
import os
-MEMTHRESHOLD = 1024
+MEMTHRESHOLD = 1400
LOWMEM = """\
The translation of pypy requires a large amount of physical
@@ -24,20 +24,15 @@
def gen_make(make_in, build_arch, host_arch, prefix):
- options = {'default': {'TARGETOPTS': '--allworkingmodules',
- 'TARGETOPTS_LOGIC': '--allworkingmodules',
- },
-
- 'i386': {'TARGETOPTS': '--allworkingmodules --faassen',
- 'TARGETOPTS_LOGIC': '--allworkingmodules',
- },
-
- 'amd64':{'TARGETOPTS': '--allworkingmodules --faassen',
- 'TARGETOPTS_LOGIC': '--allworkingmodules',
- },
- }
- substitutions = options.get(build_arch, options['default'])
- substitutions['PREFIX'] = prefix
+ default = {'TARGETOPTS': '--allworkingmodules',
+ 'TARGETOPTS_LOGIC': '--allworkingmodules',
+ 'BINARIES': 'bin/pypy',
+ }
+ options = {}
+ #options['i386'] = {'TARGETOPTS': '--allworkingmodules -Ojit'}
+
+ substitutions = dict(PREFIX=prefix, **default)
+ substitutions.update(options.get(build_arch, {}))
return make_in % substitutions
def run():
Modified: pypy/build/ubuntu/debian/pypy-dev.install
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.install (original)
+++ pypy/build/ubuntu/debian/pypy-dev.install Tue Mar 2 16:33:58 2010
@@ -1,17 +1,17 @@
-pypy/annotation usr/share/pypy-1.0/pypy
-pypy/bin usr/share/pypy-1.0/pypy
-pypy/config usr/share/pypy-1.0/pypy
-pypy/__init__.py usr/share/pypy-1.0/pypy
-pypy/interpreter usr/share/pypy-1.0/pypy
-pypy/jit usr/share/pypy-1.0/pypy
-pypy/lang usr/share/pypy-1.0/pypy
-pypy/module usr/share/pypy-1.0/pypy
-pypy/objspace usr/share/pypy-1.0/pypy
-pypy/rlib usr/share/pypy-1.0/pypy
-pypy/rpython usr/share/pypy-1.0/pypy
-pypy/tool usr/share/pypy-1.0/pypy
-pypy/translator usr/share/pypy-1.0/pypy
-pypy/conftest.py usr/share/pypy-1.0/pypy
+pypy/annotation usr/share/pypy-1.2/pypy
+pypy/bin usr/share/pypy-1.2/pypy
+pypy/config usr/share/pypy-1.2/pypy
+pypy/__init__.py usr/share/pypy-1.2/pypy
+pypy/interpreter usr/share/pypy-1.2/pypy
+pypy/jit usr/share/pypy-1.2/pypy
+pypy/lang usr/share/pypy-1.2/pypy
+pypy/module usr/share/pypy-1.2/pypy
+pypy/objspace usr/share/pypy-1.2/pypy
+pypy/rlib usr/share/pypy-1.2/pypy
+pypy/rpython usr/share/pypy-1.2/pypy
+pypy/tool usr/share/pypy-1.2/pypy
+pypy/translator usr/share/pypy-1.2/pypy
+pypy/conftest.py usr/share/pypy-1.2/pypy
debian/scripts/py.py usr/bin
debian/scripts/pypy-translate usr/bin
debian/scripts/jscompile usr/bin
Modified: pypy/build/ubuntu/debian/pypy-dev.links
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.links (original)
+++ pypy/build/ubuntu/debian/pypy-dev.links Tue Mar 2 16:33:58 2010
@@ -1 +1 @@
-/var/cache/pypy/_cache /usr/share/pypy-1.0/pypy/_cache
+/var/cache/pypy/_cache /usr/share/pypy-1.2/pypy/_cache
Modified: pypy/build/ubuntu/debian/pypy-dev.override
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.override (original)
+++ pypy/build/ubuntu/debian/pypy-dev.override Tue Mar 2 16:33:58 2010
@@ -1,5 +1,5 @@
# Gentoo specific file. We will keep it.
-pypy-dev: unusual-interpreter ./usr/share/pypy-0.9/pypy/tool/build/bin/gentoo_init.d #!/sbin/runscript
+#pypy-dev: unusual-interpreter ./usr/share/pypy-0.9/pypy/tool/build/bin/gentoo_init.d #!/sbin/runscript
# This is the name of the interpreted interpreter. Renaming it to py makes no sense
pypy-dev: script-with-language-extension usr/bin/py.py
Modified: pypy/build/ubuntu/debian/pypy-lib.install
==============================================================================
--- pypy/build/ubuntu/debian/pypy-lib.install (original)
+++ pypy/build/ubuntu/debian/pypy-lib.install Tue Mar 2 16:33:58 2010
@@ -1,2 +1,2 @@
-lib-python usr/share/pypy-1.0
-pypy/lib usr/share/pypy-1.0/pypy
+lib-python usr/share/pypy-1.2
+pypy/lib usr/share/pypy-1.2/pypy
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Tue Mar 2 16:33:58 2010
@@ -9,14 +9,14 @@
DEB_BUILD_ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)
-VERSION=1.0
+VERSION=1.2
get-orig-source:
set -e ; \
- svn co http://codespeak.net/svn/pypy/dist pypy-svn ; \
+ svn co http://codespeak.net/svn/pypy/trunk pypy-svn ; \
REVISION=`svnversion pypy-svn/` ; \
find pypy-svn/ -depth -type d -name ".svn" | xargs rm -rf ; \
- tar cfz pypy_1.0.0-svn$$REVISION.orig.tar.gz pypy-svn/ ; \
+ tar cfz pypy_$(VERSION).0-svn$$REVISION.orig.tar.gz pypy-svn/ ; \
rm -rf pypy-svn/
Makefile: debian/Makefile.in
From arigo at codespeak.net Tue Mar 2 16:35:21 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 16:35:21 +0100 (CET)
Subject: [pypy-svn] r71645 - pypy/trunk/pypy/doc
Message-ID: <20100302153521.68AF7282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 16:35:19 2010
New Revision: 71645
Modified:
pypy/trunk/pypy/doc/getting-started-dev.txt
Log:
Update.
Modified: pypy/trunk/pypy/doc/getting-started-dev.txt
==============================================================================
--- pypy/trunk/pypy/doc/getting-started-dev.txt (original)
+++ pypy/trunk/pypy/doc/getting-started-dev.txt Tue Mar 2 16:35:19 2010
@@ -334,7 +334,7 @@
++++++++++++++++++++++++++++
`ctypes`_ is included in CPython 2.5 and higher. CPython 2.4 users needs to
-install it (version 0.9.9.6 or later) if they want to run low-level tests. See
+install it if they want to run low-level tests. See
the `download page of ctypes`_.
.. _`download page of ctypes`: http://sourceforge.net/project/showfiles.php?group_id=71702
From arigo at codespeak.net Tue Mar 2 16:55:26 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 16:55:26 +0100 (CET)
Subject: [pypy-svn] r71646 - pypy/trunk/pypy/doc/jit
Message-ID: <20100302155526.B4A0E282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 16:55:24 2010
New Revision: 71646
Modified:
pypy/trunk/pypy/doc/jit/overview.txt
Log:
Update.
Modified: pypy/trunk/pypy/doc/jit/overview.txt
==============================================================================
--- pypy/trunk/pypy/doc/jit/overview.txt (original)
+++ pypy/trunk/pypy/doc/jit/overview.txt Tue Mar 2 16:55:24 2010
@@ -16,23 +16,30 @@
--------
Writing an interpreter for a complex dynamic language like Python is not
-a small task. So doing it a high-level language looks like a good idea,
-because high-level languages have many advantages over low-level ones
-(flexibility, ease of implementation, no low-level issues...). This is
-the basic observation behind PyPy.
-
-But coding in a high-level language has other benefits beyond the
-obvious ones. Perhaps most importantly, it allows the language
-interpreter to be analyzed when turned into a compiler. This is
-precisely what our JIT compiler generator does. Based on tracing
-JIT techniques, **it can turn the interpreter of an arbitrary
-dynamic language into a just-in-time compiler for the same language.**
-It works mostly automatically and only needs guidance by the language
-implementor in the form of a small number of hints in the source code of
-the interpreter. The resulting JIT compiler has the same language
-semantics as the original interpreter by construction. It generates
-machine code for the user program while aggressively optimizing it,
-leading to a big performance boost.
+a small task, especially if, for performance goals, we want to write a
+Just-in-Time (JIT) compiler too.
+
+The good news is that it's not what we did. We indeed wrote an
+interpreter for Python, but we never wrote any JIT compiler for Python
+in PyPy. Instead, we use the fact that our interpreter for Python is
+written in RPython, which is a nice, high-level language -- and we turn
+it *automatically* into a JIT compiler for Python.
+
+This transformation is of course completely transparent to the user,
+i.e. the programmer writing Python programs. The goal (which we
+achieved) is to support *all* Python features -- including, for example,
+random frame access and debuggers. But it is also mostly transparent to
+the language implementor, i.e. to the source code of the Python
+interpreter. It only needs a bit of guidance: we had to put a small
+number of hints in the source code of our interpreter. Based on these
+hints, the *JIT compiler generator* produces a JIT compiler which has
+the same language semantics as the original interpreter by construction.
+This JIT compiler itself generates machine code at runtime, aggressively
+optimizing the user's program and leading to a big performance boost,
+while keeping the semantics unmodified. Of course, the interesting bit
+is that our Python language interpreter can evolve over time without
+getting out of sync with the JIT compiler.
+
The path we followed
--------------------
@@ -47,13 +54,15 @@
compilers. If this turns out to be correct, the practical speed of
dynamic languages could be vastly improved.
-Today (beginning 2009), our prototype is no longer using partial
-evaluation -- at least not in a way that would convince paper reviewers.
-It is instead based on the notion of *tracing JIT,* recently studied for
-Java and JavaScript. When compared to all existing tracing JITs so far,
-however, partial evaluation gives us some extra techniques that we
-already had in our previous JIT generators, notably how to optimize
-structures by removing allocations.
+All these previous JIT compiler generators were producing JIT compilers
+similar to the hand-written Psyco. But today, starting from 2009, our
+prototype is no longer using partial evaluation -- at least not in a way
+that would convince paper reviewers. It is instead based on the notion
+of *tracing JIT,* recently studied for Java and JavaScript. When
+compared to all existing tracing JITs so far, however, partial
+evaluation gives us some extra techniques that we already had in our
+previous JIT generators, notably how to optimize structures by removing
+allocations.
The closest comparison to our current JIT is Tamarin's TraceMonkey.
However, this JIT compiler is written manually, which is quite some
@@ -87,12 +96,8 @@
is modified, so that they cannot get out of sync no matter how fast
the language evolves.
-* Fast enough: we think that we can get some rather good performance out
- of the generated JIT compilers. That's the whole point, of course.
- Previous experience shows that it should be possible. Our previous
- generated JIT compilers were similar to the hand-written Psyco; due
- to limits in automating the way Psyco works, our current generated
- JIT compilers are instead similar to tracing JITs like TraceMonkey.
+* Fast enough: we can get some rather good performance out of the
+ generated JIT compilers. That's the whole point, of course.
Alternative approaches to improve speed
From arigo at codespeak.net Tue Mar 2 17:17:27 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 17:17:27 +0100 (CET)
Subject: [pypy-svn] r71648 - pypy/extradoc/talk
Message-ID: <20100302161727.2B4B0282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 17:17:25 2010
New Revision: 71648
Modified:
pypy/extradoc/talk/bibtex.bib
Log:
Update.
Modified: pypy/extradoc/talk/bibtex.bib
==============================================================================
--- pypy/extradoc/talk/bibtex.bib (original)
+++ pypy/extradoc/talk/bibtex.bib Tue Mar 2 17:17:25 2010
@@ -20,6 +20,14 @@
year = {2008}
},
+ at phdthesis{antocuni_phd_2010,
+ type = {Ph.D. Thesis},
+ title = {High performance implementation of Python for CLI/.NET with JIT compiler generation for dynamic languages},
+ school = {Universit\`a di Genova},
+ author = {Antonio Cuni},
+ year = {2010}
+},
+
@inproceedings{ancona_rpython:dls_2007,
address = {Montreal, Quebec, Canada},
title = {{RPython:} A Step towards Reconciling Dynamically and Statically Typed {OO} Languages},
From arigo at codespeak.net Tue Mar 2 17:19:13 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 17:19:13 +0100 (CET)
Subject: [pypy-svn] r71649 - pypy/trunk/pypy/doc
Message-ID: <20100302161913.E8421282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 17:19:12 2010
New Revision: 71649
Modified:
pypy/trunk/pypy/doc/index.txt
Log:
Update.
Modified: pypy/trunk/pypy/doc/index.txt
==============================================================================
--- pypy/trunk/pypy/doc/index.txt (original)
+++ pypy/trunk/pypy/doc/index.txt Tue Mar 2 17:19:12 2010
@@ -8,7 +8,7 @@
Getting into PyPy ...
=============================================
-* `Release 1.1`_: the latest official release
+* `Release 1.2`_: the latest official release
* `PyPy Blog`_: news and status info about PyPy
@@ -56,4 +56,4 @@
.. _`Documentation`: docindex.html
.. _`Getting Started`: getting-started.html
.. _papers: extradoc.html
-.. _`Release 1.1`: release-1.1.0.html
+.. _`Release 1.2`: release-1.2.0.html
From arigo at codespeak.net Tue Mar 2 17:19:23 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 17:19:23 +0100 (CET)
Subject: [pypy-svn] r71650 - pypy/trunk/pypy/doc
Message-ID: <20100302161923.7F875282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 17:19:21 2010
New Revision: 71650
Modified:
pypy/trunk/pypy/doc/extradoc.txt
Log:
Add Antonio's thesis.
Modified: pypy/trunk/pypy/doc/extradoc.txt
==============================================================================
--- pypy/trunk/pypy/doc/extradoc.txt (original)
+++ pypy/trunk/pypy/doc/extradoc.txt Tue Mar 2 17:19:21 2010
@@ -7,6 +7,9 @@
*Articles about PyPy published so far, most recent first:* (bibtex_ file)
+* `High performance implementation of Python for CLI/.NET with JIT compiler generation for dynamic languages`_,
+ A. Cuni, Ph.D. thesis
+
* `Tracing the Meta-Level: PyPy's Tracing JIT Compiler`_,
C.F. Bolz, A. Cuni, M. Fijalkowski, A. Rigo
@@ -55,6 +58,7 @@
.. _bibtex: http://codespeak.net/svn/pypy/extradoc/talk/bibtex.bib
+.. _`High performance implementation of Python for CLI/.NET with JIT compiler generation for dynamic languages`: http://codespeak.net/svn/user/antocuni/phd/thesis/thesis.pdf
.. _`How to *not* write Virtual Machines for Dynamic Languages`: http://codespeak.net/svn/pypy/extradoc/talk/dyla2007/dyla.pdf
.. _`Tracing the Meta-Level: PyPy's Tracing JIT Compiler`: http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit.pdf
.. _`Faster than C#: Efficient Implementation of Dynamic Languages on .NET`: http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009-dotnet/cli-jit.pdf
From arigo at codespeak.net Tue Mar 2 17:22:59 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 17:22:59 +0100 (CET)
Subject: [pypy-svn] r71651 - pypy/extradoc/talk
Message-ID: <20100302162259.50E3A282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 17:22:57 2010
New Revision: 71651
Modified:
pypy/extradoc/talk/bibtex.bib
Log:
Update, thanks antocuni.
Modified: pypy/extradoc/talk/bibtex.bib
==============================================================================
--- pypy/extradoc/talk/bibtex.bib (original)
+++ pypy/extradoc/talk/bibtex.bib Tue Mar 2 17:22:57 2010
@@ -23,7 +23,7 @@
@phdthesis{antocuni_phd_2010,
type = {Ph.D. Thesis},
title = {High performance implementation of Python for CLI/.NET with JIT compiler generation for dynamic languages},
- school = {Universit\`a di Genova},
+ school = {{DISI}, Universit\'a di Genova},
author = {Antonio Cuni},
year = {2010}
},
From arigo at codespeak.net Tue Mar 2 17:29:54 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 17:29:54 +0100 (CET)
Subject: [pypy-svn] r71652 - pypy/trunk/pypy/doc
Message-ID: <20100302162954.B5686282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 2 17:29:52 2010
New Revision: 71652
Modified:
pypy/trunk/pypy/doc/extradoc.txt
Log:
Mention RuPy 2009 and PyCon 2010.
Modified: pypy/trunk/pypy/doc/extradoc.txt
==============================================================================
--- pypy/trunk/pypy/doc/extradoc.txt (original)
+++ pypy/trunk/pypy/doc/extradoc.txt Tue Mar 2 17:29:52 2010
@@ -76,9 +76,17 @@
Talks and Presentations
----------------------------------
+Talks in 2010
++++++++++++++
+
+* `PyCon 2010`_.
+
+
Talks in 2009
+++++++++++++
+* `RuPy 2009`_.
+
* `EuroPython talks 2009`_.
* `PyCon talks 2009`_.
@@ -231,6 +239,8 @@
* `Architecture introduction slides`_ a mostly up-to-date
introduction for the Amsterdam PyPy-Sprint Dec 2003.
+.. _`PyCon 2010`: http://morepypy.blogspot.com/2010/02/pycon-2010-report.html
+.. _`RuPy 2009`: http://morepypy.blogspot.com/2009/11/pypy-on-rupy-2009.html
.. _`PyPy 3000`: http://codespeak.net/pypy/extradoc/talk/ep2006/pypy3000.txt
.. _`What can PyPy do for you`: http://codespeak.net/pypy/extradoc/talk/ep2006/usecases-slides.html
.. _`PyPy introduction at EuroPython 2006`: http://codespeak.net/pypy/extradoc/talk/ep2006/intro.pdf
From getxsick at codespeak.net Tue Mar 2 17:46:12 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 17:46:12 +0100 (CET)
Subject: [pypy-svn] r71653 - pypy/build/ubuntu/debian
Message-ID: <20100302164612.130E7282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 17:46:10 2010
New Revision: 71653
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/changelog
Log:
fix translate options and broken revision
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 2 17:46:10 2010
@@ -1,7 +1,7 @@
TARGET=pypy/translator/goal/targetpypystandalone
TRANSLATE=pypy/translator/goal/translate.py
-TRANSLATEOPTS=--batch --source --Ojit
+TRANSLATEOPTS=--batch --source -Ojit
TARGETOPTS=%(TARGETOPTS)s
PREFIX=%(PREFIX)s
OUTPUTDIR=debian/tmp/usr/bin
@@ -13,12 +13,12 @@
test: export TMPDIR = $(CURDIR)/tests-tmp
test:
- @rm -rf $(TMPDIR)
- mkdir $(TMPDIR)
- set -e; for SECTION in interpreter lib; do \
- time py/bin/py.test pypy/$$SECTION || true; \
- echo Finished tsting section $$SECTION; \
- done
+ @rm -rf $(TMPDIR)
+ mkdir $(TMPDIR)
+ set -e; for SECTION in interpreter lib; do \
+ time py/bin/py.test pypy/$$SECTION || true; \
+ echo Finished tsting section $$SECTION; \
+ done
.NOTPARALLEL: $(BINARIES)
Modified: pypy/build/ubuntu/debian/changelog
==============================================================================
--- pypy/build/ubuntu/debian/changelog (original)
+++ pypy/build/ubuntu/debian/changelog Tue Mar 2 17:46:10 2010
@@ -1,4 +1,4 @@
-pypy (1.2.0-svn71592-1) unstable; urgency=low
+pypy (1.2.0-svn71646-1) unstable; urgency=low
* New upstream release.
* New maintainer.
From getxsick at codespeak.net Tue Mar 2 18:12:31 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 18:12:31 +0100 (CET)
Subject: [pypy-svn] r71655 - in pypy/build/ubuntu/debian: . source
Message-ID: <20100302171231.AFB38282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 18:12:30 2010
New Revision: 71655
Added:
pypy/build/ubuntu/debian/source/
pypy/build/ubuntu/debian/source/format
Modified:
pypy/build/ubuntu/debian/changelog
Log:
switch to dpkg-source 3.0 (native) format
Modified: pypy/build/ubuntu/debian/changelog
==============================================================================
--- pypy/build/ubuntu/debian/changelog (original)
+++ pypy/build/ubuntu/debian/changelog Tue Mar 2 18:12:30 2010
@@ -2,8 +2,9 @@
* New upstream release.
* New maintainer.
+ * Switch to dpkg-source 3.0 (native) format
- -- Bartosz Skowron Mon, 01 Mar 2010 18:30:44 +0100
+ -- Bartosz Skowron Tue, 02 Mar 2010 18:08:37 +0100
pypy (1.0.0-svn55443-2) unstable; urgency=low
Added: pypy/build/ubuntu/debian/source/format
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/source/format Tue Mar 2 18:12:30 2010
@@ -0,0 +1 @@
+3.0 (native)
From arigo at codespeak.net Tue Mar 2 18:21:19 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 18:21:19 +0100 (CET)
Subject: [pypy-svn] r71656 - pypy/trunk/pypy/doc
Message-ID: <20100302172119.12E42282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 18:21:18 2010
New Revision: 71656
Modified:
pypy/trunk/pypy/doc/docindex.txt
pypy/trunk/pypy/doc/getting-started-python.txt
pypy/trunk/pypy/doc/translation.txt
Log:
Update the version number.
Modified: pypy/trunk/pypy/doc/docindex.txt
==============================================================================
--- pypy/trunk/pypy/doc/docindex.txt (original)
+++ pypy/trunk/pypy/doc/docindex.txt Tue Mar 2 18:21:18 2010
@@ -73,9 +73,9 @@
Windows, on top of .NET, and on top of Java.
To dig into PyPy it is recommended to try out the current
Subversion HEAD, which is always working or mostly working,
-instead of the `release 1.1.0`__.
+instead of the latest release, which is `1.2.0`__.
-.. __: release-1.1.0.html
+.. __: release-1.2.0.html
PyPy is mainly developed on Linux and Mac OS X. Windows is supported,
but platform-specific bugs tend to take longer before we notice and fix
Modified: pypy/trunk/pypy/doc/getting-started-python.txt
==============================================================================
--- pypy/trunk/pypy/doc/getting-started-python.txt (original)
+++ pypy/trunk/pypy/doc/getting-started-python.txt Tue Mar 2 18:21:18 2010
@@ -213,11 +213,11 @@
``PREFIX/pypy/lib`` can all be found. The prefixes that are tried are::
.
- ./share/pypy-1.1
+ ./share/pypy-1.2
..
- ../share/pypy-1.1
+ ../share/pypy-1.2
../..
- ../../share/pypy-1.1
+ ../../share/pypy-1.2
../../..
etc.
Modified: pypy/trunk/pypy/doc/translation.txt
==============================================================================
--- pypy/trunk/pypy/doc/translation.txt (original)
+++ pypy/trunk/pypy/doc/translation.txt Tue Mar 2 18:21:18 2010
@@ -27,7 +27,7 @@
this task into several steps, and the purpose of this document is to
introduce them.
-As of the 1.1 release, RPython_ programs can be translated into the following
+As of the 1.2 release, RPython_ programs can be translated into the following
languages/platforms: C/POSIX, CLI/.NET
and Java/JVM (in addition, there's `a backend`_ that translates
`application-level`_ into `interpreter-level`_ code, but this is a special
From fijal at codespeak.net Tue Mar 2 19:51:14 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 19:51:14 +0100 (CET)
Subject: [pypy-svn] r71657 - pypy/build/bot2/pypybuildbot
Message-ID: <20100302185114.F1FA0282BD4@codespeak.net>
Author: fijal
Date: Tue Mar 2 19:51:13 2010
New Revision: 71657
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
indent
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Tue Mar 2 19:51:13 2010
@@ -107,7 +107,7 @@
'schedulers': [
Nightly("nightly-first", [LINUX32],
hour=4, minute=44),
- Nightly("nightly", [APPLVLLINUX32, APPLVLWIN32,
+ Nightly("nightly", [APPLVLLINUX32, APPLVLWIN32,
STACKLESSAPPLVLLINUX32, JITLINUX32, OJITLINUX32,
MACOSX32],
hour=4, minute=45),
From fijal at codespeak.net Tue Mar 2 20:21:12 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 20:21:12 +0100 (CET)
Subject: [pypy-svn] r71658 - pypy/trunk/pypy/doc
Message-ID: <20100302192112.112B4282BD4@codespeak.net>
Author: fijal
Date: Tue Mar 2 20:21:11 2010
New Revision: 71658
Modified:
pypy/trunk/pypy/doc/contributor.txt
Log:
fix spelling to official one
Modified: pypy/trunk/pypy/doc/contributor.txt
==============================================================================
--- pypy/trunk/pypy/doc/contributor.txt (original)
+++ pypy/trunk/pypy/doc/contributor.txt Tue Mar 2 20:21:11 2010
@@ -8,7 +8,7 @@
Armin Rigo
- Maciek Fijalkowski
+ Maciej Fijalkowski
Carl Friedrich Bolz
Samuele Pedroni
Antonio Cuni
From arigo at codespeak.net Tue Mar 2 20:39:45 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 2 Mar 2010 20:39:45 +0100 (CET)
Subject: [pypy-svn] r71659 - pypy/trunk
Message-ID: <20100302193945.AD95D282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 2 20:39:44 2010
New Revision: 71659
Modified:
pypy/trunk/LICENSE
Log:
Update fijal's name here too.
Modified: pypy/trunk/LICENSE
==============================================================================
--- pypy/trunk/LICENSE (original)
+++ pypy/trunk/LICENSE Tue Mar 2 20:39:44 2010
@@ -35,7 +35,7 @@
copyrighted by one or more of the following people and organizations:
Armin Rigo
- Maciek Fijalkowski
+ Maciej Fijalkowski
Carl Friedrich Bolz
Samuele Pedroni
Antonio Cuni
From fijal at codespeak.net Tue Mar 2 20:43:45 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 20:43:45 +0100 (CET)
Subject: [pypy-svn] r71660 - pypy/branch/jit-sandbox/pypy/translator/sandbox
Message-ID: <20100302194345.9061E282BD4@codespeak.net>
Author: fijal
Date: Tue Mar 2 20:43:43 2010
New Revision: 71660
Modified:
pypy/branch/jit-sandbox/pypy/translator/sandbox/sandlib.py
Log:
We don't support python 2.3 anyway and that generates DeprecationWarning from
pylib, use subprocess from stdlib
Modified: pypy/branch/jit-sandbox/pypy/translator/sandbox/sandlib.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/translator/sandbox/sandlib.py (original)
+++ pypy/branch/jit-sandbox/pypy/translator/sandbox/sandlib.py Tue Mar 2 20:43:43 2010
@@ -10,7 +10,7 @@
from pypy.rpython.module.ll_os_stat import s_StatResult
from pypy.tool.ansi_print import AnsiLog
from pypy.rlib.rarithmetic import r_longlong
-from py.compat import subprocess
+import subprocess
from pypy.tool.killsubprocess import killsubprocess
class MyAnsiLog(AnsiLog):
From getxsick at codespeak.net Tue Mar 2 21:05:15 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 21:05:15 +0100 (CET)
Subject: [pypy-svn] r71661 - pypy/build/ubuntu/debian
Message-ID: <20100302200515.35439282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 21:04:58 2010
New Revision: 71661
Modified:
pypy/build/ubuntu/debian/Makefile.in
Log:
fix path to session dirs
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 2 21:04:58 2010
@@ -27,8 +27,8 @@
@rm -rf $(TMPDIR)
mkdir $(TMPDIR)
$(TRANSLATE) $(TRANSLATEOPTS) $(TARGET) $(TARGETOPTS)
- make -C $(TMPDIR)/debian-pypy-usession-0/testing_1
- install -D $(TMPDIR)/debian-pypy-usession-0/testing_1/testing_1 $@
+ make -C $(TMPDIR)/usession-0/testing_1
+ install -D $(TMPDIR)/usession-0/testing_1/testing_1 $@
clean:
rm -rf bin
From getxsick at codespeak.net Tue Mar 2 21:10:08 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 21:10:08 +0100 (CET)
Subject: [pypy-svn] r71664 - pypy/build/ubuntu/debian
Message-ID: <20100302201008.96A3E282BD5@codespeak.net>
Author: getxsick
Date: Tue Mar 2 21:09:37 2010
New Revision: 71664
Modified:
pypy/build/ubuntu/debian/configure.py
Log:
remove target options for i386, use default instead. it was commented out anyway
Modified: pypy/build/ubuntu/debian/configure.py
==============================================================================
--- pypy/build/ubuntu/debian/configure.py (original)
+++ pypy/build/ubuntu/debian/configure.py Tue Mar 2 21:09:37 2010
@@ -29,7 +29,6 @@
'BINARIES': 'bin/pypy',
}
options = {}
- #options['i386'] = {'TARGETOPTS': '--allworkingmodules -Ojit'}
substitutions = dict(PREFIX=prefix, **default)
substitutions.update(options.get(build_arch, {}))
From fijal at codespeak.net Tue Mar 2 21:12:52 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 21:12:52 +0100 (CET)
Subject: [pypy-svn] r71666 -
pypy/branch/jit-sandbox/pypy/translator/sandbox/test
Message-ID: <20100302201252.1ED5A282BD4@codespeak.net>
Author: fijal
Date: Tue Mar 2 21:12:47 2010
New Revision: 71666
Modified:
pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py
Log:
A failing test (finally!)
Modified: pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py (original)
+++ pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py Tue Mar 2 21:12:47 2010
@@ -1,6 +1,7 @@
import py
import sys, os, time
import struct
+import subprocess
from pypy.rpython.lltypesystem import rffi
from pypy.translator.interactive import Translation
@@ -19,8 +20,8 @@
write_message(g, result, resulttype)
g.flush()
-def compile(f):
- t = Translation(f, backend='c', standalone=True, sandbox=True, gc='ref')
+def compile(f, gc='ref'):
+ t = Translation(f, backend='c', standalone=True, sandbox=True, gc=gc)
return str(t.compile())
@@ -131,6 +132,24 @@
f.close()
assert tail == ""
+def test_hybrid_gc():
+ def entry_point(argv):
+ return int(len("x" * int(argv[0])) < 350)
+
+ exe = compile(entry_point, gc='hybrid')
+ pipe = subprocess.Popen([exe, '1000000'], stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ g = pipe.stdin
+ f = pipe.stdout
+ expect(f, g, "ll_os.ll_os_getenv", ("PYPY_GENERATIONGC_NURSERY",), None)
+ expect(f, g, "ll_os.ll_os_open", ("/proc/cpuinfo", 0, 420), OSError(5232, "xyz"))
+ g.close()
+ tail = f.read()
+ f.close()
+ assert tail == ""
+ rescode = pipe.wait()
+ assert rescode == 0
+
class TestPrintedResults:
def run(self, entry_point, args, expected):
From fijal at codespeak.net Tue Mar 2 21:58:33 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 21:58:33 +0100 (CET)
Subject: [pypy-svn] r71668 -
pypy/branch/jit-sandbox/pypy/translator/sandbox/test
Message-ID: <20100302205833.96C8C282BD4@codespeak.net>
Author: fijal
Date: Tue Mar 2 21:58:32 2010
New Revision: 71668
Modified:
pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py
Log:
Apparently this test should pass. malloc_varsize_marknsweep is called and
returns non-zero
Modified: pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py (original)
+++ pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py Tue Mar 2 21:58:32 2010
@@ -134,10 +134,13 @@
def test_hybrid_gc():
def entry_point(argv):
- return int(len("x" * int(argv[0])) < 350)
+ l = []
+ for i in range(int(argv[1])):
+ l.append("x" * int(argv[2]))
+ return int(len(l) > 1000)
exe = compile(entry_point, gc='hybrid')
- pipe = subprocess.Popen([exe, '1000000'], stdout=subprocess.PIPE,
+ pipe = subprocess.Popen([exe, '10', '10000'], stdout=subprocess.PIPE,
stdin=subprocess.PIPE)
g = pipe.stdin
f = pipe.stdout
From getxsick at codespeak.net Tue Mar 2 22:30:30 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 22:30:30 +0100 (CET)
Subject: [pypy-svn] r71669 - in pypy/build/ubuntu/debian: . scripts
Message-ID: <20100302213030.7F6E7282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 22:30:28 2010
New Revision: 71669
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/pypy-lib.links
pypy/build/ubuntu/debian/rules
pypy/build/ubuntu/debian/scripts/jscompile
pypy/build/ubuntu/debian/scripts/py.py
pypy/build/ubuntu/debian/scripts/pypy-translate
Log:
update build to 1.2 release
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 2 22:30:28 2010
@@ -35,8 +35,8 @@
rm -rf build-*
rm -rf tests-tmp
rm -rf pypy/_cache
- rm -rf py/c-extension/greenlet/build
- rm -f py/c-extension/greenlet/greenlet.so
+ rm -rf greenlet/build
+ rm -f greenlet/_greenlet.so
find . -name "*.pyc" | xargs rm -f
install: all
Modified: pypy/build/ubuntu/debian/pypy-lib.links
==============================================================================
--- pypy/build/ubuntu/debian/pypy-lib.links (original)
+++ pypy/build/ubuntu/debian/pypy-lib.links Tue Mar 2 22:30:28 2010
@@ -1 +1 @@
-usr/share/pypy-1.0/pypy/lib usr/share/pypy-1.0/lib
+usr/share/pypy-1.2/pypy/lib usr/share/pypy-1.2/lib
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Tue Mar 2 22:30:28 2010
@@ -62,11 +62,11 @@
chmod a+x $$f ; \
fi ; \
done
- chmod a+x debian/pypy-lib/usr/share/pypy-*/lib-python/2.4.1/plat-*/regen
- for f in debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.4.1/test/test_largefile.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.4.1/test/test_largefile.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.4.1/cgi.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.4.1/bsddb/dbshelve.py \
+ chmod a+x debian/pypy-lib/usr/share/pypy-*/lib-python/2.5.2/plat-*/regen
+ for f in debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/test/test_largefile.py \
+ debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/test/test_largefile.py \
+ debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/cgi.py \
+ debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/bsddb/dbshelve.py \
debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/pybench.py \
debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/Setup.py \
debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/Setup.py \
Modified: pypy/build/ubuntu/debian/scripts/jscompile
==============================================================================
--- pypy/build/ubuntu/debian/scripts/jscompile (original)
+++ pypy/build/ubuntu/debian/scripts/jscompile Tue Mar 2 22:30:28 2010
@@ -1,7 +1,7 @@
#!/usr/bin/python
import sys
-sys.path.append('/usr/share/pypy-1.0')
-sys.path.append('/usr/share/pypy-1.0/pypy/bin')
+sys.path.append('/usr/share/pypy-1.2')
+sys.path.append('/usr/share/pypy-1.2/pypy/bin')
sys.path.remove('/usr/bin')
-execfile('/usr/share/pypy-1.0/pypy/bin/jscompile.py')
+execfile('/usr/share/pypy-1.2/pypy/bin/jscompile.py')
Modified: pypy/build/ubuntu/debian/scripts/py.py
==============================================================================
--- pypy/build/ubuntu/debian/scripts/py.py (original)
+++ pypy/build/ubuntu/debian/scripts/py.py Tue Mar 2 22:30:28 2010
@@ -1,5 +1,5 @@
#!/usr/bin/python
import sys
-sys.path.insert(0, '/usr/share/pypy-1.0')
+sys.path.insert(0, '/usr/share/pypy-1.2')
sys.path.remove('/usr/bin')
-execfile('/usr/share/pypy-1.0/pypy/bin/py.py')
+execfile('/usr/share/pypy-1.2/pypy/bin/py.py')
Modified: pypy/build/ubuntu/debian/scripts/pypy-translate
==============================================================================
--- pypy/build/ubuntu/debian/scripts/pypy-translate (original)
+++ pypy/build/ubuntu/debian/scripts/pypy-translate Tue Mar 2 22:30:28 2010
@@ -1,3 +1,3 @@
#!/bin/sh
-/usr/share/pypy-1.0/pypy/translator/goal/translate.py "$@"
+/usr/share/pypy-1.2/pypy/translator/goal/translate.py "$@"
From fijal at codespeak.net Tue Mar 2 23:10:40 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 2 Mar 2010 23:10:40 +0100 (CET)
Subject: [pypy-svn] r71675 - pypy/build/testrunner
Message-ID: <20100302221040.D0B5C282BD4@codespeak.net>
Author: fijal
Date: Tue Mar 2 23:10:39 2010
New Revision: 71675
Modified:
pypy/build/testrunner/runner.py
Log:
Kill some more 2.3 reminescense (and 2.2 apparently)
Modified: pypy/build/testrunner/runner.py
==============================================================================
--- pypy/build/testrunner/runner.py (original)
+++ pypy/build/testrunner/runner.py Tue Mar 2 23:10:39 2010
@@ -1,6 +1,6 @@
import sys, os, signal, thread, Queue, time
import py
-from py.compat import subprocess, optparse
+import subprocess, optparse
if sys.platform == 'win32':
PROCESS_TERMINATE = 0x1
From getxsick at codespeak.net Tue Mar 2 23:51:29 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 2 Mar 2010 23:51:29 +0100 (CET)
Subject: [pypy-svn] r71678 - pypy/build/ubuntu/debian
Message-ID: <20100302225129.10FF3282BD4@codespeak.net>
Author: getxsick
Date: Tue Mar 2 23:51:28 2010
New Revision: 71678
Modified:
pypy/build/ubuntu/debian/Makefile.in
Log:
run tests (app, lib-python and JIT) after trasnalation
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 2 23:51:28 2010
@@ -12,13 +12,27 @@
all: $(BINARIES) test
test: export TMPDIR = $(CURDIR)/tests-tmp
+test: export PYTHONPATH = ".:"$(PYTHONPATH)
test:
@rm -rf $(TMPDIR)
mkdir $(TMPDIR)
- set -e; for SECTION in interpreter lib; do \
- time py/bin/py.test pypy/$$SECTION || true; \
- echo Finished tsting section $$SECTION; \
- done
+ cp build-default/usession-$$USER/testing_1/testing_1 pypy/translator/goal/pypy-c
+ set -e; python testrunner/runner.py \
+ --logfile=pytest-A.log \
+ --config=pypy/pytest-A.cfg \
+ --root=pypy \
+ --timeout=1800 || true;\
+ echo "Finished testing app-level (-A)"; \
+ python pypy/test_all.py \
+ --pypy=pypy/translator/goal/pypy-c \
+ --resultlog=cpython.log \
+ lib-python || true; \
+ echo "Finished testing lib-python"; \
+ python pypy/test_all.py \
+ --pypy=pypy/translator/goal/pypy-c \
+ --resultlog=pypyjit.log \
+ pypy/module/pypyjit/test || true; \
+ echo "Finished testing JIT";
.NOTPARALLEL: $(BINARIES)
From fijal at codespeak.net Wed Mar 3 00:11:57 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 00:11:57 +0100 (CET)
Subject: [pypy-svn] r71679 - in pypy/branch/jit-sandbox/pypy: rlib
translator/sandbox/test
Message-ID: <20100302231157.EA42F282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 00:11:56 2010
New Revision: 71679
Modified:
pypy/branch/jit-sandbox/pypy/rlib/rmmap.py
pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py
Log:
Be extra paranoid on rmmap. This is non-issue, since this stuff is unsupported
by sandbox anyway, however if one day we start supporting it, there is a test.
Modified: pypy/branch/jit-sandbox/pypy/rlib/rmmap.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/rlib/rmmap.py (original)
+++ pypy/branch/jit-sandbox/pypy/rlib/rmmap.py Wed Mar 3 00:11:56 2010
@@ -91,27 +91,32 @@
_ACCESS_DEFAULT, ACCESS_READ, ACCESS_WRITE, ACCESS_COPY = range(4)
def external(name, args, result):
- return rffi.llexternal(name, args, result,
+ unsafe = rffi.llexternal(name, args, result,
+ compilation_info=CConfig._compilation_info_)
+ safe = rffi.llexternal(name, args, result,
compilation_info=CConfig._compilation_info_,
- sandboxsafe=True, threadsafe=True)
+ sandboxsafe=True, threadsafe=False)
+ return unsafe, safe
def winexternal(name, args, result):
- return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win', sandboxsafe=True, threadsafe=True)
+ return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win')
PTR = rffi.CCHARP
-c_memmove = external('memmove', [PTR, PTR, size_t], lltype.Void)
+c_memmove, _ = external('memmove', [PTR, PTR, size_t], lltype.Void)
if _POSIX:
has_mremap = cConfig['has_mremap']
- c_mmap = external('mmap', [PTR, size_t, rffi.INT, rffi.INT,
+ c_mmap, c_mmap_safe = external('mmap', [PTR, size_t, rffi.INT, rffi.INT,
rffi.INT, off_t], PTR)
- c_munmap = external('munmap', [PTR, size_t], rffi.INT)
- c_msync = external('msync', [PTR, size_t, rffi.INT], rffi.INT)
+ c_munmap, c_munmap_safe = external('munmap', [PTR, size_t], rffi.INT)
+ c_msync, _ = external('msync', [PTR, size_t, rffi.INT], rffi.INT)
if has_mremap:
- c_mremap = external('mremap', [PTR, size_t, size_t, rffi.ULONG], PTR)
+ c_mremap, _ = external('mremap',
+ [PTR, size_t, size_t, rffi.ULONG], PTR)
- _get_page_size = external('getpagesize', [], rffi.INT)
+ # this one is always safe
+ _, _get_page_size = external('getpagesize', [], rffi.INT)
def _get_error_no():
return rposix.get_errno()
@@ -634,14 +639,14 @@
flags = MAP_PRIVATE | MAP_ANONYMOUS
prot = PROT_EXEC | PROT_READ | PROT_WRITE
hintp = rffi.cast(PTR, hint.pos)
- res = c_mmap(hintp, map_size, prot, flags, -1, 0)
+ res = c_mmap_safe(hintp, map_size, prot, flags, -1, 0)
if res == rffi.cast(PTR, -1):
raise MemoryError
hint.pos += map_size
return res
alloc._annenforceargs_ = (int,)
- free = c_munmap
+ free = c_munmap_safe
elif _MS_WINDOWS:
def mmap(fileno, length, tagname="", access=_ACCESS_DEFAULT):
Modified: pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py (original)
+++ pypy/branch/jit-sandbox/pypy/translator/sandbox/test/test_sandbox.py Wed Mar 3 00:11:56 2010
@@ -153,6 +153,51 @@
rescode = pipe.wait()
assert rescode == 0
+def test_safe_alloc():
+ from pypy.rlib.rmmap import alloc, free
+
+ def entry_point(argv):
+ one = alloc(1024)
+ free(one, 1024)
+ return 0
+
+ exe = compile(entry_point)
+ pipe = subprocess.Popen([exe], stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ g = pipe.stdin
+ f = pipe.stdout
+ g.close()
+ tail = f.read()
+ f.close()
+ assert tail == ""
+ rescode = pipe.wait()
+ assert rescode == 0
+
+def test_unsafe_mmap():
+ py.test.skip("Since this stuff is unimplemented, it won't work anyway "
+ "however, the day it starts working, it should pass test")
+ from pypy.rlib.rmmap import mmap
+
+ def entry_point(argv):
+ try:
+ res = mmap(0, 1024)
+ except OSError:
+ return 0
+ return 1
+
+ exe = compile(entry_point)
+ pipe = subprocess.Popen([exe], stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ g = pipe.stdin
+ f = pipe.stdout
+ expect(f, g, "mmap", ARGS, OSError(1, "xyz"))
+ g.close()
+ tail = f.read()
+ f.close()
+ assert tail == ""
+ rescode = pipe.wait()
+ assert rescode == 0
+
class TestPrintedResults:
def run(self, entry_point, args, expected):
From fijal at codespeak.net Wed Mar 3 01:21:30 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 01:21:30 +0100 (CET)
Subject: [pypy-svn] r71681 - in pypy/trunk/pypy/module/pypyjit: . test
Message-ID: <20100303002130.5D068282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 01:21:28 2010
New Revision: 71681
Modified:
pypy/trunk/pypy/module/pypyjit/policy.py
pypy/trunk/pypy/module/pypyjit/test/test_policy.py
Log:
Look into functional. Most of these functions are not looked at since
they contain loops, but a couple like X_Range.descr_next are
Modified: pypy/trunk/pypy/module/pypyjit/policy.py
==============================================================================
--- pypy/trunk/pypy/module/pypyjit/policy.py (original)
+++ pypy/trunk/pypy/module/pypyjit/policy.py Wed Mar 3 01:21:28 2010
@@ -5,7 +5,8 @@
def look_inside_pypy_module(self, modname):
if (modname == '__builtin__.operation' or
modname == '__builtin__.abstractinst' or
- modname == '__builtin__.interp_classobj'):
+ modname == '__builtin__.interp_classobj' or
+ modname == '__builtin__.functional'):
return True
if '.' in modname:
Modified: pypy/trunk/pypy/module/pypyjit/test/test_policy.py
==============================================================================
--- pypy/trunk/pypy/module/pypyjit/test/test_policy.py (original)
+++ pypy/trunk/pypy/module/pypyjit/test/test_policy.py Wed Mar 3 01:21:28 2010
@@ -30,6 +30,7 @@
assert not pypypolicy.look_inside_pypy_module('posix.interp_expat')
assert pypypolicy.look_inside_pypy_module('__builtin__.operation')
assert pypypolicy.look_inside_pypy_module('__builtin__.abstractinst')
+ assert pypypolicy.look_inside_pypy_module('__builtin__.functional')
assert pypypolicy.look_inside_pypy_module('exceptions.interp_exceptions')
for modname in 'pypyjit', 'signal', 'micronumpy', 'math':
assert pypypolicy.look_inside_pypy_module(modname)
From fijal at codespeak.net Wed Mar 3 01:54:18 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 01:54:18 +0100 (CET)
Subject: [pypy-svn] r71682 - in pypy/trunk/pypy/jit/metainterp: . test
Message-ID: <20100303005418.A26F8282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 01:54:17 2010
New Revision: 71682
Modified:
pypy/trunk/pypy/jit/metainterp/executor.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
pypy/trunk/pypy/jit/metainterp/resoperation.py
pypy/trunk/pypy/jit/metainterp/test/test_basic.py
Log:
implement uint_floordiv
Modified: pypy/trunk/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/executor.py (original)
+++ pypy/trunk/pypy/jit/metainterp/executor.py Wed Mar 3 01:54:17 2010
@@ -31,6 +31,11 @@
z = llop.int_floordiv(lltype.Signed, box1.getint(), box2.getint())
return ConstInt(z)
+def do_uint_floordiv(cpu, box1, box2):
+ z = llop.uint_floordiv(lltype.Unsigned, r_uint(box1.getint()),
+ r_uint(box2.getint()))
+ return ConstInt(intmask(z))
+
def do_int_mod(cpu, box1, box2):
z = llop.int_mod(lltype.Signed, box1.getint(), box2.getint())
return ConstInt(z)
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Wed Mar 3 01:54:17 2010
@@ -206,6 +206,7 @@
'int_and', 'int_or', 'int_xor',
'int_rshift', 'int_lshift', 'uint_rshift',
'uint_lt', 'uint_le', 'uint_gt', 'uint_ge',
+ 'uint_floordiv',
'float_add', 'float_sub', 'float_mul', 'float_truediv',
'float_lt', 'float_le', 'float_eq',
'float_ne', 'float_gt', 'float_ge',
Modified: pypy/trunk/pypy/jit/metainterp/resoperation.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/resoperation.py (original)
+++ pypy/trunk/pypy/jit/metainterp/resoperation.py Wed Mar 3 01:54:17 2010
@@ -142,6 +142,7 @@
'INT_SUB/2',
'INT_MUL/2',
'INT_FLOORDIV/2',
+ 'UINT_FLOORDIV/2',
'INT_MOD/2',
'INT_AND/2',
'INT_OR/2',
Modified: pypy/trunk/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_basic.py Wed Mar 3 01:54:17 2010
@@ -200,6 +200,15 @@
res = self.interp_operations(f, [42])
assert res == 42
+ def test_uint_floordiv(self):
+ from pypy.rlib.rarithmetic import r_uint
+
+ def f(a, b):
+ return a/b
+
+ res = self.interp_operations(f, [r_uint(4), r_uint(3)])
+ assert res == 1
+
def test_direct_call(self):
def g(n):
return n + 2
From fijal at codespeak.net Wed Mar 3 02:07:05 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 02:07:05 +0100 (CET)
Subject: [pypy-svn] r71683 - in pypy/trunk/pypy/jit: backend/x86
metainterp/test
Message-ID: <20100303010705.0E5D6282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 02:07:04 2010
New Revision: 71683
Modified:
pypy/trunk/pypy/jit/backend/x86/assembler.py
pypy/trunk/pypy/jit/backend/x86/regalloc.py
pypy/trunk/pypy/jit/metainterp/test/test_executor.py
Log:
implement uint_floordiv
Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py Wed Mar 3 02:07:04 2010
@@ -718,6 +718,11 @@
genop_int_floordiv = genop_int_mod
+ def genop_uint_floordiv(self, op, arglocs, resloc):
+ self.mc.MOV(edx, eax)
+ self.mc.SAR(edx, imm(31))
+ self.mc.IDIV(ecx)
+
def genop_new_with_vtable(self, op, arglocs, result_loc):
assert result_loc is eax
loc_vtable = arglocs[-1]
Modified: pypy/trunk/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/regalloc.py Wed Mar 3 02:07:04 2010
@@ -510,6 +510,7 @@
def consider_int_floordiv(self, op):
self._consider_int_div_or_mod(op, eax, edx)
self.Perform(op, [eax, ecx], eax)
+ consider_uint_floordiv = consider_int_mod
def _consider_compop(self, op, guard_op):
vx = op.args[0]
Modified: pypy/trunk/pypy/jit/metainterp/test/test_executor.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_executor.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_executor.py Wed Mar 3 02:07:04 2010
@@ -130,7 +130,9 @@
(3, 3, 0)]),
(rop.UINT_RSHIFT, [(-1, 4, intmask(r_uint(-1) >> r_uint(4))),
( 1, 4, intmask(r_uint(1) >> r_uint(4))),
- ( 3, 3, 0)])
+ ( 3, 3, 0)]),
+ (rop.UINT_FLOORDIV, [(4, 3, intmask(r_uint(4) / r_uint(3))),
+ (1, -1, intmask(r_uint(1) / r_uint(-1)))])
]:
for x, y, z in testcases:
yield opnum, [x, y], z
From fijal at codespeak.net Wed Mar 3 02:19:04 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 02:19:04 +0100 (CET)
Subject: [pypy-svn] r71684 - pypy/extradoc/planning
Message-ID: <20100303011904.6C7A4282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 02:19:02 2010
New Revision: 71684
Modified:
pypy/extradoc/planning/jit.txt
Log:
a huge update
Modified: pypy/extradoc/planning/jit.txt
==============================================================================
--- pypy/extradoc/planning/jit.txt (original)
+++ pypy/extradoc/planning/jit.txt Wed Mar 3 02:19:02 2010
@@ -11,43 +11,48 @@
- think out looking into functions or not, based on arguments,
for example contains__Tuple should be unrolled if tuple is of constant
- length
+ length. HARD, blocked by the fact that we don't know constants soon enough
- look at example of storing small strings in large lists (any sane templating
engine would do it) and not spend all the time in
- _trace_and_drag_out_of_nursery
+ _trace_and_drag_out_of_nursery.
+ Requires thinking about card-marking GC, which is hard, postpone
- improve tracing/blackholing speed (?)
+ Essential, especially blackholing in translate.py, as well as html5lib.
- some guards will always fail if they ever start failing
(e.g. the class version tag). Do something more clever about it.
+ DONE?
Python interpreter:
-- goal: on average <=5 guards per original bytecode
+- goal: on average <=5 guards per original bytecode.
+ Almost achieved :-) pypy/jit/tool/otherviewer.py can view where we're
+ failing (red boxes out of jit-log-opt logging)
- put the class into the structure to get only one promote when using an
instance
-- look why module.x does two calls to _lookup_where
+- look why module.x does two calls to _lookup_where FIXED?
- this example: http://paste.pocoo.org/show/181319/
showcases a problem that works fine as long as you not present a
combination of oldstyle and newstyle classes. If you however present
a combination of old and newstyle classes (try modifying) things go
far slower and traces look bad.
+ DON'T DO THAT?
Benchmark Notes
----------------------------
- spitfire:
- - spends most of its time in subclass-of-list.append
- - does completely horrible hackish things that happen to be fast on CPython
- (i.e. calling locals() all the time)
- - see http://paste.pocoo.org/show/169366/ for the python code that spitfire
- produces for the template used in the benchmark
+ - it's an issue with GC, that's probably won't fix. On spitfire's small
+ benchmarks we're either matching CPython or are faster (if using cStringIO)
- html5lib:
+ - we're faster (a bit) than CPython on a long enough run. blackholing is
+ an issue there.
- slowness seems to be mostly the fault of PyUnicode_DecodeCharmap in
module/_codecs/app_codecs.py. Are such things not jitted?
- the tokenizer uses regular expressions and generators, which probably
@@ -55,11 +60,12 @@
- spambayes
- uses regular expressions and generators a lot
+ - regexes are 80% of runtime of long-enough run
- ai
- the slowness is the fault of generators and generator expressions
- many of the generator expressions are a bit stupid (like tuple())
-
+ WON'T FIX, maybe?
JIT-related Release Tasks
@@ -70,10 +76,8 @@
scope of this section)
wishlist:
-- improve on predictability: don't trace into signals ... but produce just a
- conditional call (or just abort the trace)
- the checks that look whether profiling/tracing in the Python interpreter is
- enabled look expensive. Do we want to do something about them?
+ enabled look expensive. Do we want to do something about them? DONE?
@@ -81,9 +85,9 @@
META
-----
-- stability!
+- stability! DONE?
-- keep test coverage in check
+- keep test coverage in check DONE?
- prevent too much method and fields demoting in the jit
@@ -98,19 +102,11 @@
explosion
- tracing aggressively will put pressure on the speed of tracing
- what should we do about recursive calls?
-- connecting compiled loops accross a call?
things we know are missing
---------------------------
-backend:
-- speed of backend?
-
-Python interpreter:
-- lookups of various kinds
-- calls
-
tests:
- find a test for r64742 (JitException capture)
@@ -118,6 +114,7 @@
-----------------
Goal: be somehow faster than CPython in real programs
+ actually, DONE!
Benchmarks:
they live at svn+ssh://codespeak.net/svn/pypy/benchmarks
@@ -133,15 +130,4 @@
memory usage
------------
-- we use too much memory during jitting. Notably of the following
- types (in decreasing order of total size, for Pystone):
- XXX is this still relevant?
- - rpy_string
- - GcArray of AbstractValue (unknown if fixedsize or not)
- - DoneWithThisFrameRef
- - dict {AbstractValue: SHORT}
- - GcArray of ResOperation
- - resizable list of AbstractValue
- - ResOperation
- - ResumeGuardDescr
- - ConstInt
+part here was out of date a lot.
From fijal at codespeak.net Wed Mar 3 03:27:16 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:27:16 +0100 (CET)
Subject: [pypy-svn] r71685 - pypy/trunk/pypy/module/_sre
Message-ID: <20100303022716.E5B23282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:27:12 2010
New Revision: 71685
Modified:
pypy/trunk/pypy/module/_sre/interp_sre.py
Log:
Avoid warning during annotation
Modified: pypy/trunk/pypy/module/_sre/interp_sre.py
==============================================================================
--- pypy/trunk/pypy/module/_sre/interp_sre.py (original)
+++ pypy/trunk/pypy/module/_sre/interp_sre.py Wed Mar 3 03:27:12 2010
@@ -91,6 +91,11 @@
def w_reset(self):
self.reset()
+ def create_regs(self, group_count):
+ """ Purely abstract method
+ """
+ raise NotImplementedError
+
def w_create_regs(self, group_count):
"""Creates a tuple of index pairs representing matched groups, a format
that's convenient for SRE_Match."""
From fijal at codespeak.net Wed Mar 3 03:30:50 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:30:50 +0100 (CET)
Subject: [pypy-svn] r71686 - pypy/trunk/pypy/module/thread
Message-ID: <20100303023050.91701282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:30:48 2010
New Revision: 71686
Modified:
pypy/trunk/pypy/module/thread/os_thread.py
Log:
Avoid warnings during rtyping
Modified: pypy/trunk/pypy/module/thread/os_thread.py
==============================================================================
--- pypy/trunk/pypy/module/thread/os_thread.py (original)
+++ pypy/trunk/pypy/module/thread/os_thread.py Wed Mar 3 03:30:48 2010
@@ -62,6 +62,8 @@
# The following lock is held whenever the fields
# 'bootstrapper.w_callable' and 'bootstrapper.args' are in use.
lock = None
+ args = None
+ w_callable = None
def setup(space):
if bootstrapper.lock is None:
From fijal at codespeak.net Wed Mar 3 03:36:36 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:36:36 +0100 (CET)
Subject: [pypy-svn] r71687 - pypy/trunk/pypy/jit/metainterp
Message-ID: <20100303023636.044ED282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:36:34 2010
New Revision: 71687
Modified:
pypy/trunk/pypy/jit/metainterp/optimizeopt.py
Log:
Silence warning
Modified: pypy/trunk/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeopt.py Wed Mar 3 03:36:34 2010
@@ -819,6 +819,7 @@
value = self.getvalue(op.args[0])
if value.is_virtual():
# optimizefindnode should ensure that fieldvalue is found
+ assert isinstance(value, VirtualValue)
fieldvalue = value.getfield(op.descr, None)
assert fieldvalue is not None
self.make_equal_to(op.result, fieldvalue)
From fijal at codespeak.net Wed Mar 3 03:38:01 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:38:01 +0100 (CET)
Subject: [pypy-svn] r71688 - pypy/trunk/pypy/jit/backend/llgraph
Message-ID: <20100303023801.88DE1282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:37:56 2010
New Revision: 71688
Modified:
pypy/trunk/pypy/jit/backend/llgraph/llimpl.py
Log:
fix test
Modified: pypy/trunk/pypy/jit/backend/llgraph/llimpl.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llgraph/llimpl.py (original)
+++ pypy/trunk/pypy/jit/backend/llgraph/llimpl.py Wed Mar 3 03:37:56 2010
@@ -90,6 +90,7 @@
'uint_ge' : (('int', 'int'), 'bool'),
'uint_xor' : (('int', 'int'), 'int'),
'uint_rshift' : (('int', 'int'), 'int'),
+ 'uint_floordiv' : (('int', 'int'), 'int'),
'float_add' : (('float', 'float'), 'float'),
'float_sub' : (('float', 'float'), 'float'),
'float_mul' : (('float', 'float'), 'float'),
From fijal at codespeak.net Wed Mar 3 03:39:21 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:39:21 +0100 (CET)
Subject: [pypy-svn] r71689 - pypy/trunk/pypy/jit/metainterp
Message-ID: <20100303023921.D312C282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:39:19 2010
New Revision: 71689
Modified:
pypy/trunk/pypy/jit/metainterp/optimizeopt.py
Log:
Improve assert
Modified: pypy/trunk/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeopt.py Wed Mar 3 03:39:19 2010
@@ -819,7 +819,7 @@
value = self.getvalue(op.args[0])
if value.is_virtual():
# optimizefindnode should ensure that fieldvalue is found
- assert isinstance(value, VirtualValue)
+ assert isinstance(value, AbstractVirtualValue)
fieldvalue = value.getfield(op.descr, None)
assert fieldvalue is not None
self.make_equal_to(op.result, fieldvalue)
From fijal at codespeak.net Wed Mar 3 03:41:38 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:41:38 +0100 (CET)
Subject: [pypy-svn] r71690 - in pypy/trunk/pypy/jit: backend backend/llgraph
backend/llsupport metainterp
Message-ID: <20100303024138.839B1282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:41:36 2010
New Revision: 71690
Modified:
pypy/trunk/pypy/jit/backend/llgraph/runner.py
pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
pypy/trunk/pypy/jit/backend/model.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
Log:
Store a base class of calldescr on CPU, hence avoiding demoting method
get_extra_info up to abstract descr
Modified: pypy/trunk/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/llgraph/runner.py Wed Mar 3 03:41:36 2010
@@ -74,6 +74,8 @@
class BaseCPU(model.AbstractCPU):
supports_floats = True
+ CallDescrClass = Descr
+
def __init__(self, rtyper, stats=None, opts=None,
translate_support_code=False,
annmixlevel=None, gcdescr=None):
Modified: pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/llmodel.py Wed Mar 3 03:41:36 2010
@@ -17,6 +17,8 @@
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
+ CallDescrClass = BaseCallDescr
+
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
assert type(opts) is not bool
Modified: pypy/trunk/pypy/jit/backend/model.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/model.py (original)
+++ pypy/trunk/pypy/jit/backend/model.py Wed Mar 3 03:41:36 2010
@@ -8,6 +8,8 @@
portal_calldescr = None
done_with_this_frame_int_v = -1
+ CallDescrClass = None # a base class for all CallDescrs
+
def __init__(self):
self.fail_descr_list = []
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Wed Mar 3 03:41:36 2010
@@ -1066,6 +1066,7 @@
return self.metainterp.assert_no_exception()
def do_residual_call(self, argboxes, descr, exc):
+ assert isinstance(descr, self.metainterp.cpu.CallDescrClass)
effectinfo = descr.get_extra_info()
if effectinfo is None or effectinfo.forces_virtual_or_virtualizable:
# residual calls require attention to keep virtualizables in-sync
From fijal at codespeak.net Wed Mar 3 03:50:30 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:50:30 +0100 (CET)
Subject: [pypy-svn] r71691 - pypy/branch/cleanup-warnings
Message-ID: <20100303025030.7F5B7282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:50:28 2010
New Revision: 71691
Added:
pypy/branch/cleanup-warnings/
- copied from r71690, pypy/trunk/
Log:
A branch to clean up warnings
From fijal at codespeak.net Wed Mar 3 03:51:09 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:51:09 +0100 (CET)
Subject: [pypy-svn] r71692 - pypy/branch/asm-profile
Message-ID: <20100303025109.D0C80282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:51:04 2010
New Revision: 71692
Removed:
pypy/branch/asm-profile/
Log:
This branch went nowhere so far
From fijal at codespeak.net Wed Mar 3 03:53:46 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 03:53:46 +0100 (CET)
Subject: [pypy-svn] r71693 - in pypy/trunk/pypy/jit/backend: . llgraph
llsupport
Message-ID: <20100303025346.DD6F9282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 03:53:44 2010
New Revision: 71693
Modified:
pypy/trunk/pypy/jit/backend/llgraph/runner.py
pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
pypy/trunk/pypy/jit/backend/model.py
Log:
Revert 71690, will work on branch for that (it did not work that simple way)
Modified: pypy/trunk/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/llgraph/runner.py Wed Mar 3 03:53:44 2010
@@ -74,8 +74,6 @@
class BaseCPU(model.AbstractCPU):
supports_floats = True
- CallDescrClass = Descr
-
def __init__(self, rtyper, stats=None, opts=None,
translate_support_code=False,
annmixlevel=None, gcdescr=None):
Modified: pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/llmodel.py Wed Mar 3 03:53:44 2010
@@ -17,8 +17,6 @@
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
- CallDescrClass = BaseCallDescr
-
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
assert type(opts) is not bool
Modified: pypy/trunk/pypy/jit/backend/model.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/model.py (original)
+++ pypy/trunk/pypy/jit/backend/model.py Wed Mar 3 03:53:44 2010
@@ -8,8 +8,6 @@
portal_calldescr = None
done_with_this_frame_int_v = -1
- CallDescrClass = None # a base class for all CallDescrs
-
def __init__(self):
self.fail_descr_list = []
From fijal at codespeak.net Wed Mar 3 04:19:11 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 04:19:11 +0100 (CET)
Subject: [pypy-svn] r71694 - pypy/trunk/pypy/jit/metainterp
Message-ID: <20100303031911.10489282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 04:19:07 2010
New Revision: 71694
Modified:
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
Log:
This belongs to previous commit
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Wed Mar 3 04:19:07 2010
@@ -1066,7 +1066,6 @@
return self.metainterp.assert_no_exception()
def do_residual_call(self, argboxes, descr, exc):
- assert isinstance(descr, self.metainterp.cpu.CallDescrClass)
effectinfo = descr.get_extra_info()
if effectinfo is None or effectinfo.forces_virtual_or_virtualizable:
# residual calls require attention to keep virtualizables in-sync
From fijal at codespeak.net Wed Mar 3 04:19:44 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 04:19:44 +0100 (CET)
Subject: [pypy-svn] r71695 - in pypy/trunk/pypy/jit: backend/x86
metainterp/test
Message-ID: <20100303031944.76F2D282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 04:19:42 2010
New Revision: 71695
Modified:
pypy/trunk/pypy/jit/backend/x86/assembler.py
pypy/trunk/pypy/jit/backend/x86/regalloc.py
pypy/trunk/pypy/jit/metainterp/test/test_executor.py
Log:
Clearly I should read intel manuals better. Improve tests, fix uint_floordiv
Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py Wed Mar 3 04:19:42 2010
@@ -719,9 +719,8 @@
genop_int_floordiv = genop_int_mod
def genop_uint_floordiv(self, op, arglocs, resloc):
- self.mc.MOV(edx, eax)
- self.mc.SAR(edx, imm(31))
- self.mc.IDIV(ecx)
+ self.mc.XOR(edx, edx)
+ self.mc.DIV(ecx)
def genop_new_with_vtable(self, op, arglocs, result_loc):
assert result_loc is eax
Modified: pypy/trunk/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/regalloc.py Wed Mar 3 04:19:42 2010
@@ -510,7 +510,8 @@
def consider_int_floordiv(self, op):
self._consider_int_div_or_mod(op, eax, edx)
self.Perform(op, [eax, ecx], eax)
- consider_uint_floordiv = consider_int_mod
+
+ consider_uint_floordiv = consider_int_floordiv
def _consider_compop(self, op, guard_op):
vx = op.args[0]
Modified: pypy/trunk/pypy/jit/metainterp/test/test_executor.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_executor.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_executor.py Wed Mar 3 04:19:42 2010
@@ -132,7 +132,14 @@
( 1, 4, intmask(r_uint(1) >> r_uint(4))),
( 3, 3, 0)]),
(rop.UINT_FLOORDIV, [(4, 3, intmask(r_uint(4) / r_uint(3))),
- (1, -1, intmask(r_uint(1) / r_uint(-1)))])
+ (1, -1, intmask(r_uint(1) / r_uint(-1))),
+ (110, 3, 36),
+ (-110, 3, intmask(r_uint(-110) / r_uint(3))),
+ (110, -3, intmask(r_uint(110) / r_uint(-3))),
+ (-110, -3, intmask(r_uint(-110) / r_uint(-3))),
+ (-110, -1, intmask(r_uint(-110) / r_uint(-1))),
+ (minint, 1, intmask(r_uint(minint) / r_uint(1))),
+ (-87, -87, intmask(r_uint(-87) / r_uint(-87)))])
]:
for x, y, z in testcases:
yield opnum, [x, y], z
From fijal at codespeak.net Wed Mar 3 04:22:04 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 04:22:04 +0100 (CET)
Subject: [pypy-svn] r71696 - in pypy/branch/cleanup-warnings/pypy/jit:
backend backend/llsupport backend/test metainterp
Message-ID: <20100303032204.C8C43282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 04:22:03 2010
New Revision: 71696
Modified:
pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py
Log:
Move mutable stuff into CPUMutableContainer and _freeze_ the CPU. Should
speed up stuff a bit (maybe) as well
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py Wed Mar 3 04:22:03 2010
@@ -14,6 +14,9 @@
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr, BaseCallDescr
+class CPUMutableContainer(object):
+ _overflow_flag = False
+
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
@@ -21,6 +24,7 @@
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
+ self.mutable = CPUMutableContainer()
assert type(opts) is not bool
self.opts = opts
@@ -52,12 +56,22 @@
self._setup_on_leave_jitted_translated()
else:
self._setup_on_leave_jitted_untranslated()
+ self.class_sizes = {}
+
+ def set_overflow_flag(self, val):
+ self.mutable._overflow_flag = val
+
+ def get_overflow_error(self):
+ return self.mutable._overflow_flag
+
+ def _freeze_(self):
+ return True
def setup(self):
pass
def set_class_sizes(self, class_sizes):
- self.class_sizes = class_sizes
+ self.class_sizes.update(class_sizes)
def _setup_prebuilt_error(self, prefix, Class):
if self.rtyper is not None: # normal case
@@ -107,8 +121,8 @@
v_i = _exception_emulator[1]
_exception_emulator[0] = 0
_exception_emulator[1] = 0
- self.saved_exception = tp_i
- self.saved_exc_value = self._cast_int_to_gcref(v_i)
+ self.mutable.saved_exception = tp_i
+ self.mutable.saved_exc_value = self._cast_int_to_gcref(v_i)
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -135,8 +149,8 @@
# from now on, the state is again consistent -- no more RPython
# exception is set. The following code produces a write barrier
# in the assignment to self.saved_exc_value, as needed.
- self.saved_exception = exception
- self.saved_exc_value = exc_value
+ self.mutable.saved_exception = exception
+ self.mutable.saved_exc_value = exc_value
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -174,14 +188,14 @@
return rffi.cast(lltype.Signed, f)
def get_exception(self):
- return self.saved_exception
+ return self.mutable.saved_exception
def get_exc_value(self):
- return self.saved_exc_value
+ return self.mutable.saved_exc_value
def clear_exception(self):
- self.saved_exception = 0
- self.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
+ self.mutable.saved_exception = 0
+ self.mutable.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
# ------------------- helpers and descriptions --------------------
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/model.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/model.py Wed Mar 3 04:22:03 2010
@@ -10,6 +10,8 @@
CallDescrClass = None # a base class for all CallDescrs
+ _overflow_flag = False
+
def __init__(self):
self.fail_descr_list = []
@@ -115,6 +117,12 @@
def get_zero_division_error(self):
raise NotImplementedError
+ def get_overflow_flag(self):
+ return self._overflow_flag
+
+ def set_overflow_flag(self, val):
+ self._overflow_flag = val
+
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py Wed Mar 3 04:22:03 2010
@@ -264,8 +264,8 @@
fail_subset = builder.subset_of_intvars(r)
original_intvars = builder.intvars[:]
super(AbstractOvfOperation, self).produce_into(builder, r)
- if builder.cpu._overflow_flag: # overflow detected
- del builder.cpu._overflow_flag
+ if builder.cpu.get_overflow_flag(): # overflow detected
+ builder.cpu.set_overflow_flag(False)
op = ResOperation(rop.GUARD_OVERFLOW, [], None)
# the overflowed result should not be used any more, but can
# be used on the failure path: recompute fail_subset including
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py Wed Mar 3 04:22:03 2010
@@ -145,7 +145,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
def do_int_sub_ovf(cpu, box1, box2):
@@ -158,7 +158,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
def do_int_mul_ovf(cpu, box1, box2):
@@ -171,7 +171,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
# ----------
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py Wed Mar 3 04:22:03 2010
@@ -1899,8 +1899,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu._overflow_flag:
- self.cpu._overflow_flag = False
+ if self.cpu.get_overflow_flag():
+ self.cpu.set_overflow_flag(False)
frame.generate_guard(frame.pc, rop.GUARD_OVERFLOW, None, [])
return self.raise_overflow_error()
else:
From fijal at codespeak.net Wed Mar 3 05:00:56 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 05:00:56 +0100 (CET)
Subject: [pypy-svn] r71697 - in pypy/branch/cleanup-warnings/pypy/jit:
backend backend/llgraph backend/llsupport metainterp
Message-ID: <20100303040056.57396282BD5@codespeak.net>
Author: fijal
Date: Wed Mar 3 05:00:52 2010
New Revision: 71697
Modified:
pypy/branch/cleanup-warnings/pypy/jit/backend/llgraph/runner.py
pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizefindnode.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py
Log:
Fight a bit harder with annotation warnings - I think they're mostly gone
by now
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/llgraph/runner.py Wed Mar 3 05:00:52 2010
@@ -75,6 +75,8 @@
supports_floats = True
CallDescrClass = Descr
+ ArrayDescrClass = Descr
+ FieldDescrClass = Descr
def __init__(self, rtyper, stats=None, opts=None,
translate_support_code=False,
@@ -725,6 +727,8 @@
def get_extra_info(self):
return self.extrainfo
+OOtypeCPU.CallDescrClass = StaticMethDescr
+
class MethDescr(history.AbstractMethDescr):
callmeth = None
@@ -844,6 +848,8 @@
def __repr__(self):
return '' % self.fieldname
+OOtypeCPU.FieldDescrClass = FieldDescr
+OOtypeCPU.ArrayDescrClass = TypeDescr
# ____________________________________________________________
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py Wed Mar 3 05:00:52 2010
@@ -21,6 +21,8 @@
from pypy.jit.metainterp.typesystem import llhelper as ts
CallDescrClass = BaseCallDescr
+ FieldDescrClass = BaseFieldDescr
+ ArrayDescrClass = BaseArrayDescr
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/model.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/model.py Wed Mar 3 05:00:52 2010
@@ -9,6 +9,8 @@
done_with_this_frame_int_v = -1
CallDescrClass = None # a base class for all CallDescrs
+ ArrayDescrClass = None
+ FieldDescrClass = None
_overflow_flag = False
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizefindnode.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizefindnode.py Wed Mar 3 05:00:52 2010
@@ -193,7 +193,9 @@
return # var-sized arrays are not virtual
arraynode = InstanceNode()
arraynode.arraysize = lengthbox.getint()
- arraynode.arraydescr = op.descr
+ descr = op.descr
+ assert isinstance(descr, self.cpu.ArrayDescrClass)
+ arraynode.arraydescr = descr
self.nodes[op.result] = arraynode
def find_nodes_ARRAYLEN_GC(self, op):
@@ -223,7 +225,7 @@
fieldnode.mark_escaped()
return # nothing to be gained from tracking the field
field = op.descr
- assert isinstance(field, AbstractValue)
+ assert isinstance(field, self.cpu.FieldDescrClass)
if instnode.curfields is None:
instnode.curfields = {}
instnode.curfields[field] = fieldnode
@@ -234,7 +236,7 @@
if instnode.escaped:
return # nothing to be gained from tracking the field
field = op.descr
- assert isinstance(field, AbstractValue)
+ assert isinstance(field, self.cpu.FieldDescrClass)
if instnode.curfields is not None and field in instnode.curfields:
fieldnode = instnode.curfields[field]
elif instnode.origfields is not None and field in instnode.origfields:
@@ -384,6 +386,7 @@
# uninitialized after a guard failure.
node = self.node_fromstart
specnode = self.intersect(node, d[ofs])
+ assert isinstance(ofs, self.cpu.FieldDescrClass)
fields.append((ofs, specnode))
return fields
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py Wed Mar 3 05:00:52 2010
@@ -172,6 +172,8 @@
def _make_virtual(self, modifier):
raise NotImplementedError("abstract base")
+ def _really_force(self):
+ raise NotImplementedError("abstract base")
def get_fielddescrlist_cache(cpu):
if not hasattr(cpu, '_optimizeopt_fielddescrlist_cache'):
@@ -358,7 +360,7 @@
def _setup_virtual_node_1(self, optimizer, box):
raise NotImplementedError
def teardown_virtual_node(self, optimizer, value, newexitargs):
- assert value.is_virtual()
+ assert isinstance(value, AbstractVirtualStructValue)
for ofs, subspecnode in self.fields:
subvalue = value.getfield(ofs, optimizer.new_const(ofs))
subspecnode.teardown_virtual_node(optimizer, subvalue, newexitargs)
@@ -381,7 +383,7 @@
vvalueitem = optimizer.getvalue(subbox)
vvalue.setitem(index, vvalueitem)
def teardown_virtual_node(self, optimizer, value, newexitargs):
- assert value.is_virtual()
+ assert isinstance(value, VArrayValue)
for index in range(len(self.items)):
subvalue = value.getitem(index)
subspecnode = self.items[index]
@@ -455,6 +457,7 @@
return vvalue
def make_varray(self, arraydescr, size, box, source_op=None):
+ assert isinstance(arraydescr, self.cpu.ArrayDescrClass)
vvalue = VArrayValue(self, arraydescr, size, box, source_op)
self.make_equal_to(box, vvalue)
return vvalue
@@ -819,7 +822,7 @@
value = self.getvalue(op.args[0])
if value.is_virtual():
# optimizefindnode should ensure that fieldvalue is found
- assert isinstance(value, AbstractVirtualValue)
+ assert isinstance(value, AbstractVirtualStructValue)
fieldvalue = value.getfield(op.descr, None)
assert fieldvalue is not None
self.make_equal_to(op.result, fieldvalue)
@@ -835,6 +838,7 @@
value = self.getvalue(op.args[0])
fieldvalue = self.getvalue(op.args[1])
if value.is_virtual():
+ assert isinstance(value, AbstractVirtualStructValue)
value.setfield(op.descr, fieldvalue)
else:
value.ensure_nonnull()
@@ -861,6 +865,7 @@
def optimize_ARRAYLEN_GC(self, op):
value = self.getvalue(op.args[0])
if value.is_virtual():
+ assert isinstance(value, VArrayValue)
self.make_constant_int(op.result, value.getlength())
else:
value.ensure_nonnull()
@@ -871,6 +876,7 @@
if value.is_virtual():
indexbox = self.get_constant_box(op.args[1])
if indexbox is not None:
+ assert isinstance(value, VArrayValue)
itemvalue = value.getitem(indexbox.getint())
self.make_equal_to(op.result, itemvalue)
return
@@ -884,6 +890,7 @@
def optimize_SETARRAYITEM_GC(self, op):
value = self.getvalue(op.args[0])
if value.is_virtual():
+ assert isinstance(value, VArrayValue)
indexbox = self.get_constant_box(op.args[1])
if indexbox is not None:
value.setitem(indexbox.getint(), self.getvalue(op.args[2]))
@@ -1032,7 +1039,9 @@
if opnum == rop.CALL_ASSEMBLER:
effectinfo = None
else:
- effectinfo = op.descr.get_extra_info()
+ descr = op.descr
+ assert isinstance(descr, self.optimizer.cpu.CallDescrClass)
+ effectinfo = descr.get_extra_info()
if effectinfo is not None:
# XXX we can get the wrong complexity here, if the lists
# XXX stored on effectinfo are large
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py Wed Mar 3 05:00:52 2010
@@ -396,7 +396,8 @@
return tagged_list_eq(self.fieldnums, fieldnums)
def set_content(self, fieldnums):
self.fieldnums = fieldnums
-
+ def debug_prints(self):
+ raise NotImplementedError
class AbstractVirtualStructInfo(AbstractVirtualInfo):
def __init__(self, fielddescrs):
From fijal at codespeak.net Wed Mar 3 05:25:16 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 05:25:16 +0100 (CET)
Subject: [pypy-svn] r71698 - in pypy/branch/cleanup-warnings/pypy/jit:
backend/x86 metainterp
Message-ID: <20100303042516.D1636282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 05:25:13 2010
New Revision: 71698
Modified:
pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py
pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
Log:
Store some attributes by default, so rtyper won't complain
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py Wed Mar 3 05:25:13 2010
@@ -100,6 +100,7 @@
mc2 = None
mc_size = MachineCodeBlockWrapper.MC_DEFAULT_SIZE
_float_constants = None
+ _regalloc = None
def __init__(self, cpu, translate_support_code=False,
failargs_limit=1000):
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py Wed Mar 3 05:25:13 2010
@@ -4,7 +4,7 @@
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
from pypy.rpython.llinterp import LLInterpreter
from pypy.rlib.objectmodel import we_are_translated
-from pypy.jit.metainterp import history
+from pypy.jit.metainterp import history, compile
from pypy.jit.backend.x86.assembler import Assembler386
from pypy.jit.backend.x86.regalloc import FORCE_INDEX_OFS
from pypy.jit.backend.x86.profagent import ProfileAgent
@@ -141,3 +141,19 @@
import pypy.jit.metainterp.executor
pypy.jit.metainterp.executor.make_execute_list(CPU)
+
+# silence warnings
+
+history.LoopToken._x86_param_depth = 0
+history.LoopToken._x86_arglocs = (None, None)
+history.LoopToken._x86_frame_depth = 0
+history.LoopToken._x86_bootstrap_code = 0
+history.LoopToken._x86_direct_bootstrap_code = 0
+history.LoopToken._x86_failure_recovery_bytecode = 0
+history.LoopToken._x86_adr_jump_offset = 0
+history.LoopToken._x86_loop_code = 0
+history.LoopToken._x86_current_depths = (0, 0)
+
+compile._DoneWithThisFrameDescr._x86_current_depths = (0, 0)
+compile._DoneWithThisFrameDescr._x86_failure_recovery_bytecode = 0
+compile._DoneWithThisFrameDescr._x86_adr_jump_offset = 0
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py Wed Mar 3 05:25:13 2010
@@ -685,6 +685,7 @@
terminating = False # see TerminatingLoopToken in compile.py
# specnodes = ...
# and more data specified by the backend when the loop is compiled
+ number = 0
def __init__(self, number=0):
self.number = number
@@ -864,6 +865,7 @@
compiled_count = 0
enter_count = 0
aborted_count = 0
+ history = None
def __init__(self):
self.loops = []
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py Wed Mar 3 05:25:13 2010
@@ -47,6 +47,7 @@
last_guard_index = -1
level = LEVEL_UNKNOWN
+ known_class = None
def __init__(self, box):
self.box = box
From fijal at codespeak.net Wed Mar 3 06:59:37 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 06:59:37 +0100 (CET)
Subject: [pypy-svn] r71699 - pypy/trunk/pypy/module/pypyjit/test
Message-ID: <20100303055937.A6716282BD5@codespeak.net>
Author: fijal
Date: Wed Mar 3 06:59:30 2010
New Revision: 71699
Modified:
pypy/trunk/pypy/module/pypyjit/test/test_pypy_c.py
Log:
fix the test (situation did improve)
Modified: pypy/trunk/pypy/module/pypyjit/test/test_pypy_c.py
==============================================================================
--- pypy/trunk/pypy/module/pypyjit/test/test_pypy_c.py (original)
+++ pypy/trunk/pypy/module/pypyjit/test/test_pypy_c.py Wed Mar 3 06:59:30 2010
@@ -474,7 +474,6 @@
''', 143, ([1000], 1000 * 999 / 2))
bytecode, = self.get_by_bytecode("BINARY_SUBSCR")
assert bytecode.get_opnames("guard") == [
- "guard_isnull", # check that the range list is not forced
"guard_false", # check that the index is >= 0
"guard_false", # check that the index is lower than the current length
]
From arigo at codespeak.net Wed Mar 3 10:12:48 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 10:12:48 +0100 (CET)
Subject: [pypy-svn] r71700 - pypy/build/bot2/pypybuildbot
Message-ID: <20100303091248.32604282BD4@codespeak.net>
Author: arigo
Date: Wed Mar 3 10:12:44 2010
New Revision: 71700
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
List cobra too. Wyvern died.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Wed Mar 3 10:12:44 2010
@@ -122,7 +122,7 @@
'builders': [
{"name": LINUX32,
- "slavenames": ["wyvern"],
+ "slavenames": ["wyvern", "cobra"],
"builddir": LINUX32,
"factory": pypyOwnTestFactory,
"category": 'own'
@@ -176,7 +176,7 @@
'category' : 'jit',
},
{"name": JITONLYLINUX32,
- "slavenames": ["wyvern"],
+ "slavenames": ["wyvern", "cobra"],
"builddir": JITONLYLINUX32,
"factory": pypyJitOnlyOwnTestFactory,
"category": 'own'
From cfbolz at codespeak.net Wed Mar 3 10:45:24 2010
From: cfbolz at codespeak.net (cfbolz at codespeak.net)
Date: Wed, 3 Mar 2010 10:45:24 +0100 (CET)
Subject: [pypy-svn] r71702 - pypy/extradoc/planning
Message-ID: <20100303094524.1AA4E282BD4@codespeak.net>
Author: cfbolz
Date: Wed Mar 3 10:45:22 2010
New Revision: 71702
Modified:
pypy/extradoc/planning/jit.txt
Log:
clean up a bit more, some of these things are not done, and some are meta-points
that I want to keep as remainders
Modified: pypy/extradoc/planning/jit.txt
==============================================================================
--- pypy/extradoc/planning/jit.txt (original)
+++ pypy/extradoc/planning/jit.txt Wed Mar 3 10:45:22 2010
@@ -18,12 +18,11 @@
_trace_and_drag_out_of_nursery.
Requires thinking about card-marking GC, which is hard, postpone
-- improve tracing/blackholing speed (?)
+- improve tracing/blackholing speed
Essential, especially blackholing in translate.py, as well as html5lib.
- some guards will always fail if they ever start failing
(e.g. the class version tag). Do something more clever about it.
- DONE?
Python interpreter:
@@ -34,8 +33,6 @@
- put the class into the structure to get only one promote when using an
instance
-- look why module.x does two calls to _lookup_where FIXED?
-
- this example: http://paste.pocoo.org/show/181319/
showcases a problem that works fine as long as you not present a
combination of oldstyle and newstyle classes. If you however present
@@ -77,7 +74,7 @@
wishlist:
- the checks that look whether profiling/tracing in the Python interpreter is
- enabled look expensive. Do we want to do something about them? DONE?
+ enabled look expensive. Do we want to do something about them?
@@ -85,9 +82,9 @@
META
-----
-- stability! DONE?
+- stability!
-- keep test coverage in check DONE?
+- keep test coverage in check
- prevent too much method and fields demoting in the jit
@@ -119,15 +116,10 @@
Benchmarks:
they live at svn+ssh://codespeak.net/svn/pypy/benchmarks
+
ootype discussion
------------------
- try to unify interfaces to make doing the right thing for ootype easier
- different constraints for different groups of people
- what to do with ootype jit support after Anto finished his PhD?
-
-
-memory usage
-------------
-
-part here was out of date a lot.
From arigo at codespeak.net Wed Mar 3 10:47:50 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 10:47:50 +0100 (CET)
Subject: [pypy-svn] r71703 - pypy/trunk/pypy/doc
Message-ID: <20100303094750.4704E282BE0@codespeak.net>
Author: arigo
Date: Wed Mar 3 10:47:47 2010
New Revision: 71703
Modified:
pypy/trunk/pypy/doc/getting-started-python.txt
Log:
Add "as of March 2010".
Modified: pypy/trunk/pypy/doc/getting-started-python.txt
==============================================================================
--- pypy/trunk/pypy/doc/getting-started-python.txt (original)
+++ pypy/trunk/pypy/doc/getting-started-python.txt Wed Mar 3 10:47:47 2010
@@ -67,8 +67,8 @@
possibly replacing ``--opt=jit`` with another `optimization level`_
of your choice like ``--opt=2`` if you do not want the included JIT
- compiler. (The default level so far is 2. Do not use ``--opt=jit``
- on something else than Intel **32-bit** machines.)
+ compiler. (As of March 2010, the default level is ``--opt=2``, and
+ ``--opt=jit`` requires an Intel **32-bit** environment.)
.. _`optimization level`: config/opt.html
From arigo at codespeak.net Wed Mar 3 10:54:51 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 10:54:51 +0100 (CET)
Subject: [pypy-svn] r71704 - pypy/extradoc/planning
Message-ID: <20100303095451.8B55E282BD4@codespeak.net>
Author: arigo
Date: Wed Mar 3 10:54:49 2010
New Revision: 71704
Modified:
pypy/extradoc/planning/jit.txt
Log:
Mention branch/guard-value-counting-2.
Modified: pypy/extradoc/planning/jit.txt
==============================================================================
--- pypy/extradoc/planning/jit.txt (original)
+++ pypy/extradoc/planning/jit.txt Wed Mar 3 10:54:49 2010
@@ -23,6 +23,8 @@
- some guards will always fail if they ever start failing
(e.g. the class version tag). Do something more clever about it.
+ (already done a hack that helps: don't compile more guard_value's
+ if the value guarded for keeps changing fast enough: r71527)
Python interpreter:
From arigo at codespeak.net Wed Mar 3 11:28:34 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 11:28:34 +0100 (CET)
Subject: [pypy-svn] r71705 - pypy/build/bot2/pypybuildbot
Message-ID: <20100303102834.253F4282BD4@codespeak.net>
Author: arigo
Date: Wed Mar 3 11:28:32 2010
New Revision: 71705
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
While we are having troubles with both wyvern and cobra,
use bigdogvm1 for all builds.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Wed Mar 3 11:28:32 2010
@@ -122,7 +122,7 @@
'builders': [
{"name": LINUX32,
- "slavenames": ["wyvern", "cobra"],
+ "slavenames": ["bigdogvm1"],
"builddir": LINUX32,
"factory": pypyOwnTestFactory,
"category": 'own'
@@ -134,19 +134,19 @@
"category": 'mac'
},
{"name": APPLVLLINUX32,
- "slavenames": ["wyvern", "cobra"],
+ "slavenames": ["bigdogvm1"],
"builddir": APPLVLLINUX32,
"factory": pypyTranslatedAppLevelTestFactory,
'category': 'applevel'
},
{"name": STACKLESSAPPLVLLINUX32,
- "slavenames": ["wyvern", "cobra"],
+ "slavenames": ["bigdogvm1"],
"builddir": STACKLESSAPPLVLLINUX32,
"factory": pypyStacklessTranslatedAppLevelTestFactory,
"category": 'stackless'
},
{"name": OJITLINUX32,
- "slavenames": ["wyvern", "cobra"],
+ "slavenames": ["bigdogvm1"],
"builddir": OJITLINUX32,
"factory": pypy_OjitTranslatedTestFactory,
"category": 'applevel'
@@ -176,7 +176,7 @@
'category' : 'jit',
},
{"name": JITONLYLINUX32,
- "slavenames": ["wyvern", "cobra"],
+ "slavenames": ["bigdogvm1"],
"builddir": JITONLYLINUX32,
"factory": pypyJitOnlyOwnTestFactory,
"category": 'own'
From arigo at codespeak.net Wed Mar 3 15:45:15 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 15:45:15 +0100 (CET)
Subject: [pypy-svn] r71706 - pypy/trunk/pypy/translator/jvm/test
Message-ID: <20100303144515.64653282BD4@codespeak.net>
Author: arigo
Date: Wed Mar 3 15:45:12 2010
New Revision: 71706
Modified:
pypy/trunk/pypy/translator/jvm/test/test_builtin.py
Log:
Also skip this test elsewhere.
Modified: pypy/trunk/pypy/translator/jvm/test/test_builtin.py
==============================================================================
--- pypy/trunk/pypy/translator/jvm/test/test_builtin.py (original)
+++ pypy/trunk/pypy/translator/jvm/test/test_builtin.py Wed Mar 3 15:45:12 2010
@@ -29,7 +29,7 @@
def test_os_access(self):
from socket import gethostname
- if gethostname() == 'wyvern':
+ if 1: # gethostname() == 'wyvern':
py.test.skip('bug in JDK when run headless: ' +
'http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6539705')
BaseTestBuiltin.test_os_access(self)
From arigo at codespeak.net Wed Mar 3 15:53:53 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 15:53:53 +0100 (CET)
Subject: [pypy-svn] r71707 - in pypy/trunk/pypy/translator: c/test platform
Message-ID: <20100303145353.9A373282BD4@codespeak.net>
Author: arigo
Date: Wed Mar 3 15:53:51 2010
New Revision: 71707
Modified:
pypy/trunk/pypy/translator/c/test/test_standalone.py
pypy/trunk/pypy/translator/platform/maemo.py
Log:
Fix tests.
Modified: pypy/trunk/pypy/translator/c/test/test_standalone.py
==============================================================================
--- pypy/trunk/pypy/translator/c/test/test_standalone.py (original)
+++ pypy/trunk/pypy/translator/c/test/test_standalone.py Wed Mar 3 15:53:51 2010
@@ -398,7 +398,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: ValueError'
+ idx = lines.index('Fatal RPython error: ValueError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 4
l0, l1, l2 = lines[-4:-1]
assert l0 == 'RPython traceback:'
@@ -408,7 +409,8 @@
out2, err2 = cbuilder.cmdexec("x", expect_crash=True)
assert out2.strip() == ''
lines2 = err2.strip().splitlines()
- assert lines2[-1] == 'Fatal RPython error: KeyError'
+ idx = lines2.index('Fatal RPython error: KeyError') # assert found
+ lines2 = lines2[:idx+1]
l0, l1, l2 = lines2[-4:-1]
assert l0 == 'RPython traceback:'
assert re.match(r' File "\w+.c", line \d+, in entry_point', l1)
@@ -435,7 +437,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == 'done.'
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: KeyError'
+ idx = lines.index('Fatal RPython error: KeyError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 5
l0, l1, l2, l3 = lines[-5:-1]
assert l0 == 'RPython traceback:'
@@ -471,7 +474,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == 'done.'
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: KeyError'
+ idx = lines.index('Fatal RPython error: KeyError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 5
l0, l1, l2, l3 = lines[-5:-1]
assert l0 == 'RPython traceback:'
@@ -506,7 +510,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: ValueError'
+ idx = lines.index('Fatal RPython error: ValueError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 5
l0, l1, l2, l3 = lines[-5:-1]
assert l0 == 'RPython traceback:'
@@ -522,7 +527,7 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'in pypy_g_RPyRaiseException: AssertionError'
+ assert 'in pypy_g_RPyRaiseException: AssertionError' in lines
def test_assertion_error_nondebug(self):
def g(x):
@@ -539,7 +544,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: AssertionError'
+ idx = lines.index('Fatal RPython error: AssertionError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 4
l0, l1, l2 = lines[-4:-1]
assert l0 == 'RPython traceback:'
@@ -556,7 +562,7 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'in pypy_g_entry_point: foobar'
+ assert 'in pypy_g_entry_point: foobar' in lines
def test_ll_assert_error_nondebug(self):
py.test.skip("implement later, maybe: tracebacks even with ll_assert")
@@ -574,7 +580,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'PyPy assertion failed: foobar'
+ idx = lines.index('PyPy assertion failed: foobar') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 4
l0, l1, l2 = lines[-4:-1]
assert l0 == 'RPython traceback:'
Modified: pypy/trunk/pypy/translator/platform/maemo.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/maemo.py (original)
+++ pypy/trunk/pypy/translator/platform/maemo.py Wed Mar 3 15:53:51 2010
@@ -1,11 +1,12 @@
-import py
+import py, os
from pypy.translator.platform.linux import Linux, _run_subprocess, GnuMakefile
from pypy.translator.platform import ExecutionResult, log
from pypy.tool.udir import udir
from pypy.tool import autopath
def check_scratchbox():
- if not py.path.local('/scratchbox/login').check():
+ # in order to work, that file must exist and be executable by us
+ if not os.access('/scratchbox/login', os.X_OK):
py.test.skip("No scratchbox detected")
class Maemo(Linux):
From arigo at codespeak.net Wed Mar 3 18:13:42 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Wed, 3 Mar 2010 18:13:42 +0100 (CET)
Subject: [pypy-svn] r71711 - pypy/branch/jit-sandbox/pypy/rlib
Message-ID: <20100303171342.C0785282BD4@codespeak.net>
Author: arigo
Date: Wed Mar 3 18:13:40 2010
New Revision: 71711
Modified:
pypy/branch/jit-sandbox/pypy/rlib/rmmap.py
Log:
Documentation.
Modified: pypy/branch/jit-sandbox/pypy/rlib/rmmap.py
==============================================================================
--- pypy/branch/jit-sandbox/pypy/rlib/rmmap.py (original)
+++ pypy/branch/jit-sandbox/pypy/rlib/rmmap.py Wed Mar 3 18:13:40 2010
@@ -636,6 +636,10 @@
hint = Hint()
def alloc(map_size):
+ """Allocate memory. This is intended to be used by the JIT,
+ so the memory has the executable bit set and gets allocated
+ internally in case of a sandboxed process.
+ """
flags = MAP_PRIVATE | MAP_ANONYMOUS
prot = PROT_EXEC | PROT_READ | PROT_WRITE
hintp = rffi.cast(PTR, hint.pos)
@@ -748,6 +752,11 @@
def alloc(map_size):
+ """Allocate memory. This is intended to be used by the JIT,
+ so the memory has the executable bit set.
+ XXX implement me: it should get allocated internally in
+ case of a sandboxed process
+ """
null = lltype.nullptr(rffi.VOIDP.TO)
res = VirtualAlloc(null, map_size, MEM_COMMIT|MEM_RESERVE,
PAGE_EXECUTE_READWRITE)
From fijal at codespeak.net Wed Mar 3 18:38:51 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 18:38:51 +0100 (CET)
Subject: [pypy-svn] r71712 - in pypy/trunk/pypy: jit/backend/x86 rlib
rlib/rsre translator/sandbox translator/sandbox/test
Message-ID: <20100303173851.285D4282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 18:38:49 2010
New Revision: 71712
Modified:
pypy/trunk/pypy/jit/backend/x86/codebuf.py
pypy/trunk/pypy/jit/backend/x86/valgrind.py
pypy/trunk/pypy/rlib/rmmap.py
pypy/trunk/pypy/rlib/rsre/_rsre_platform.py
pypy/trunk/pypy/translator/sandbox/sandlib.py
pypy/trunk/pypy/translator/sandbox/test/test_sandbox.py
Log:
Merge jit-sandbox branch, that enables jit to cooperate with sandbox, minor
issues only
Modified: pypy/trunk/pypy/jit/backend/x86/codebuf.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/codebuf.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/codebuf.py Wed Mar 3 18:38:49 2010
@@ -155,4 +155,5 @@
separate_module_sources = ['void PYPY_NO_OP(void) {}'],
)
ensure_sse2_floats = rffi.llexternal('PYPY_NO_OP', [], lltype.Void,
- compilation_info=_sse2_eci)
+ compilation_info=_sse2_eci,
+ sandboxsafe=True)
Modified: pypy/trunk/pypy/jit/backend/x86/valgrind.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/valgrind.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/valgrind.py Wed Mar 3 18:38:49 2010
@@ -20,7 +20,8 @@
[llmemory.Address, lltype.Signed],
lltype.Void,
compilation_info=eci,
- _nowrapper=True)
+ _nowrapper=True,
+ sandboxsafe=True)
# ____________________________________________________________
Modified: pypy/trunk/pypy/rlib/rmmap.py
==============================================================================
--- pypy/trunk/pypy/rlib/rmmap.py (original)
+++ pypy/trunk/pypy/rlib/rmmap.py Wed Mar 3 18:38:49 2010
@@ -91,26 +91,32 @@
_ACCESS_DEFAULT, ACCESS_READ, ACCESS_WRITE, ACCESS_COPY = range(4)
def external(name, args, result):
- return rffi.llexternal(name, args, result,
- compilation_info=CConfig._compilation_info_)
+ unsafe = rffi.llexternal(name, args, result,
+ compilation_info=CConfig._compilation_info_)
+ safe = rffi.llexternal(name, args, result,
+ compilation_info=CConfig._compilation_info_,
+ sandboxsafe=True, threadsafe=False)
+ return unsafe, safe
def winexternal(name, args, result):
return rffi.llexternal(name, args, result, compilation_info=CConfig._compilation_info_, calling_conv='win')
PTR = rffi.CCHARP
-c_memmove = external('memmove', [PTR, PTR, size_t], lltype.Void)
+c_memmove, _ = external('memmove', [PTR, PTR, size_t], lltype.Void)
if _POSIX:
has_mremap = cConfig['has_mremap']
- c_mmap = external('mmap', [PTR, size_t, rffi.INT, rffi.INT,
+ c_mmap, c_mmap_safe = external('mmap', [PTR, size_t, rffi.INT, rffi.INT,
rffi.INT, off_t], PTR)
- c_munmap = external('munmap', [PTR, size_t], rffi.INT)
- c_msync = external('msync', [PTR, size_t, rffi.INT], rffi.INT)
+ c_munmap, c_munmap_safe = external('munmap', [PTR, size_t], rffi.INT)
+ c_msync, _ = external('msync', [PTR, size_t, rffi.INT], rffi.INT)
if has_mremap:
- c_mremap = external('mremap', [PTR, size_t, size_t, rffi.ULONG], PTR)
+ c_mremap, _ = external('mremap',
+ [PTR, size_t, size_t, rffi.ULONG], PTR)
- _get_page_size = external('getpagesize', [], rffi.INT)
+ # this one is always safe
+ _, _get_page_size = external('getpagesize', [], rffi.INT)
def _get_error_no():
return rposix.get_errno()
@@ -630,17 +636,21 @@
hint = Hint()
def alloc(map_size):
+ """Allocate memory. This is intended to be used by the JIT,
+ so the memory has the executable bit set and gets allocated
+ internally in case of a sandboxed process.
+ """
flags = MAP_PRIVATE | MAP_ANONYMOUS
prot = PROT_EXEC | PROT_READ | PROT_WRITE
hintp = rffi.cast(PTR, hint.pos)
- res = c_mmap(hintp, map_size, prot, flags, -1, 0)
+ res = c_mmap_safe(hintp, map_size, prot, flags, -1, 0)
if res == rffi.cast(PTR, -1):
raise MemoryError
hint.pos += map_size
return res
alloc._annenforceargs_ = (int,)
- free = c_munmap
+ free = c_munmap_safe
elif _MS_WINDOWS:
def mmap(fileno, length, tagname="", access=_ACCESS_DEFAULT):
@@ -742,6 +752,11 @@
def alloc(map_size):
+ """Allocate memory. This is intended to be used by the JIT,
+ so the memory has the executable bit set.
+ XXX implement me: it should get allocated internally in
+ case of a sandboxed process
+ """
null = lltype.nullptr(rffi.VOIDP.TO)
res = VirtualAlloc(null, map_size, MEM_COMMIT|MEM_RESERVE,
PAGE_EXECUTE_READWRITE)
Modified: pypy/trunk/pypy/rlib/rsre/_rsre_platform.py
==============================================================================
--- pypy/trunk/pypy/rlib/rsre/_rsre_platform.py (original)
+++ pypy/trunk/pypy/rlib/rsre/_rsre_platform.py Wed Mar 3 18:38:49 2010
@@ -10,7 +10,8 @@
return rffi.llexternal(name, args, result, compilation_info=eci, **kwds)
tolower = external('tolower', [lltype.Signed], lltype.Signed,
- oo_primitive='tolower')
+ oo_primitive='tolower',
+ sandboxsafe=True)
isalnum = external('isalnum', [lltype.Signed], lltype.Signed,
- oo_primitive='isalnum')
+ oo_primitive='isalnum', sandboxsafe=True)
Modified: pypy/trunk/pypy/translator/sandbox/sandlib.py
==============================================================================
--- pypy/trunk/pypy/translator/sandbox/sandlib.py (original)
+++ pypy/trunk/pypy/translator/sandbox/sandlib.py Wed Mar 3 18:38:49 2010
@@ -10,7 +10,7 @@
from pypy.rpython.module.ll_os_stat import s_StatResult
from pypy.tool.ansi_print import AnsiLog
from pypy.rlib.rarithmetic import r_longlong
-from py.compat import subprocess
+import subprocess
from pypy.tool.killsubprocess import killsubprocess
class MyAnsiLog(AnsiLog):
Modified: pypy/trunk/pypy/translator/sandbox/test/test_sandbox.py
==============================================================================
--- pypy/trunk/pypy/translator/sandbox/test/test_sandbox.py (original)
+++ pypy/trunk/pypy/translator/sandbox/test/test_sandbox.py Wed Mar 3 18:38:49 2010
@@ -1,6 +1,7 @@
import py
import sys, os, time
import struct
+import subprocess
from pypy.rpython.lltypesystem import rffi
from pypy.translator.interactive import Translation
@@ -19,8 +20,8 @@
write_message(g, result, resulttype)
g.flush()
-def compile(f):
- t = Translation(f, backend='c', standalone=True, sandbox=True, gc='ref')
+def compile(f, gc='ref'):
+ t = Translation(f, backend='c', standalone=True, sandbox=True, gc=gc)
return str(t.compile())
@@ -131,6 +132,72 @@
f.close()
assert tail == ""
+def test_hybrid_gc():
+ def entry_point(argv):
+ l = []
+ for i in range(int(argv[1])):
+ l.append("x" * int(argv[2]))
+ return int(len(l) > 1000)
+
+ exe = compile(entry_point, gc='hybrid')
+ pipe = subprocess.Popen([exe, '10', '10000'], stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ g = pipe.stdin
+ f = pipe.stdout
+ expect(f, g, "ll_os.ll_os_getenv", ("PYPY_GENERATIONGC_NURSERY",), None)
+ expect(f, g, "ll_os.ll_os_open", ("/proc/cpuinfo", 0, 420), OSError(5232, "xyz"))
+ g.close()
+ tail = f.read()
+ f.close()
+ assert tail == ""
+ rescode = pipe.wait()
+ assert rescode == 0
+
+def test_safe_alloc():
+ from pypy.rlib.rmmap import alloc, free
+
+ def entry_point(argv):
+ one = alloc(1024)
+ free(one, 1024)
+ return 0
+
+ exe = compile(entry_point)
+ pipe = subprocess.Popen([exe], stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ g = pipe.stdin
+ f = pipe.stdout
+ g.close()
+ tail = f.read()
+ f.close()
+ assert tail == ""
+ rescode = pipe.wait()
+ assert rescode == 0
+
+def test_unsafe_mmap():
+ py.test.skip("Since this stuff is unimplemented, it won't work anyway "
+ "however, the day it starts working, it should pass test")
+ from pypy.rlib.rmmap import mmap
+
+ def entry_point(argv):
+ try:
+ res = mmap(0, 1024)
+ except OSError:
+ return 0
+ return 1
+
+ exe = compile(entry_point)
+ pipe = subprocess.Popen([exe], stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ g = pipe.stdin
+ f = pipe.stdout
+ expect(f, g, "mmap", ARGS, OSError(1, "xyz"))
+ g.close()
+ tail = f.read()
+ f.close()
+ assert tail == ""
+ rescode = pipe.wait()
+ assert rescode == 0
+
class TestPrintedResults:
def run(self, entry_point, args, expected):
From fijal at codespeak.net Wed Mar 3 19:03:07 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Wed, 3 Mar 2010 19:03:07 +0100 (CET)
Subject: [pypy-svn] r71713 - pypy/branch/jit-sandbox
Message-ID: <20100303180307.39C6A282BD4@codespeak.net>
Author: fijal
Date: Wed Mar 3 19:03:06 2010
New Revision: 71713
Removed:
pypy/branch/jit-sandbox/
Log:
remove merged branch
From dan at codespeak.net Wed Mar 3 22:02:18 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Wed, 3 Mar 2010 22:02:18 +0100 (CET)
Subject: [pypy-svn] r71715 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100303210218.4E58D282BD5@codespeak.net>
Author: dan
Date: Wed Mar 3 22:02:08 2010
New Revision: 71715
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Added a few tests for interplevel code.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py Wed Mar 3 22:02:08 2010
@@ -19,49 +19,6 @@
def coerce_float32(space, w_x):
return unwrap_float32(space, space.float(w_x))
-def typecode(space, w_type):
- try:
- assert isinstance(w_type, DynamicType)
- return w_type.code
- except AssertionError, e: pass
-
- try:
- return space.str_w(w_type)
- except OperationError, e:
- typecode_mapping = {
- space.w_int: 'i',
- space.w_float: 'd',
- }
- try:
- return typecode_mapping[w_type]
- except IndexError, e:
- raise OperationError(space.w_TypeError,
- space.wrap("Can't understand type."))
-
-result_types = {
- ('i', 'i'): 'i',
- ('i', 'd'): 'd',
- ('d', 'i'): 'd',
- ('d', 'd'): 'd',
- }
-
-def result_mapping(space, types):
- types = (typecode(space, types[0]),
- typecode(space, types[1]))
- return result_types[types]
-
-def iterable_type(space, w_xs):
- xs = space.fixedview(w_xs)
- result_type = 'i'
- for i in range(len(xs)):
- try:
- atype = iterable_type(space, xs[i])
- except OperationError, e:
- if not e.match(space, space.w_TypeError):
- raise
- atype = typecode(space, space.type(xs[i]))
- result_type = result_types[(result_type, atype)]
- return result_type
def create_factory(result_factory):
def factory(t):
@@ -81,23 +38,68 @@
try:
code = space.str_w(w_x)
if self.code == code:
- return space.wrap(True)
+ return space.w_True
elif self.name == code:
- return space.wrap(True)
+ return space.w_True
else:
- return space.wrap(False)
+ return space.w_False
except OperationError, e:
- return space.wrap(False)
+ return space.w_False
except TypeError, e:
- return space.wrap(False) #FIXME: need to throw applevel type error
+ return space.w_False #FIXME: need to throw applevel type error
descr_eq.unwrap_spec = ['self', ObjSpace, W_Root]
DynamicType.typedef = TypeDef('dtype',
__eq__ = interp2app(DynamicType.descr_eq),
)
class DynamicTypes(object):
+ result_types = {
+ ('i', 'i'): 'i',
+ ('i', 'd'): 'd',
+ ('d', 'i'): 'd',
+ ('d', 'd'): 'd',
+ }
+
def __init__(self):
self.dtypes = {}
+
+ def typecode(self, space, w_type):
+ try:
+ assert isinstance(w_type, DynamicType)
+ return w_type.code
+ except AssertionError, e: pass
+
+ try:
+ return space.str_w(w_type)
+ except OperationError, e:
+ typecode_mapping = {
+ space.w_int: 'i',
+ space.w_float: 'd',
+ }
+ try:
+ return typecode_mapping[w_type]
+ except IndexError, e:
+ raise OperationError(space.w_TypeError,
+ space.wrap("Can't understand type."))
+
+ def result_mapping(self, space, types):
+ types = (self.typecode(space, types[0]),
+ self.typecode(space, types[1]))
+ return self.result_types[types]
+
+ def iterable_type(self, space, w_xs):
+ xs = space.fixedview(w_xs)
+ result_type = 'i'
+ for i in range(len(xs)):
+ try:
+ atype = self.iterable_type(space, xs[i])
+ except OperationError, e:
+ if not e.match(space, space.w_TypeError):
+ raise
+ atype = self.typecode(space, space.type(xs[i]))
+ result_type = self.result_types[(result_type, atype)]
+ return result_type
+
def verify_dtype_dict(self, space):
if not self.dtypes:
self.dtypes.update(
@@ -116,11 +118,22 @@
t = space.str_w(w_type)
except OperationError, e:
if e.match(space, space.w_TypeError):
- t = typecode(space, w_type)
+ t = self.typecode(space, w_type)
else:
raise
return self.retrieve_dtype(space, t)
+ def sdarray(self, space, length, w_dtype):
+ from pypy.module.micronumpy.sdarray import sdresult
+ return sdresult(self.typecode(space))(space, length, w_dtype)
+
+ def mdarray(self, space, shape, w_dtype):
+ from pypy.module.micronumpy.mdarray import mdresult
+ return mdresult(self.typecode(space))(space, shape, w_dtype)
+
dtypes = DynamicTypes()
+iterable_type = dtypes.iterable_type
+typecode = dtypes.typecode
+result_mapping = dtypes.result_mapping
get_dtype = dtypes.get_dtype
retrieve_dtype = dtypes.retrieve_dtype
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Wed Mar 3 22:02:08 2010
@@ -244,5 +244,40 @@
assert compare(ar[0], ar[2])
assert compare(ar[..., 0], [0, 3, 0])
+class TestDType(object):
+ def test_lookups(self, space):
+ from pypy.module.micronumpy.dtype import retrieve_dtype
+ from pypy.module.micronumpy.dtype import get_dtype
+ a = get_dtype(space, space.wrap('i'))
+ b = get_dtype(space, space.wrap('d'))
-
+ assert a == retrieve_dtype(space, 'i')
+ assert b == retrieve_dtype(space, 'd')
+
+ def test_result_types(self, space):
+ from pypy.module.micronumpy.dtype import get_dtype
+ from pypy.module.micronumpy.dtype import result_mapping
+ w_typecode_a = space.wrap('i')
+ w_typecode_b = space.wrap('d')
+ a = get_dtype(space, w_typecode_a)
+ b = get_dtype(space, w_typecode_b)
+
+ assert 'i' == result_mapping(space, (w_typecode_a, w_typecode_a))
+ assert 'd' == result_mapping(space, (w_typecode_b, w_typecode_a))
+ assert 'd' == result_mapping(space, (w_typecode_a, w_typecode_b))
+ assert 'd' == result_mapping(space, (w_typecode_b, w_typecode_b))
+
+ def test_iterable_type(self, space):
+ from pypy.module.micronumpy.dtype import iterable_type
+ w_int = space.wrap(1)
+ w_float = space.wrap(2.0)
+
+ data = [(space.wrap([1, 2, 3, 4, 5]), 'i'),
+ (space.wrap([1, 2, 3.0, 4, 5]), 'd'),
+ (space.wrap([1, 2.0, 3.0, 4, 5]), 'd'),
+ (space.wrap([1.0, 2, 3, 4, 5]), 'd'),
+ (space.wrap([1, 2, 3, 4, 5.0]), 'd'),
+ (space.wrap([1.0, 2, 3, 4, 5.0]), 'd')]
+
+ for w_xs, typecode in data:
+ assert typecode == iterable_type(space, w_xs)
From fijal at codespeak.net Thu Mar 4 01:41:14 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 01:41:14 +0100 (CET)
Subject: [pypy-svn] r71716 - pypy/branch/micronumpy/pypy/module/micronumpy
Message-ID: <20100304004114.EE815282BD7@codespeak.net>
Author: fijal
Date: Thu Mar 4 01:41:11 2010
New Revision: 71716
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
Log:
Apparently these cases are not that essential
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py Thu Mar 4 01:41:11 2010
@@ -42,10 +42,13 @@
elif self.name == code:
return space.w_True
else:
+ xxx
return space.w_False
except OperationError, e:
+ xxx
return space.w_False
except TypeError, e:
+ xxx
return space.w_False #FIXME: need to throw applevel type error
descr_eq.unwrap_spec = ['self', ObjSpace, W_Root]
DynamicType.typedef = TypeDef('dtype',
From getxsick at codespeak.net Thu Mar 4 02:22:44 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 02:22:44 +0100 (CET)
Subject: [pypy-svn] r71717 - pypy/build/ubuntu/debian
Message-ID: <20100304012244.D939E282BDC@codespeak.net>
Author: getxsick
Date: Thu Mar 4 02:22:42 2010
New Revision: 71717
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/rules
Log:
update testing section
- remove redundancy,
- use symlink instead of hard copy,
- fix PYTHONPATH issue
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Thu Mar 4 02:22:42 2010
@@ -9,14 +9,16 @@
BINARIES=%(BINARIES)s
-all: $(BINARIES) test
+all: $(BINARIES)
test: export TMPDIR = $(CURDIR)/tests-tmp
-test: export PYTHONPATH = ".:"$(PYTHONPATH)
+test: export PYTHONPATH = $(CURDIR)
test:
@rm -rf $(TMPDIR)
mkdir $(TMPDIR)
- cp build-default/usession-$$USER/testing_1/testing_1 pypy/translator/goal/pypy-c
+ ln -s $(CURDIR)/bin/pypy $(CURDIR)/pypy/translator/goal/pypy-c
+ echo $(CURDIR)
+ echo $(PYTHONPATH)
set -e; python testrunner/runner.py \
--logfile=pytest-A.log \
--config=pypy/pytest-A.cfg \
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Thu Mar 4 02:22:42 2010
@@ -27,6 +27,7 @@
build-arch: build-arch-stamp
build-arch-stamp: Makefile
$(MAKE) all
+ $(MAKE) test
touch $@
build-indep: build-indep-stamp
From getxsick at codespeak.net Thu Mar 4 02:48:00 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 02:48:00 +0100 (CET)
Subject: [pypy-svn] r71718 - in pypy/trunk/pypy: lib/test2
translator/microbench/pybench
Message-ID: <20100304014800.6FE6D282BD7@codespeak.net>
Author: getxsick
Date: Thu Mar 4 02:47:50 2010
New Revision: 71718
Modified:
pypy/trunk/pypy/lib/test2/pickledtasklet.py
pypy/trunk/pypy/translator/microbench/pybench/platform.py
pypy/trunk/pypy/translator/microbench/pybench/pybench.py
Log:
update shebang to independent version
Modified: pypy/trunk/pypy/lib/test2/pickledtasklet.py
==============================================================================
--- pypy/trunk/pypy/lib/test2/pickledtasklet.py (original)
+++ pypy/trunk/pypy/lib/test2/pickledtasklet.py Thu Mar 4 02:47:50 2010
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
import pickle, sys
import stackless
Modified: pypy/trunk/pypy/translator/microbench/pybench/platform.py
==============================================================================
--- pypy/trunk/pypy/translator/microbench/pybench/platform.py (original)
+++ pypy/trunk/pypy/translator/microbench/pybench/platform.py Thu Mar 4 02:47:50 2010
@@ -1,4 +1,4 @@
-#!/usr/local/bin/python
+#!/usr/bin/env python
""" This module tries to retrieve as much platform identifying data as
possible. It makes this information available via function APIs.
Modified: pypy/trunk/pypy/translator/microbench/pybench/pybench.py
==============================================================================
--- pypy/trunk/pypy/translator/microbench/pybench/pybench.py (original)
+++ pypy/trunk/pypy/translator/microbench/pybench/pybench.py Thu Mar 4 02:47:50 2010
@@ -1,4 +1,4 @@
-#!/usr/local/bin/python -O
+#!/usr/bin/env python -O
""" A Python Benchmark Suite
"""
From getxsick at codespeak.net Thu Mar 4 03:22:49 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 03:22:49 +0100 (CET)
Subject: [pypy-svn] r71719 - in pypy/trunk/lib-python/2.5.2: plat-atheos
plat-freebsd4 plat-freebsd5 plat-freebsd6 plat-freebsd7 plat-os2emx
Message-ID: <20100304022249.38E43282BDC@codespeak.net>
Author: getxsick
Date: Thu Mar 4 03:22:28 2010
New Revision: 71719
Modified:
pypy/trunk/lib-python/2.5.2/plat-atheos/regen (props changed)
pypy/trunk/lib-python/2.5.2/plat-freebsd4/regen (props changed)
pypy/trunk/lib-python/2.5.2/plat-freebsd5/regen (props changed)
pypy/trunk/lib-python/2.5.2/plat-freebsd6/regen (props changed)
pypy/trunk/lib-python/2.5.2/plat-freebsd7/regen (props changed)
pypy/trunk/lib-python/2.5.2/plat-os2emx/regen (props changed)
Log:
set executable bit
From getxsick at codespeak.net Thu Mar 4 03:51:34 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 03:51:34 +0100 (CET)
Subject: [pypy-svn] r71720 - pypy/build/ubuntu/debian
Message-ID: <20100304025134.1A61B282BDC@codespeak.net>
Author: getxsick
Date: Thu Mar 4 03:51:33 2010
New Revision: 71720
Modified:
pypy/build/ubuntu/debian/rules
Log:
remove outdated (mostly) rules
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Thu Mar 4 03:51:33 2010
@@ -51,39 +51,9 @@
cp debian/pypy-lib.override debian/pypy-lib/usr/share/lintian/overrides/pypy-lib
cp debian/pypy-dev.override debian/pypy-dev/usr/share/lintian/overrides/pypy-dev
dh_install -i
- find debian/pypy-lib -name CVS | xargs rm -rf
find debian/pypy-lib -name "*.pyc" | xargs rm -rf
find debian/pypy-dev -name "*.pyc" | xargs rm -rf
- find debian/pypy-dev/usr/share/pypy-*/pypy/translator/llvm \
- debian/pypy-lib/usr/share/pypy-*/lib-python \
- debian/pypy-dev/usr/share/pypy-*/pypy/lang/js/test/ecma \
- -type f | xargs chmod a-x
- for f in `find debian/pypy-lib debian/pypy-dev -type f` ; do \
- if head -n 1 $$f | grep -q '^#!.*python' ; then \
- chmod a+x $$f ; \
- fi ; \
- done
- chmod a+x debian/pypy-lib/usr/share/pypy-*/lib-python/2.5.2/plat-*/regen
- for f in debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/test/test_largefile.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/test/test_largefile.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/cgi.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/lib-python/2.5.2/bsddb/dbshelve.py \
- debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/pybench.py \
- debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/Setup.py \
- debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/Setup.py \
- debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/microbench/pybench/platform.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/app_test/test_binascii.py \
- debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/test2/pickledtasklet.py \
- ; do \
- echo "#!/usr/bin/python" > debian/tmpfile ; \
- tail -n +2 $$f >> debian/tmpfile ; \
- mv debian/tmpfile $$f ; \
- chmod a+x $$f ; \
- done
rm debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/module/unicodedata/LICENSE
- rm debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/lang/js/commit
- rm debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/pyrepl/.cvsignore
- rmdir debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/translator/js/examples/bnb/data/images/
install-arch:
dh_testdir
From getxsick at codespeak.net Thu Mar 4 03:55:46 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 03:55:46 +0100 (CET)
Subject: [pypy-svn] r71721 - pypy/build/ubuntu/debian
Message-ID: <20100304025546.A0AD4282BDC@codespeak.net>
Author: getxsick
Date: Thu Mar 4 03:55:45 2010
New Revision: 71721
Modified:
pypy/build/ubuntu/debian/Makefile.in
Log:
add removing logs in clean segment
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Thu Mar 4 03:55:45 2010
@@ -53,6 +53,7 @@
rm -rf pypy/_cache
rm -rf greenlet/build
rm -f greenlet/_greenlet.so
+ rm -f pytest-A.log cpython.log pypyjit.log
find . -name "*.pyc" | xargs rm -f
install: all
From dan at codespeak.net Thu Mar 4 08:34:06 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Thu, 4 Mar 2010 08:34:06 +0100 (CET)
Subject: [pypy-svn] r71722 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100304073406.0EF6B282BD7@codespeak.net>
Author: dan
Date: Thu Mar 4 08:34:04 2010
New Revision: 71722
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Another two tests.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Thu Mar 4 08:34:04 2010
@@ -11,8 +11,6 @@
from pypy.module.micronumpy.dtype import unwrap_int, coerce_int
from pypy.module.micronumpy.dtype import unwrap_float, coerce_float
-from pypy.module.micronumpy.dtype import\
- unwrap_float32, coerce_float32, float32
from pypy.module.micronumpy.dtype import result_mapping, iterable_type
from pypy.module.micronumpy.dtype import create_factory
@@ -278,7 +276,6 @@
IntArray = create_sdarray(int, unwrap_int, coerce_int)
FloatArray = create_sdarray(float, unwrap_float, coerce_float)
-Float32Array = create_sdarray(float32, unwrap_float32, coerce_float32)
GenericArray = None
sdresult = create_factory({'i': IntArray, 'd': FloatArray})
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Thu Mar 4 08:34:04 2010
@@ -1,6 +1,43 @@
?
from pypy.conftest import gettestobjspace
+class TestSDArray(object):
+ def test_unwrap(self, space):
+ w_int = space.wrap(1)
+ w_float = space.wrap(1.0)
+
+ from pypy.interpreter.error import OperationError
+ def interp_raises(exceptions, f, *args, **kwargs):
+ try:
+ f(*args, **kwargs)
+ except OperationError, e:
+ for ex in exceptions:
+ if e.match(space, ex):
+ return
+ raise
+ else:
+ raise AssertionError("Expected one of %s to be raised" % str(exceptions))
+
+ from pypy.module.micronumpy.dtype import unwrap_int
+ assert 1 == unwrap_int(space, w_int)
+ interp_raises((space.w_TypeError,), unwrap_int, space, w_float)
+
+ from pypy.module.micronumpy.dtype import unwrap_float
+ assert 1.0 == unwrap_float(space, w_float)
+ #interp_raises((space.w_TypeError,), unwrap_float, space, w_int) #er, shouldn't this raise?
+
+ def test_coerce(self, space):
+ w_int = space.wrap(1)
+ w_float = space.wrap(1.0)
+
+ from pypy.module.micronumpy.dtype import coerce_int
+ assert 1 == coerce_int(space, w_int)
+ assert 1 == coerce_int(space, w_float)
+
+ from pypy.module.micronumpy.dtype import coerce_float
+ assert 1.0 == coerce_float(space, w_int)
+ assert 1.0 == coerce_float(space, w_float)
+
class AppTestSDArray(object):
def setup_class(cls):
cls.space = gettestobjspace(usemodules=('micronumpy',))
From arigo at codespeak.net Thu Mar 4 13:58:56 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Thu, 4 Mar 2010 13:58:56 +0100 (CET)
Subject: [pypy-svn] r71724 - pypy/build/bot2/pypybuildbot
Message-ID: <20100304125856.D7EA0282BD7@codespeak.net>
Author: arigo
Date: Thu Mar 4 13:58:54 2010
New Revision: 71724
Modified:
pypy/build/bot2/pypybuildbot/builds.py
Log:
(iko, arigo)
Tentative: kill setting the first-time property, and instead write a
command that will call py.svnwcrevert only if the 'pypy' directory exist.
Modified: pypy/build/bot2/pypybuildbot/builds.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/builds.py (original)
+++ pypy/build/bot2/pypybuildbot/builds.py Thu Mar 4 13:58:54 2010
@@ -11,38 +11,7 @@
if cmd is not None and cmd.rc == -1:
return self.describe(True) + ['aborted']
return shell.ShellCommand.getText(self, cmd, results)
-
-class FirstTime(shell.SetProperty):
-
- def __init__(self, **kwds):
- workdir = kwds.pop('workdir', None)
- shell.SetProperty.__init__(self, description="first-time",
- property="first-time",
- workdir=workdir)
-
-
-class PosixFirstTime(FirstTime):
- command = "test -d pypy || echo yes"
-
-class WindowsFirstTime(FirstTime):
- command = "if not exist pypy echo yes"
-
-
-class CondShellCommand(ShellCmd):
-
- def __init__(self, **kwds):
- self.cond = kwds.pop('cond', lambda props: True)
- ShellCmd.__init__(self, **kwds)
-
- def start(self):
- props = self.build.getProperties()
- yes = self.cond(props)
- if yes:
- ShellCmd.start(self)
- else:
- self.setStatus(None, SUCCESS)
- self.finished(SUCCESS)
class Translate(ShellCmd):
name = "translate"
@@ -67,22 +36,15 @@
# ________________________________________________________________
-def not_first_time(props):
- first_time = props.getProperty("first-time")
- return not first_time
-
def setup_steps(platform, factory, workdir=None):
if platform == "win32":
- first_time_check = WindowsFirstTime()
+ command = "if exist pypy %s"
else:
- first_time_check = PosixFirstTime()
-
- factory.addStep(first_time_check)
- factory.addStep(CondShellCommand(
+ command = "if [ -d pypy ]; then %s; fi"
+ command = command % "python py/bin/py.svnwcrevert -p.buildbot-sourcedata ."
+ factory.addStep(ShellCmd(
description="wcrevert",
- cond=not_first_time,
- command = ["python", "py/bin/py.svnwcrevert",
- "-p.buildbot-sourcedata", "."],
+ command = command,
workdir = workdir,
))
factory.addStep(source.SVN(baseURL="http://codespeak.net/svn/pypy/",
From arigo at codespeak.net Thu Mar 4 16:19:12 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Thu, 4 Mar 2010 16:19:12 +0100 (CET)
Subject: [pypy-svn] r71729 - pypy/trunk/pypy/config
Message-ID: <20100304151912.4EB68282BD7@codespeak.net>
Author: arigo
Date: Thu Mar 4 16:19:10 2010
New Revision: 71729
Modified:
pypy/trunk/pypy/config/pypyoption.py
Log:
Enable 'sharingdict' and 'inlineddict' by default in O2 builds.
It gives an incredible memory usage benefit and in my timings
has no noticeable performance impact (less than 1% on richards).
Modified: pypy/trunk/pypy/config/pypyoption.py
==============================================================================
--- pypy/trunk/pypy/config/pypyoption.py (original)
+++ pypy/trunk/pypy/config/pypyoption.py Thu Mar 4 16:19:10 2010
@@ -333,6 +333,9 @@
config.objspace.std.suggest(optimized_list_getitem=True)
config.objspace.std.suggest(getattributeshortcut=True)
config.objspace.std.suggest(newshortcut=True)
+ if type_system != 'ootype':
+ config.objspace.std.suggest(withsharingdict=True)
+ config.objspace.std.suggest(withinlineddict=True)
# extra costly optimizations only go in level 3
if level == '3':
@@ -360,10 +363,7 @@
# extra optimizations with the JIT
if level == 'jit':
- if type_system != 'ootype':
- config.objspace.std.suggest(withsharingdict=True)
config.objspace.std.suggest(withcelldict=True)
- config.objspace.std.suggest(withinlineddict=True)
def enable_allworkingmodules(config):
From arigo at codespeak.net Thu Mar 4 16:19:22 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Thu, 4 Mar 2010 16:19:22 +0100 (CET)
Subject: [pypy-svn] r71730 - pypy/release/1.2.x/pypy/config
Message-ID: <20100304151922.81861282BDC@codespeak.net>
Author: arigo
Date: Thu Mar 4 16:19:20 2010
New Revision: 71730
Modified:
pypy/release/1.2.x/pypy/config/pypyoption.py
Log:
Merge r71729.
Modified: pypy/release/1.2.x/pypy/config/pypyoption.py
==============================================================================
--- pypy/release/1.2.x/pypy/config/pypyoption.py (original)
+++ pypy/release/1.2.x/pypy/config/pypyoption.py Thu Mar 4 16:19:20 2010
@@ -333,6 +333,9 @@
config.objspace.std.suggest(optimized_list_getitem=True)
config.objspace.std.suggest(getattributeshortcut=True)
config.objspace.std.suggest(newshortcut=True)
+ if type_system != 'ootype':
+ config.objspace.std.suggest(withsharingdict=True)
+ config.objspace.std.suggest(withinlineddict=True)
# extra costly optimizations only go in level 3
if level == '3':
@@ -360,10 +363,7 @@
# extra optimizations with the JIT
if level == 'jit':
- if type_system != 'ootype':
- config.objspace.std.suggest(withsharingdict=True)
config.objspace.std.suggest(withcelldict=True)
- config.objspace.std.suggest(withinlineddict=True)
def enable_allworkingmodules(config):
From arigo at codespeak.net Thu Mar 4 16:21:18 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Thu, 4 Mar 2010 16:21:18 +0100 (CET)
Subject: [pypy-svn] r71731 - pypy/build/bot2/pypybuildbot
Message-ID: <20100304152118.0253C282BD7@codespeak.net>
Author: arigo
Date: Thu Mar 4 16:21:17 2010
New Revision: 71731
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
Re-add cobra for this test run, where its 4 parallel processes
are still a big advantage.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Thu Mar 4 16:21:17 2010
@@ -122,7 +122,7 @@
'builders': [
{"name": LINUX32,
- "slavenames": ["bigdogvm1"],
+ "slavenames": ["cobra", "bigdogvm1"],
"builddir": LINUX32,
"factory": pypyOwnTestFactory,
"category": 'own'
From fijal at codespeak.net Thu Mar 4 20:08:53 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 20:08:53 +0100 (CET)
Subject: [pypy-svn] r71736 - in pypy/trunk/pypy/jit: backend
backend/llsupport backend/test metainterp
Message-ID: <20100304190853.78F5E282BD6@codespeak.net>
Author: fijal
Date: Thu Mar 4 20:08:51 2010
New Revision: 71736
Modified:
pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
pypy/trunk/pypy/jit/backend/model.py
pypy/trunk/pypy/jit/backend/test/test_random.py
pypy/trunk/pypy/jit/metainterp/executor.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
Log:
Freeze the CPU.
Modified: pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/llmodel.py Thu Mar 4 20:08:51 2010
@@ -14,11 +14,15 @@
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr, BaseCallDescr
+class CPUMutableContainer(object):
+ _overflow_flag = False
+
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
+ self.mutable = CPUMutableContainer()
assert type(opts) is not bool
self.opts = opts
@@ -50,12 +54,22 @@
self._setup_on_leave_jitted_translated()
else:
self._setup_on_leave_jitted_untranslated()
+ self.class_sizes = {}
+
+ def set_overflow_flag(self, val):
+ self.mutable._overflow_flag = val
+
+ def get_overflow_error(self):
+ return self.mutable._overflow_flag
+
+ def _freeze_(self):
+ return True
def setup(self):
pass
def set_class_sizes(self, class_sizes):
- self.class_sizes = class_sizes
+ self.class_sizes.update(class_sizes)
def _setup_prebuilt_error(self, prefix, Class):
if self.rtyper is not None: # normal case
@@ -105,8 +119,8 @@
v_i = _exception_emulator[1]
_exception_emulator[0] = 0
_exception_emulator[1] = 0
- self.saved_exception = tp_i
- self.saved_exc_value = self._cast_int_to_gcref(v_i)
+ self.mutable.saved_exception = tp_i
+ self.mutable.saved_exc_value = self._cast_int_to_gcref(v_i)
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -133,8 +147,8 @@
# from now on, the state is again consistent -- no more RPython
# exception is set. The following code produces a write barrier
# in the assignment to self.saved_exc_value, as needed.
- self.saved_exception = exception
- self.saved_exc_value = exc_value
+ self.mutable.saved_exception = exception
+ self.mutable.saved_exc_value = exc_value
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -172,14 +186,14 @@
return rffi.cast(lltype.Signed, f)
def get_exception(self):
- return self.saved_exception
+ return self.mutable.saved_exception
def get_exc_value(self):
- return self.saved_exc_value
+ return self.mutable.saved_exc_value
def clear_exception(self):
- self.saved_exception = 0
- self.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
+ self.mutable.saved_exception = 0
+ self.mutable.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
# ------------------- helpers and descriptions --------------------
Modified: pypy/trunk/pypy/jit/backend/model.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/model.py (original)
+++ pypy/trunk/pypy/jit/backend/model.py Thu Mar 4 20:08:51 2010
@@ -8,6 +8,8 @@
portal_calldescr = None
done_with_this_frame_int_v = -1
+ _overflow_flag = False
+
def __init__(self):
self.fail_descr_list = []
@@ -113,6 +115,12 @@
def get_zero_division_error(self):
raise NotImplementedError
+ def get_overflow_flag(self):
+ return self._overflow_flag
+
+ def set_overflow_flag(self, val):
+ self._overflow_flag = val
+
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/trunk/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/test/test_random.py (original)
+++ pypy/trunk/pypy/jit/backend/test/test_random.py Thu Mar 4 20:08:51 2010
@@ -264,8 +264,8 @@
fail_subset = builder.subset_of_intvars(r)
original_intvars = builder.intvars[:]
super(AbstractOvfOperation, self).produce_into(builder, r)
- if builder.cpu._overflow_flag: # overflow detected
- del builder.cpu._overflow_flag
+ if builder.cpu.get_overflow_flag(): # overflow detected
+ builder.cpu.set_overflow_flag(False)
op = ResOperation(rop.GUARD_OVERFLOW, [], None)
# the overflowed result should not be used any more, but can
# be used on the failure path: recompute fail_subset including
Modified: pypy/trunk/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/executor.py (original)
+++ pypy/trunk/pypy/jit/metainterp/executor.py Thu Mar 4 20:08:51 2010
@@ -145,7 +145,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
def do_int_sub_ovf(cpu, box1, box2):
@@ -158,7 +158,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
def do_int_mul_ovf(cpu, box1, box2):
@@ -171,7 +171,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
# ----------
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Thu Mar 4 20:08:51 2010
@@ -1898,8 +1898,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu._overflow_flag:
- self.cpu._overflow_flag = False
+ if self.cpu.get_overflow_flag():
+ self.cpu.set_overflow_flag(False)
frame.generate_guard(frame.pc, rop.GUARD_OVERFLOW, None, [])
return self.raise_overflow_error()
else:
From fijal at codespeak.net Thu Mar 4 20:11:16 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 20:11:16 +0100 (CET)
Subject: [pypy-svn] r71737 - in pypy/trunk/pypy/jit/backend: . llsupport
Message-ID: <20100304191116.86DAA36C224@codespeak.net>
Author: fijal
Date: Thu Mar 4 20:11:15 2010
New Revision: 71737
Modified:
pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
pypy/trunk/pypy/jit/backend/model.py
Log:
Move freezing of CPU up the class hierarchy
Modified: pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/llmodel.py Thu Mar 4 20:11:15 2010
@@ -62,9 +62,6 @@
def get_overflow_error(self):
return self.mutable._overflow_flag
- def _freeze_(self):
- return True
-
def setup(self):
pass
Modified: pypy/trunk/pypy/jit/backend/model.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/model.py (original)
+++ pypy/trunk/pypy/jit/backend/model.py Thu Mar 4 20:11:15 2010
@@ -13,6 +13,9 @@
def __init__(self):
self.fail_descr_list = []
+ def _freeze_(self):
+ return True
+
def get_fail_descr_number(self, descr):
assert isinstance(descr, history.AbstractFailDescr)
n = descr.index
From fijal at codespeak.net Thu Mar 4 20:15:21 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 20:15:21 +0100 (CET)
Subject: [pypy-svn] r71738 - pypy/branch/cleanup-warnings
Message-ID: <20100304191521.0308636C224@codespeak.net>
Author: fijal
Date: Thu Mar 4 20:15:18 2010
New Revision: 71738
Removed:
pypy/branch/cleanup-warnings/
Log:
Kill the branch
From fijal at codespeak.net Thu Mar 4 20:15:45 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 20:15:45 +0100 (CET)
Subject: [pypy-svn] r71739 - pypy/branch/cleanup-warnings
Message-ID: <20100304191545.1896C36C224@codespeak.net>
Author: fijal
Date: Thu Mar 4 20:15:42 2010
New Revision: 71739
Added:
pypy/branch/cleanup-warnings/
- copied from r71738, pypy/trunk/
Log:
Branch again - a branch to clen up warnings
From fijal at codespeak.net Thu Mar 4 20:46:05 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 20:46:05 +0100 (CET)
Subject: [pypy-svn] r71740 - pypy/branch/cleanup-warnings/pypy/jit/metainterp
Message-ID: <20100304194605.A03B6282BD6@codespeak.net>
Author: fijal
Date: Thu Mar 4 20:46:03 2010
New Revision: 71740
Modified:
pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py
Log:
Avoid annotator warnings, by adding abstract methods
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py Thu Mar 4 20:46:03 2010
@@ -125,6 +125,31 @@
def _clone_if_mutable(self):
return self
+ def get_extra_info(self):
+ """ Implement in call descr
+ """
+ raise NotImplementedError
+
+ def is_array_of_pointers(self):
+ """ Implement for array descr
+ """
+ raise NotImplementedError
+
+ def is_array_of_floats(self):
+ """ Implement for array descr
+ """
+ raise NotImplementedError
+
+ def is_pointer_field(self):
+ """ Implement for field descr
+ """
+ raise NotImplementedError
+
+ def is_float_field(self):
+ """ Implement for field descr
+ """
+ raise NotImplementedError
+
class AbstractFailDescr(AbstractDescr):
index = -1
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py Thu Mar 4 20:46:03 2010
@@ -123,6 +123,21 @@
# meaning it has been forced.
return self.box is None
+ def getfield(self, ofs, default):
+ raise NotImplementedError
+
+ def setfield(self, ofs, value):
+ raise NotImplementedError
+
+ def getitem(self, index):
+ raise NotImplementedError
+
+ def getlength(self):
+ raise NotImplementedError
+
+ def setitem(self, index, value):
+ raise NotImplementedError
+
class ConstantValue(OptValue):
level = LEVEL_CONSTANT
@@ -172,6 +187,8 @@
def _make_virtual(self, modifier):
raise NotImplementedError("abstract base")
+ def _really_force(self):
+ raise NotImplementedError("abstract base")
def get_fielddescrlist_cache(cpu):
if not hasattr(cpu, '_optimizeopt_fielddescrlist_cache'):
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/resume.py Thu Mar 4 20:46:03 2010
@@ -397,6 +397,8 @@
def set_content(self, fieldnums):
self.fieldnums = fieldnums
+ def debug_prints(self):
+ raise NotImplementedError
class AbstractVirtualStructInfo(AbstractVirtualInfo):
def __init__(self, fielddescrs):
From fijal at codespeak.net Thu Mar 4 20:56:09 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 20:56:09 +0100 (CET)
Subject: [pypy-svn] r71741 - in pypy/branch/cleanup-warnings/pypy/jit:
backend/x86 metainterp
Message-ID: <20100304195609.3B86F282BD6@codespeak.net>
Author: fijal
Date: Thu Mar 4 20:56:06 2010
New Revision: 71741
Modified:
pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py
pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
Log:
Fight rtyper warnings
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/x86/assembler.py Thu Mar 4 20:56:06 2010
@@ -100,6 +100,7 @@
mc2 = None
mc_size = MachineCodeBlockWrapper.MC_DEFAULT_SIZE
_float_constants = None
+ _regalloc = None
def __init__(self, cpu, translate_support_code=False,
failargs_limit=1000):
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/x86/runner.py Thu Mar 4 20:56:06 2010
@@ -4,7 +4,7 @@
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
from pypy.rpython.llinterp import LLInterpreter
from pypy.rlib.objectmodel import we_are_translated
-from pypy.jit.metainterp import history
+from pypy.jit.metainterp import history, compile
from pypy.jit.backend.x86.assembler import Assembler386
from pypy.jit.backend.x86.regalloc import FORCE_INDEX_OFS
from pypy.jit.backend.x86.profagent import ProfileAgent
@@ -141,3 +141,19 @@
import pypy.jit.metainterp.executor
pypy.jit.metainterp.executor.make_execute_list(CPU)
+
+# silence warnings
+
+history.LoopToken._x86_param_depth = 0
+history.LoopToken._x86_arglocs = (None, None)
+history.LoopToken._x86_frame_depth = 0
+history.LoopToken._x86_bootstrap_code = 0
+history.LoopToken._x86_direct_bootstrap_code = 0
+history.LoopToken._x86_failure_recovery_bytecode = 0
+history.LoopToken._x86_adr_jump_offset = 0
+history.LoopToken._x86_loop_code = 0
+history.LoopToken._x86_current_depths = (0, 0)
+
+compile._DoneWithThisFrameDescr._x86_current_depths = (0, 0)
+compile._DoneWithThisFrameDescr._x86_failure_recovery_bytecode = 0
+compile._DoneWithThisFrameDescr._x86_adr_jump_offset = 0
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/history.py Thu Mar 4 20:56:06 2010
@@ -710,6 +710,7 @@
terminating = False # see TerminatingLoopToken in compile.py
# specnodes = ...
# and more data specified by the backend when the loop is compiled
+ number = 0
def __init__(self, number=0):
self.number = number
@@ -889,6 +890,7 @@
compiled_count = 0
enter_count = 0
aborted_count = 0
+ history = None
def __init__(self):
self.loops = []
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/optimizeopt.py Thu Mar 4 20:56:06 2010
@@ -47,6 +47,7 @@
last_guard_index = -1
level = LEVEL_UNKNOWN
+ known_class = None
def __init__(self, box):
self.box = box
From getxsick at codespeak.net Thu Mar 4 22:58:46 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 22:58:46 +0100 (CET)
Subject: [pypy-svn] r71742 - in pypy/build/ubuntu/debian: . manpages scripts
Message-ID: <20100304215846.89167282BD6@codespeak.net>
Author: getxsick
Date: Thu Mar 4 22:58:43 2010
New Revision: 71742
Added:
pypy/build/ubuntu/debian/manpages/rpycompile.1 (props changed)
- copied unchanged from r71721, pypy/build/ubuntu/debian/manpages/pypy-translate.1
pypy/build/ubuntu/debian/scripts/rpycompile (props changed)
- copied unchanged from r71721, pypy/build/ubuntu/debian/scripts/pypy-translate
Removed:
pypy/build/ubuntu/debian/manpages/jscompile.1
pypy/build/ubuntu/debian/manpages/py.py.1
pypy/build/ubuntu/debian/manpages/pypy-translate.1
pypy/build/ubuntu/debian/pypy-dev.override
pypy/build/ubuntu/debian/pypy-logic.install
pypy/build/ubuntu/debian/scripts/jscompile
pypy/build/ubuntu/debian/scripts/py.py
pypy/build/ubuntu/debian/scripts/pypy-translate
Modified:
pypy/build/ubuntu/debian/changelog
pypy/build/ubuntu/debian/pypy-dev.dirs
pypy/build/ubuntu/debian/pypy-dev.install
pypy/build/ubuntu/debian/pypy-dev.manpages
pypy/build/ubuntu/debian/pypy.install
pypy/build/ubuntu/debian/rules
Log:
update installation rules for 1.2 release
remove outdated stuff
rename pypy-translate script to rpycompile
Modified: pypy/build/ubuntu/debian/changelog
==============================================================================
--- pypy/build/ubuntu/debian/changelog (original)
+++ pypy/build/ubuntu/debian/changelog Thu Mar 4 22:58:43 2010
@@ -1,4 +1,4 @@
-pypy (1.2.0-svn71646-1) unstable; urgency=low
+pypy (1.2.0-svn71721-1) unstable; urgency=low
* New upstream release.
* New maintainer.
Modified: pypy/build/ubuntu/debian/pypy-dev.dirs
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.dirs (original)
+++ pypy/build/ubuntu/debian/pypy-dev.dirs Thu Mar 4 22:58:43 2010
@@ -1,2 +1 @@
var/cache/pypy/_cache
-usr/share/lintian/overrides
Modified: pypy/build/ubuntu/debian/pypy-dev.install
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.install (original)
+++ pypy/build/ubuntu/debian/pypy-dev.install Thu Mar 4 22:58:43 2010
@@ -4,7 +4,6 @@
pypy/__init__.py usr/share/pypy-1.2/pypy
pypy/interpreter usr/share/pypy-1.2/pypy
pypy/jit usr/share/pypy-1.2/pypy
-pypy/lang usr/share/pypy-1.2/pypy
pypy/module usr/share/pypy-1.2/pypy
pypy/objspace usr/share/pypy-1.2/pypy
pypy/rlib usr/share/pypy-1.2/pypy
@@ -12,6 +11,4 @@
pypy/tool usr/share/pypy-1.2/pypy
pypy/translator usr/share/pypy-1.2/pypy
pypy/conftest.py usr/share/pypy-1.2/pypy
-debian/scripts/py.py usr/bin
-debian/scripts/pypy-translate usr/bin
-debian/scripts/jscompile usr/bin
+debian/scripts/rpycompile usr/bin
Modified: pypy/build/ubuntu/debian/pypy-dev.manpages
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.manpages (original)
+++ pypy/build/ubuntu/debian/pypy-dev.manpages Thu Mar 4 22:58:43 2010
@@ -1,3 +1 @@
-debian/manpages/py.py.1
-debian/manpages/pypy-translate.1
-debian/manpages/jscompile.1
+debian/manpages/rpycompile.1
Modified: pypy/build/ubuntu/debian/pypy.install
==============================================================================
--- pypy/build/ubuntu/debian/pypy.install (original)
+++ pypy/build/ubuntu/debian/pypy.install Thu Mar 4 22:58:43 2010
@@ -1 +1 @@
-debian/tmp/usr/bin/pypy usr/bin
+bin/pypy usr/bin
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Thu Mar 4 22:58:43 2010
@@ -46,10 +46,9 @@
install-indep:
dh_testdir
dh_testroot
- dh_clean -k -i
+ dh_prep -i
dh_installdirs -i
cp debian/pypy-lib.override debian/pypy-lib/usr/share/lintian/overrides/pypy-lib
- cp debian/pypy-dev.override debian/pypy-dev/usr/share/lintian/overrides/pypy-dev
dh_install -i
find debian/pypy-lib -name "*.pyc" | xargs rm -rf
find debian/pypy-dev -name "*.pyc" | xargs rm -rf
@@ -58,7 +57,7 @@
install-arch:
dh_testdir
dh_testroot
- dh_clean -k -s
+ dh_prep -s
dh_installdirs -s
$(MAKE) install
dh_install -s
From fijal at codespeak.net Thu Mar 4 23:00:41 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 23:00:41 +0100 (CET)
Subject: [pypy-svn] r71743 - in pypy/trunk/pypy/rlib: . test
Message-ID: <20100304220041.9A5C0282BD7@codespeak.net>
Author: fijal
Date: Thu Mar 4 23:00:39 2010
New Revision: 71743
Modified:
pypy/trunk/pypy/rlib/test/test_timer.py
pypy/trunk/pypy/rlib/timer.py
Log:
A new interface, to avoid concatenation of strings in case we don't actually
use timer.
Modified: pypy/trunk/pypy/rlib/test/test_timer.py
==============================================================================
--- pypy/trunk/pypy/rlib/test/test_timer.py (original)
+++ pypy/trunk/pypy/rlib/test/test_timer.py Thu Mar 4 23:00:39 2010
@@ -15,6 +15,8 @@
t.start("testb")
t.stop("testb")
t.stop("testb")
+ t.start_name("test", "one")
+ t.stop_name("test", "one")
t.dump()
Modified: pypy/trunk/pypy/rlib/timer.py
==============================================================================
--- pypy/trunk/pypy/rlib/timer.py (original)
+++ pypy/trunk/pypy/rlib/timer.py Thu Mar 4 23:00:39 2010
@@ -30,6 +30,9 @@
self.timings[name] = time.time() - self.timings.get(name, 0)
self.levels[timer] = new_level
+ def start_name(self, timerone, timertwo):
+ self.start(timerone + " " + timertwo)
+
def stop(self, timer):
level = self.levels.setdefault(timer, -1)
if level == -1:
@@ -39,6 +42,9 @@
self.timings[name] = time.time() - self.timings[name]
self.levels[timer] = level - 1
+ def stop_name(self, timerone, timertwo):
+ self.stop(timerone + " " + timertwo)
+
def value(self, timer):
level = self.levels.get(timer, -1)
if level == -1:
@@ -58,8 +64,12 @@
class DummyTimer:
def start(self, timer):
pass
+ def start_name(self, timerone, timertwo):
+ pass
def stop(self, timer):
pass
+ def stop_name(self, timerone, timertwo):
+ pass
def value(self, timer):
return "Timing disabled"
def dump(self):
From fijal at codespeak.net Thu Mar 4 23:03:25 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Thu, 4 Mar 2010 23:03:25 +0100 (CET)
Subject: [pypy-svn] r71744 - pypy/trunk/pypy/module/imp
Message-ID: <20100304220325.92147282BD8@codespeak.net>
Author: fijal
Date: Thu Mar 4 23:03:23 2010
New Revision: 71744
Modified:
pypy/trunk/pypy/module/imp/importing.py
Log:
Avoid string concatenation here. It's a bit of microoptimization, true,
but also painless
Modified: pypy/trunk/pypy/module/imp/importing.py
==============================================================================
--- pypy/trunk/pypy/module/imp/importing.py (original)
+++ pypy/trunk/pypy/module/imp/importing.py Thu Mar 4 23:03:23 2010
@@ -82,8 +82,7 @@
def importhook(space, modulename, w_globals=None,
w_locals=None, w_fromlist=None, level=-1):
- timername = "importhook " + modulename
- space.timer.start(timername)
+ space.timer.start_name("importhook", modulename)
if not modulename and level < 0:
raise OperationError(
space.w_ValueError,
@@ -131,7 +130,7 @@
baselevel,
w_fromlist, tentative=1)
if w_mod is not None:
- space.timer.stop(timername)
+ space.timer.stop_name("importhook", modulename)
return w_mod
else:
rel_modulename = None
@@ -141,7 +140,7 @@
w_mod = absolute_import(space, modulename, 0, w_fromlist, tentative=0)
if rel_modulename is not None:
space.setitem(space.sys.get('modules'), w(rel_modulename),space.w_None)
- space.timer.stop(timername)
+ space.timer.stop_name("importhook", modulename)
return w_mod
#
importhook.unwrap_spec = [ObjSpace, str, W_Root, W_Root, W_Root, int]
From getxsick at codespeak.net Thu Mar 4 23:33:57 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 23:33:57 +0100 (CET)
Subject: [pypy-svn] r71745 - pypy/build/ubuntu/debian
Message-ID: <20100304223357.925E651057@codespeak.net>
Author: getxsick
Date: Thu Mar 4 23:33:56 2010
New Revision: 71745
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/rules
Log:
remove unnecessary symlinks
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Thu Mar 4 23:33:56 2010
@@ -4,7 +4,6 @@
TRANSLATEOPTS=--batch --source -Ojit
TARGETOPTS=%(TARGETOPTS)s
PREFIX=%(PREFIX)s
-OUTPUTDIR=debian/tmp/usr/bin
LOGIC=-o logic
BINARIES=%(BINARIES)s
@@ -35,6 +34,7 @@
--resultlog=pypyjit.log \
pypy/module/pypyjit/test || true; \
echo "Finished testing JIT";
+ @rm -f $(CURDIR)/pypy/translator/goal/pypy-c
.NOTPARALLEL: $(BINARIES)
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Thu Mar 4 23:33:56 2010
@@ -52,7 +52,8 @@
dh_install -i
find debian/pypy-lib -name "*.pyc" | xargs rm -rf
find debian/pypy-dev -name "*.pyc" | xargs rm -rf
- rm debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/module/unicodedata/LICENSE
+ rm -f debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/module/unicodedata/LICENSE
+ rm -f debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/py
install-arch:
dh_testdir
From getxsick at codespeak.net Thu Mar 4 23:40:39 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 23:40:39 +0100 (CET)
Subject: [pypy-svn] r71746 - pypy/build/ubuntu/debian
Message-ID: <20100304224039.1FDED51055@codespeak.net>
Author: getxsick
Date: Thu Mar 4 23:40:37 2010
New Revision: 71746
Modified:
pypy/build/ubuntu/debian/control
Log:
update package dependence and switch architecture of pypy package to i386
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Thu Mar 4 23:40:37 2010
@@ -10,8 +10,8 @@
Package: pypy-dev
Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, python-codespeak-lib (>= 0.9.0), pypy-lib (>= ${source:Version}), python, python-ctypes
-Recommends: pypy-doc, python-pygame, graphviz, python-dev, gcc, libgc-dev, llvm-cfe, mono-gmcs, spidermonkey-bin, jasmin-sable, libreadline5-dev
+Depends: ${shlibs:Depends}, ${misc:Depends}, pypy-lib (>= ${source:Version}), python, python-ctypes, gcc, libffi-dev, zlib1g-dev, libbz2-dev
+Recommends: pypy-doc, python-dev, libgc-dev, llvm-cfe, mono-gmcs, spidermonkey-bin, jasmin-sable, libreadline5-dev
Suggests: gcl-dev
Description: the Python in python interpreter, interpreted version
The PyPy project aims to provide a Python implementation of the Python
@@ -26,8 +26,8 @@
build a custom translated version of the PyPy interpreter.
Package: pypy
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, pypy-lib
+Architecture: i386
+Depends: ${shlibs:Depends}, ${misc:Depends}, pypy-lib, libffi, zlib1g, libbz2-dev
Description: the Python in Python interpreter, C backend translation
The PyPy project aims to provide a Python implementation of the Python
interpreter.
From getxsick at codespeak.net Thu Mar 4 23:58:38 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Thu, 4 Mar 2010 23:58:38 +0100 (CET)
Subject: [pypy-svn] r71747 - pypy/build/ubuntu/debian/manpages
Message-ID: <20100304225838.E70A5282BD8@codespeak.net>
Author: getxsick
Date: Thu Mar 4 23:58:37 2010
New Revision: 71747
Modified:
pypy/build/ubuntu/debian/manpages/pypy.1
pypy/build/ubuntu/debian/manpages/rpycompile.1
Log:
update manual pages
Modified: pypy/build/ubuntu/debian/manpages/pypy.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/pypy.1 (original)
+++ pypy/build/ubuntu/debian/manpages/pypy.1 Thu Mar 4 23:58:37 2010
@@ -1,4 +1,4 @@
-.TH PYPY 1 "January 27, 2008"
+.TH PYPY 1 "March 4, 2010"
.SH NAME
pypy \- PyPy Python interpreter compiled using the C backend.
.SH SYNOPSIS
@@ -35,12 +35,10 @@
.B \-\-info
Print translation information about this PyPy executable.
.SH SEE ALSO
-.BR pypy-stackless (1),
-.BR py.py (1),
-.BR pypy-translate (1),
-.BR jscompile (1)
+.BR rpycompile (1),
.SH AUTHORS
-\fBPyPy\fP was written by the members of the PyPy project .
+\fBPyPy\fP was written by the members of the PyPy project .
.PP
-This manual page was written by Chris Lamb ,
+This manual page was updated by Bartosz Skowron .
+The manual page was originally written by Chris Lamb ,
for the Debian project (but may be used by others).
Modified: pypy/build/ubuntu/debian/manpages/rpycompile.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/rpycompile.1 (original)
+++ pypy/build/ubuntu/debian/manpages/rpycompile.1 Thu Mar 4 23:58:37 2010
@@ -1,21 +1,19 @@
-.TH PYPY-TRANSLATE 1 "January 27, 2008"
+.TH RPYCOMPILE 1 "March 4, 2010"
.SH NAME
-pypy-translate \- PyPy translation tool.
+rpycompile \- PyPy translation tool.
.SH SYNOPSIS
-.B pypy-translate
+.B rpycompile
.RI [options]
.SH OPTIONS
-\fBpypy-translate\fP has a very large number of options which are changing
+\fBrpycompile\fP has a very large number of options which are changing
often.
.TP
-To see the full list, please see the documentation.
+To see the full list, please see the documentation or \fB--help\fP option.
.SH SEE ALSO
.BR pypy (1),
-.BR pypy-stackless (1),
-.BR py.py (1),
-.BR jscompile (1)
.SH AUTHORS
-\fBPyPy\fP was written by the members of the PyPy project .
+\fBPyPy\fP was written by the members of the PyPy project .
.PP
-This manual page was written by Chris Lamb ,
+This manual page was updated by Bartosz Skowron .
+The manual page was originally written by Chris Lamb ,
for the Debian project (but may be used by others).
From benjamin at codespeak.net Fri Mar 5 00:27:47 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Fri, 5 Mar 2010 00:27:47 +0100 (CET)
Subject: [pypy-svn] r71748 - pypy/branch/import-fiddle
Message-ID: <20100304232747.DBA1851057@codespeak.net>
Author: benjamin
Date: Fri Mar 5 00:27:46 2010
New Revision: 71748
Added:
pypy/branch/import-fiddle/
- copied from r71747, pypy/trunk/
Log:
make a branch for hacking import a little
From benjamin at codespeak.net Fri Mar 5 00:29:04 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Fri, 5 Mar 2010 00:29:04 +0100 (CET)
Subject: [pypy-svn] r71749 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100304232904.A980C51059@codespeak.net>
Author: benjamin
Date: Fri Mar 5 00:29:02 2010
New Revision: 71749
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
don't examine globals if it's not needed
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 00:29:02 2010
@@ -89,8 +89,10 @@
space.wrap("Empty module name"))
w = space.wrap
- ctxt_name = None
- if w_globals is not None and not space.is_w(w_globals, space.w_None):
+ rel_modulename = None
+ if (level != 0 and
+ w_globals is not None and
+ not space.is_w(w_globals, space.w_None)):
ctxt_w_name = space.finditem(w_globals, w('__name__'))
ctxt_w_path = space.finditem(w_globals, w('__path__'))
if ctxt_w_name is not None:
@@ -99,41 +101,31 @@
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
- else:
- ctxt_w_path = None
-
- rel_modulename = None
- if ctxt_name is not None:
- if level == 0:
- baselevel = 0
- rel_modulename = modulename
- else:
- ctxt_name_prefix_parts = ctxt_name.split('.')
- if level > 0:
- n = len(ctxt_name_prefix_parts)-level+1
- assert n>=0
- ctxt_name_prefix_parts = ctxt_name_prefix_parts[:n]
- if ctxt_w_path is None: # plain module
- ctxt_name_prefix_parts.pop()
- if ctxt_name_prefix_parts:
- rel_modulename = '.'.join(ctxt_name_prefix_parts)
- if modulename:
- rel_modulename += '.' + modulename
- baselevel = len(ctxt_name_prefix_parts)
-
- if rel_modulename is not None:
- w_mod = check_sys_modules(space, w(rel_modulename))
- if (w_mod is None or
- not space.is_w(w_mod, space.w_None)):
-
- w_mod = absolute_import(space, rel_modulename,
- baselevel,
- w_fromlist, tentative=1)
- if w_mod is not None:
- space.timer.stop_name("importhook", modulename)
- return w_mod
else:
- rel_modulename = None
+ ctxt_name_prefix_parts = ctxt_name.split('.')
+ if level > 0:
+ n = len(ctxt_name_prefix_parts)-level+1
+ assert n>=0
+ ctxt_name_prefix_parts = ctxt_name_prefix_parts[:n]
+ if ctxt_w_path is None: # plain module
+ ctxt_name_prefix_parts.pop()
+ if ctxt_name_prefix_parts:
+ rel_modulename = '.'.join(ctxt_name_prefix_parts)
+ if modulename:
+ rel_modulename += '.' + modulename
+ baselevel = len(ctxt_name_prefix_parts)
+ if rel_modulename is not None:
+ w_mod = check_sys_modules(space, w(rel_modulename))
+ if (w_mod is None or
+ not space.is_w(w_mod, space.w_None)):
+ w_mod = absolute_import(space, rel_modulename,
+ baselevel,
+ w_fromlist, tentative=1)
+ if w_mod is not None:
+ space.timer.stop_name("importhook", modulename)
+ return w_mod
+ else:
+ rel_modulename = None
if level > 0:
msg = "Attempted relative import in non-package"
raise OperationError(space.w_ValueError, w(msg))
From benjamin at codespeak.net Fri Mar 5 00:37:05 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Fri, 5 Mar 2010 00:37:05 +0100 (CET)
Subject: [pypy-svn] r71750 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100304233705.38BA951059@codespeak.net>
Author: benjamin
Date: Fri Mar 5 00:37:03 2010
New Revision: 71750
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
space
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 00:37:03 2010
@@ -131,7 +131,7 @@
raise OperationError(space.w_ValueError, w(msg))
w_mod = absolute_import(space, modulename, 0, w_fromlist, tentative=0)
if rel_modulename is not None:
- space.setitem(space.sys.get('modules'), w(rel_modulename),space.w_None)
+ space.setitem(space.sys.get('modules'), w(rel_modulename), space.w_None)
space.timer.stop_name("importhook", modulename)
return w_mod
#
From fijal at codespeak.net Fri Mar 5 00:45:35 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 00:45:35 +0100 (CET)
Subject: [pypy-svn] r71751 - pypy/branch/string-promote
Message-ID: <20100304234535.A909B51059@codespeak.net>
Author: fijal
Date: Fri Mar 5 00:45:34 2010
New Revision: 71751
Removed:
pypy/branch/string-promote/
Log:
Remove merged branch
From fijal at codespeak.net Fri Mar 5 00:48:09 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 00:48:09 +0100 (CET)
Subject: [pypy-svn] r71752 - pypy/branch/parser-playground
Message-ID: <20100304234809.70B755105A@codespeak.net>
Author: fijal
Date: Fri Mar 5 00:48:07 2010
New Revision: 71752
Removed:
pypy/branch/parser-playground/
Log:
Kill this branch, it's horribly outdated if nothing else - if you need it
cfbolz, please revive
From fijal at codespeak.net Fri Mar 5 00:49:02 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 00:49:02 +0100 (CET)
Subject: [pypy-svn] r71753 - pypy/branch/js-refactoring
Message-ID: <20100304234902.211075105B@codespeak.net>
Author: fijal
Date: Fri Mar 5 00:49:00 2010
New Revision: 71753
Removed:
pypy/branch/js-refactoring/
Log:
This branch was merged to lang
From fijal at codespeak.net Fri Mar 5 00:50:20 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 00:50:20 +0100 (CET)
Subject: [pypy-svn] r71754 - pypy/branch/gcremovetypeptr
Message-ID: <20100304235020.7EF1D5105C@codespeak.net>
Author: fijal
Date: Fri Mar 5 00:50:18 2010
New Revision: 71754
Removed:
pypy/branch/gcremovetypeptr/
Log:
This branch was only for running performance plots, I think it's done
From fijal at codespeak.net Fri Mar 5 00:51:06 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 00:51:06 +0100 (CET)
Subject: [pypy-svn] r71755 - pypy/branch/asmgcc-cantcollect
Message-ID: <20100304235106.3097C5105D@codespeak.net>
Author: fijal
Date: Fri Mar 5 00:51:04 2010
New Revision: 71755
Removed:
pypy/branch/asmgcc-cantcollect/
Log:
Kill merged branch
From getxsick at codespeak.net Fri Mar 5 02:24:01 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 02:24:01 +0100 (CET)
Subject: [pypy-svn] r71756 - pypy/build/ubuntu/debian
Message-ID: <20100305012401.C1E955105E@codespeak.net>
Author: getxsick
Date: Fri Mar 5 02:24:00 2010
New Revision: 71756
Modified:
pypy/build/ubuntu/debian/changelog
pypy/build/ubuntu/debian/control
pypy/build/ubuntu/debian/rules
Log:
fix warnings noticed by lintian
Modified: pypy/build/ubuntu/debian/changelog
==============================================================================
--- pypy/build/ubuntu/debian/changelog (original)
+++ pypy/build/ubuntu/debian/changelog Fri Mar 5 02:24:00 2010
@@ -1,7 +1,10 @@
-pypy (1.2.0-svn71721-1) unstable; urgency=low
+pypy (1.2.0-1) unstable; urgency=low
* New upstream release.
* New maintainer.
+ * Only JIT-oriented upstream (e.g. stackless is dropped)
+ * Rename pypy-translate to rpycompile
+ * Run tests (-A, lib-python, JIT)
* Switch to dpkg-source 3.0 (native) format
-- Bartosz Skowron Tue, 02 Mar 2010 18:08:37 +0100
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Fri Mar 5 02:24:00 2010
@@ -1,12 +1,10 @@
Source: pypy
Section: python
Priority: extra
-Maintainer: Chris Lamb
-Build-Depends: debhelper (>= 6), python-dev, libgc-dev, libbz2-dev, python-ctypes, libreadline5-dev, procps, zlib1g-dev
-Standards-Version: 3.7.3
-Vcs-Git: git://git.chris-lamb.co.uk/pkg-pypy.git
-Vcs-Browser: http://git.chris-lamb.co.uk/?p=pkg-pypy.git
-Homepage: http://codespeak.net/pypy/
+Maintainer: Bartosz Skowron
+Build-Depends: debhelper (>= 7), python-dev, libgc-dev, libbz2-dev, python-ctypes, libreadline5-dev, procps, zlib1g-dev
+Standards-Version: 3.8.0
+Homepage: http://pypy.org
Package: pypy-dev
Architecture: all
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Fri Mar 5 02:24:00 2010
@@ -54,6 +54,8 @@
find debian/pypy-dev -name "*.pyc" | xargs rm -rf
rm -f debian/pypy-dev/usr/share/pypy-$(VERSION)/pypy/module/unicodedata/LICENSE
rm -f debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/py
+ rm -f debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/app_test/ctypes_tests/_ctypes_test.o
+ rm -rf debian/pypy-dev/usr/share/pypy-1.2/pypy/translator/c/winproj/
install-arch:
dh_testdir
From fijal at codespeak.net Fri Mar 5 02:43:53 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 02:43:53 +0100 (CET)
Subject: [pypy-svn] r71757 - pypy/branch/import-fiddle/pypy/module/pypyjit
Message-ID: <20100305014353.586965105E@codespeak.net>
Author: fijal
Date: Fri Mar 5 02:43:29 2010
New Revision: 71757
Modified:
pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py
Log:
Look into those modules
Modified: pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py (original)
+++ pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py Fri Mar 5 02:43:29 2010
@@ -11,7 +11,8 @@
if '.' in modname:
modname, _ = modname.split('.', 1)
- if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions']:
+ if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions',
+ 'sys', 'imp']:
return True
return False
From fijal at codespeak.net Fri Mar 5 02:59:05 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 02:59:05 +0100 (CET)
Subject: [pypy-svn] r71758 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100305015905.B8F0C282BD9@codespeak.net>
Author: fijal
Date: Fri Mar 5 02:58:54 2010
New Revision: 71758
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
Fight fight fight. Fastpath for *something*
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 02:58:54 2010
@@ -9,7 +9,7 @@
from pypy.interpreter.error import OperationError, operationerrfmt
from pypy.interpreter.baseobjspace import W_Root, ObjSpace
from pypy.interpreter.eval import Code
-from pypy.rlib import streamio
+from pypy.rlib import streamio, jit
from pypy.rlib.streamio import StreamErrors
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.objectmodel import we_are_translated
@@ -80,6 +80,9 @@
def check_sys_modules(space, w_modulename):
return space.finditem(space.sys.get('modules'), w_modulename)
+def check_sys_modules_w(space, modulename):
+ return space.finditem_str(space.sys.get('modules'), modulename)
+
def importhook(space, modulename, w_globals=None,
w_locals=None, w_fromlist=None, level=-1):
space.timer.start_name("importhook", modulename)
@@ -89,6 +92,11 @@
space.wrap("Empty module name"))
w = space.wrap
+ if w_fromlist is not None and space.is_true(w_fromlist):
+ fromlist_w = space.fixedview(w_fromlist)
+ else:
+ fromlist_w = None
+
rel_modulename = None
if (level != 0 and
w_globals is not None and
@@ -120,7 +128,7 @@
not space.is_w(w_mod, space.w_None)):
w_mod = absolute_import(space, rel_modulename,
baselevel,
- w_fromlist, tentative=1)
+ fromlist_w, tentative=1)
if w_mod is not None:
space.timer.stop_name("importhook", modulename)
return w_mod
@@ -129,7 +137,9 @@
if level > 0:
msg = "Attempted relative import in non-package"
raise OperationError(space.w_ValueError, w(msg))
- w_mod = absolute_import(space, modulename, 0, w_fromlist, tentative=0)
+ w_mod = absolute_import_try(space, modulename, 0, fromlist_w)
+ if w_mod is None and not space.is_w(w_mod, space.w_None):
+ w_mod = absolute_import(space, modulename, 0, fromlist_w, tentative=0)
if rel_modulename is not None:
space.setitem(space.sys.get('modules'), w(rel_modulename), space.w_None)
space.timer.stop_name("importhook", modulename)
@@ -137,16 +147,27 @@
#
importhook.unwrap_spec = [ObjSpace, str, W_Root, W_Root, W_Root, int]
-def absolute_import(space, modulename, baselevel, w_fromlist, tentative):
+def absolute_import(space, modulename, baselevel, fromlist_w, tentative):
lock = getimportlock(space)
lock.acquire_lock()
try:
return _absolute_import(space, modulename, baselevel,
- w_fromlist, tentative)
+ fromlist_w, tentative)
finally:
lock.release_lock()
-def _absolute_import(space, modulename, baselevel, w_fromlist, tentative):
+ at jit.unroll_safe
+def absolute_import_try(space, modulename, baselevel, fromlist_w):
+ """ Only look up sys.modules, not actually try to load anything
+ """
+ last_dot = 0
+ if '.' not in modulename:
+ w_mod = check_sys_modules_w(space, modulename)
+ if fromlist_w is not None:
+ return None
+ return None
+
+def _absolute_import(space, modulename, baselevel, fromlist_w, tentative):
w = space.wrap
w_mod = None
@@ -170,13 +191,12 @@
w_path = try_getattr(space, w_mod, w('__path__'))
level += 1
- if w_fromlist is not None and space.is_true(w_fromlist):
+ if fromlist_w is not None:
if w_path is not None:
- fromlist_w = space.unpackiterable(w_fromlist)
if len(fromlist_w) == 1 and space.eq_w(fromlist_w[0],w('*')):
w_all = try_getattr(space, w_mod, w('__all__'))
if w_all is not None:
- fromlist_w = space.unpackiterable(w_all)
+ fromlist_w = space.fixedview(w_all)
for w_name in fromlist_w:
if try_getattr(space, w_mod, w_name) is None:
load_part(space, w_path, prefix, space.str_w(w_name), w_mod,
From fijal at codespeak.net Fri Mar 5 03:26:33 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 03:26:33 +0100 (CET)
Subject: [pypy-svn] r71759 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100305022633.72200282BD6@codespeak.net>
Author: fijal
Date: Fri Mar 5 03:26:31 2010
New Revision: 71759
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
an attempt to have jit-friendly fast-path for stuff that has it's place
in sys.modules
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 03:26:31 2010
@@ -160,12 +160,41 @@
def absolute_import_try(space, modulename, baselevel, fromlist_w):
""" Only look up sys.modules, not actually try to load anything
"""
+ w_path = None
last_dot = 0
if '.' not in modulename:
w_mod = check_sys_modules_w(space, modulename)
- if fromlist_w is not None:
- return None
- return None
+ first = w_mod
+ if fromlist_w is not None and w_mod is not None:
+ w_path = try_getattr(space, w_mod, space.wrap('__path__'))
+ else:
+ level = 0
+ first = None
+ while last_dot != -1:
+ last_dot = modulename.find('.', last_dot + 1)
+ if last_dot == -1:
+ w_mod = check_sys_modules_w(space, modulename)
+ else:
+ w_mod = check_sys_modules_w(space, modulename[:last_dot])
+ if w_mod is None or space.is_w(w_mod, space.w_None):
+ return None
+ if level == baselevel:
+ first = w_mod
+ if fromlist_w is not None:
+ w_path = try_getattr(space, w_mod, space.wrap('__path__'))
+ level += 1
+ if fromlist_w is not None:
+ if w_path is not None:
+ if len(fromlist_w) == 1 and space.eq_w(fromlist_w[0],
+ space.wrap('*')):
+ w_all = try_getattr(space, w_mod, space.wrap('__all__'))
+ if w_all is not None:
+ fromlist_w = space.fixedview(w_all)
+ for w_name in fromlist_w:
+ if try_getattr(space, w_mod, w_name) is None:
+ return None
+ return w_mod
+ return first
def _absolute_import(space, modulename, baselevel, fromlist_w, tentative):
w = space.wrap
@@ -188,7 +217,8 @@
first = w_mod
tentative = 0
prefix.append(part)
- w_path = try_getattr(space, w_mod, w('__path__'))
+ if fromlist_w is not None:
+ w_path = try_getattr(space, w_mod, w('__path__'))
level += 1
if fromlist_w is not None:
From fijal at codespeak.net Fri Mar 5 03:32:04 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 03:32:04 +0100 (CET)
Subject: [pypy-svn] r71760 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100305023204.59E23282BD7@codespeak.net>
Author: fijal
Date: Fri Mar 5 03:31:59 2010
New Revision: 71760
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
fix translation
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 03:31:59 2010
@@ -175,6 +175,7 @@
if last_dot == -1:
w_mod = check_sys_modules_w(space, modulename)
else:
+ assert last_dot >= 0
w_mod = check_sys_modules_w(space, modulename[:last_dot])
if w_mod is None or space.is_w(w_mod, space.w_None):
return None
From fijal at codespeak.net Fri Mar 5 03:46:32 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 03:46:32 +0100 (CET)
Subject: [pypy-svn] r71761 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100305024632.47219282BD8@codespeak.net>
Author: fijal
Date: Fri Mar 5 03:46:29 2010
New Revision: 71761
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
fix rtyping
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 03:46:29 2010
@@ -171,6 +171,7 @@
level = 0
first = None
while last_dot != -1:
+ assert last_dot >= 0 # bah
last_dot = modulename.find('.', last_dot + 1)
if last_dot == -1:
w_mod = check_sys_modules_w(space, modulename)
From fijal at codespeak.net Fri Mar 5 04:07:27 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 04:07:27 +0100 (CET)
Subject: [pypy-svn] r71762 - pypy/branch/import-fiddle/pypy/module/sys
Message-ID: <20100305030727.39121282BD8@codespeak.net>
Author: fijal
Date: Fri Mar 5 04:07:24 2010
New Revision: 71762
Modified:
pypy/branch/import-fiddle/pypy/module/sys/state.py
Log:
(cfbolz) Use celldict for sys.modules (this it the *actual* optimization)
Modified: pypy/branch/import-fiddle/pypy/module/sys/state.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/sys/state.py (original)
+++ pypy/branch/import-fiddle/pypy/module/sys/state.py Fri Mar 5 04:07:24 2010
@@ -14,7 +14,7 @@
def __init__(self, space):
self.space = space
- self.w_modules = space.newdict()
+ self.w_modules = space.newdict(module=True)
self.w_warnoptions = space.newlist([])
self.w_argv = space.newlist([])
From getxsick at codespeak.net Fri Mar 5 04:15:02 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 04:15:02 +0100 (CET)
Subject: [pypy-svn] r71763 - pypy/build/ubuntu/debian
Message-ID: <20100305031502.C3194282BD8@codespeak.net>
Author: getxsick
Date: Fri Mar 5 04:14:58 2010
New Revision: 71763
Modified:
pypy/build/ubuntu/debian/pypy-dev.install
Log:
add testrunner, greenlet and pylib to pypy-dev
Modified: pypy/build/ubuntu/debian/pypy-dev.install
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dev.install (original)
+++ pypy/build/ubuntu/debian/pypy-dev.install Fri Mar 5 04:14:58 2010
@@ -11,4 +11,7 @@
pypy/tool usr/share/pypy-1.2/pypy
pypy/translator usr/share/pypy-1.2/pypy
pypy/conftest.py usr/share/pypy-1.2/pypy
+py usr/share/pypy-1.2
+greenlet usr/share/pypy-1.2
+testrunner usr/share/pypy-1.2
debian/scripts/rpycompile usr/bin
From getxsick at codespeak.net Fri Mar 5 04:15:50 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 04:15:50 +0100 (CET)
Subject: [pypy-svn] r71764 - pypy/build/ubuntu/debian
Message-ID: <20100305031550.D5F7F282BD9@codespeak.net>
Author: getxsick
Date: Fri Mar 5 04:15:48 2010
New Revision: 71764
Modified:
pypy/build/ubuntu/debian/pypy-doc.docs
Log:
add README to pypy-doc
Modified: pypy/build/ubuntu/debian/pypy-doc.docs
==============================================================================
--- pypy/build/ubuntu/debian/pypy-doc.docs (original)
+++ pypy/build/ubuntu/debian/pypy-doc.docs Fri Mar 5 04:15:48 2010
@@ -1 +1,2 @@
pypy/doc/*
+README
From getxsick at codespeak.net Fri Mar 5 04:17:27 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 04:17:27 +0100 (CET)
Subject: [pypy-svn] r71765 - pypy/build/ubuntu/debian
Message-ID: <20100305031727.C2027282BDA@codespeak.net>
Author: getxsick
Date: Fri Mar 5 04:17:25 2010
New Revision: 71765
Modified:
pypy/build/ubuntu/debian/rules
Log:
make hard copy of ctypes_configure to pypy/lib/ instead of symlink
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Fri Mar 5 04:17:25 2010
@@ -56,6 +56,8 @@
rm -f debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/py
rm -f debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/app_test/ctypes_tests/_ctypes_test.o
rm -rf debian/pypy-dev/usr/share/pypy-1.2/pypy/translator/c/winproj/
+ rm -f debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/ctypes_configure
+ cp -r ctypes_configure debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/
install-arch:
dh_testdir
From benjamin at codespeak.net Fri Mar 5 04:20:53 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Fri, 5 Mar 2010 04:20:53 +0100 (CET)
Subject: [pypy-svn] r71766 - in pypy/branch/import-fiddle/lib-python/2.5.2:
. lib-tk plat-irix5 plat-mac/Carbon plat-sunos5 test
Message-ID: <20100305032053.06D66282BD9@codespeak.net>
Author: benjamin
Date: Fri Mar 5 04:20:50 2010
New Revision: 71766
Modified:
pypy/branch/import-fiddle/lib-python/2.5.2/lib-tk/Tix.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/AL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/CD.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/CL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/CL_old.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/DEVICE.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/ERRNO.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/FILE.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/FL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/GET.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/GL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/GLWS.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/IN.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/IOCTL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/SV.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/WAIT.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/cddb.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/cdplayer.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/flp.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/jpeg.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/panel.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/panelparser.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/readcd.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/torgb.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CG.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CarbonEvents.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CarbonEvt.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CoreGraphics.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-sunos5/IN.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-sunos5/SUNAUDIODEV.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/runpy.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_aepack.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_binascii.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_grp.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_htmlparser.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_wsgiref.py (props changed)
Log:
remove svn:executable property from files that do not have a shebang line
From benjamin at codespeak.net Fri Mar 5 04:22:42 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Fri, 5 Mar 2010 04:22:42 +0100 (CET)
Subject: [pypy-svn] r71767 - in pypy/branch/import-fiddle/lib-python/2.5.2:
. lib-tk plat-irix5 plat-mac/Carbon plat-sunos5 test
Message-ID: <20100305032242.23BD4282BD9@codespeak.net>
Author: benjamin
Date: Fri Mar 5 04:22:39 2010
New Revision: 71767
Modified:
pypy/branch/import-fiddle/lib-python/2.5.2/lib-tk/Tix.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/AL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/CD.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/CL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/CL_old.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/DEVICE.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/ERRNO.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/FILE.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/FL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/GET.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/GL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/GLWS.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/IN.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/IOCTL.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/SV.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/WAIT.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/cddb.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/cdplayer.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/flp.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/jpeg.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/panel.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/panelparser.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/readcd.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-irix5/torgb.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CG.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CarbonEvents.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CarbonEvt.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-mac/Carbon/CoreGraphics.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-sunos5/IN.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/plat-sunos5/SUNAUDIODEV.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/runpy.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_aepack.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_binascii.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_grp.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_htmlparser.py (props changed)
pypy/branch/import-fiddle/lib-python/2.5.2/test/test_wsgiref.py (props changed)
Log:
revert change unintended for this branch
From getxsick at codespeak.net Fri Mar 5 04:23:43 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 04:23:43 +0100 (CET)
Subject: [pypy-svn] r71768 - in pypy/trunk: . pypy/doc
Message-ID: <20100305032343.534A8282BD9@codespeak.net>
Author: getxsick
Date: Fri Mar 5 04:23:41 2010
New Revision: 71768
Modified:
pypy/trunk/LICENSE
pypy/trunk/pypy/doc/contributor.txt
Log:
capitalize my name
Modified: pypy/trunk/LICENSE
==============================================================================
--- pypy/trunk/LICENSE (original)
+++ pypy/trunk/LICENSE Fri Mar 5 04:23:41 2010
@@ -85,7 +85,7 @@
Lukas Renggli
Guenter Jantzen
Dinu Gherman
- Bartosz SKOWRON
+ Bartosz Skowron
Georg Brandl
Ben Young
Jean-Paul Calderone
Modified: pypy/trunk/pypy/doc/contributor.txt
==============================================================================
--- pypy/trunk/pypy/doc/contributor.txt (original)
+++ pypy/trunk/pypy/doc/contributor.txt Fri Mar 5 04:23:41 2010
@@ -58,7 +58,7 @@
Lukas Renggli
Guenter Jantzen
Dinu Gherman
- Bartosz SKOWRON
+ Bartosz Skowron
Georg Brandl
Ben Young
Jean-Paul Calderone
From benjamin at codespeak.net Fri Mar 5 04:23:52 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Fri, 5 Mar 2010 04:23:52 +0100 (CET)
Subject: [pypy-svn] r71769 - in pypy/trunk/lib-python/2.5.2: . lib-tk
plat-irix5 plat-mac/Carbon plat-sunos5 test
Message-ID: <20100305032352.516ED282BD9@codespeak.net>
Author: benjamin
Date: Fri Mar 5 04:23:49 2010
New Revision: 71769
Modified:
pypy/trunk/lib-python/2.5.2/lib-tk/Tix.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/AL.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/CD.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/CL.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/CL_old.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/DEVICE.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/ERRNO.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/FILE.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/FL.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/GET.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/GL.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/GLWS.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/IN.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/IOCTL.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/SV.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/WAIT.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/cddb.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/cdplayer.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/flp.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/jpeg.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/panel.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/panelparser.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/readcd.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-irix5/torgb.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-mac/Carbon/CG.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-mac/Carbon/CarbonEvents.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-mac/Carbon/CarbonEvt.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-mac/Carbon/CoreGraphics.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-sunos5/IN.py (props changed)
pypy/trunk/lib-python/2.5.2/plat-sunos5/SUNAUDIODEV.py (props changed)
pypy/trunk/lib-python/2.5.2/runpy.py (props changed)
pypy/trunk/lib-python/2.5.2/test/test_aepack.py (props changed)
pypy/trunk/lib-python/2.5.2/test/test_binascii.py (props changed)
pypy/trunk/lib-python/2.5.2/test/test_grp.py (props changed)
pypy/trunk/lib-python/2.5.2/test/test_htmlparser.py (props changed)
pypy/trunk/lib-python/2.5.2/test/test_wsgiref.py (props changed)
Log:
remove svn:executable property from files that don't have a shebang line
From getxsick at codespeak.net Fri Mar 5 04:30:52 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 04:30:52 +0100 (CET)
Subject: [pypy-svn] r71770 - pypy/build/ubuntu/debian
Message-ID: <20100305033052.AF999282BD7@codespeak.net>
Author: getxsick
Date: Fri Mar 5 04:30:51 2010
New Revision: 71770
Modified:
pypy/build/ubuntu/debian/copyright
Log:
update copyright
Modified: pypy/build/ubuntu/debian/copyright
==============================================================================
--- pypy/build/ubuntu/debian/copyright (original)
+++ pypy/build/ubuntu/debian/copyright Fri Mar 5 04:30:51 2010
@@ -1,127 +1,185 @@
-This package was debianized by Alexandre Fayolle on
-Mon, 8 Jan 2007 19:13:59 +0100.
+This package was debianized by Bartosz Skowron on
+Fri, 05 Mar 2010 04:18:53 +0100.
-It was downloaded from .
+It was downloaded from .
Upstream Authors:
Armin Rigo
+ Maciej Fijalkowski
+ Carl Friedrich Bolz
Samuele Pedroni
+ Antonio Cuni
Michael Hudson
- Carl Friedrich Bolz
Christian Tismer
Holger Krekel
Eric van Riet Paap
- Antonio Cuni
- Anders Chrigstrom
- Maciek Fijalkowski
Richard Emslie
+ Anders Chrigstrom
+ Amaury Forgeot d Arc
Aurelien Campeas
Anders Lehmann
Niklaus Haldimann
Seo Sanghyeon
+ Leonardo Santagada
Lawrence Oluyede
- Alex Martelli
+ Jakub Gustak
+ Guido Wesdorp
+ Benjamin Peterson
+ Alexander Schremmer
+ Niko Matsakis
Ludovic Aubry
- Adrien Di Mascio
+ Alex Martelli
+ Toon Verwaest
Stephan Diehl
- Guido Wesdorp
+ Adrien Di Mascio
Stefan Schwarzer
Tomek Meka
Patrick Maupin
- Leonardo Santagada
- Bob Ippolito
- Laura Creighton
Jacob Hallen
+ Laura Creighton
+ Bob Ippolito
+ Camillo Bruni
+ Simon Burton
+ Bruno Gola
+ Alexandre Fayolle
Marius Gedminas
- Niko Matsakis
- Amaury Forgeot d Arc
Guido van Rossum
Valentino Volonghi
- Alexander Schremmer
- Alexandre Fayolle
- Wanja Saatkamp
+ Adrian Kuhn
+ Paul deGrandis
Gerald Klix
+ Wanja Saatkamp
+ Anders Hammarquist
+ Oscar Nierstrasz
Eugene Oden
- Dinu Gherman
+ Lukas Renggli
Guenter Jantzen
+ Dinu Gherman
+ Bartosz Skowron
+ Georg Brandl
Ben Young
+ Jean-Paul Calderone
Nicolas Chauvat
- Michael Twomey
Rocco Moretti
- Simon Burton
- Boris Feigin
+ Michael Twomey
+ boria
+ Jared Grubb
Olivier Dormond
- Gintautas Miliauskas
Stuart Williams
Jens-Uwe Mager
+ Justas Sadzevicius
+ Mikael Sch?nenberg
Brian Dorsey
Jonathan David Riehl
- Anders Qvist
Beatrice During
+ Elmo M?ntynen
Andreas Friedge
+ Alex Gaynor
+ Anders Qvist
Alan McIntyre
Bert Freudenberg
- Heinrich-Heine University, Germany
+ Heinrich-Heine University, Germany
Open End AB (formerly AB Strakt), Sweden
- merlinux GmbH, Germany
- tismerysoft GmbH, Germany
- Logilab Paris, France
- DFKI GmbH, Germany
+ merlinux GmbH, Germany
+ tismerysoft GmbH, Germany
+ Logilab Paris, France
+ DFKI GmbH, Germany
Impara, Germany
- Change Maker, Sweden
+ Change Maker, Sweden
License:
- Copyright (C) 2003-2007
+ Copyright (C) 2003-2010
- Except when otherwise stated (look for LICENSE files or information at
- the beginning of each file) the files in the 'pypy' directory are each
- copyrighted by one or more of the following people and organizations:
-
- Armin Rigo
- Samuele Pedroni
- Holger Krekel
- Christian Tismer
- Michael Hudson
- Carl Friedrich Bolz
- Eric van Riet Paap
- Richard Emslie
- Anders Chrigstrom
- Niklaus Haldimann
- Antonio Cuni
- Maciek Fijalkowski
- Aur?lien Camp?as
- Seo Sanghyeon
- Alex Martelli
- Anders Lehmann
- Stephan Diehl
- Patrick Maupin
- Ludovic Aubry
- Bob Ippolito
- Adrien Di Mascio
- Jacob Hallen
- Laura Creighton
- Marius Gedminas
- Amaury Forgeot d Arc
- Boris Feigin
- Valentino Volonghi
- Bert Freudenberg
- Andrew Thompson
- Jonathan David Riehl
- Amaury Forgeot D Arc
- Alexandre Fayolle
- Guido van Rossum
-
- Heinrich-Heine University, Germany
- AB Strakt, Sweden
- merlinux GmbH, Germany
- tismerysoft GmbH, Germany
- Logilab Paris, France
- DFKI GmbH, Germany
+Except when otherwise stated (look for LICENSE files or information at
+the beginning of each file) the files in the 'pypy' directory are each
+copyrighted by one or more of the following people and organizations:
+
+ Armin Rigo
+ Maciej Fijalkowski
+ Carl Friedrich Bolz
+ Samuele Pedroni
+ Antonio Cuni
+ Michael Hudson
+ Christian Tismer
+ Holger Krekel
+ Eric van Riet Paap
+ Richard Emslie
+ Anders Chrigstrom
+ Amaury Forgeot d Arc
+ Aurelien Campeas
+ Anders Lehmann
+ Niklaus Haldimann
+ Seo Sanghyeon
+ Leonardo Santagada
+ Lawrence Oluyede
+ Jakub Gustak
+ Guido Wesdorp
+ Benjamin Peterson
+ Alexander Schremmer
+ Niko Matsakis
+ Ludovic Aubry
+ Alex Martelli
+ Toon Verwaest
+ Stephan Diehl
+ Adrien Di Mascio
+ Stefan Schwarzer
+ Tomek Meka
+ Patrick Maupin
+ Jacob Hallen
+ Laura Creighton
+ Bob Ippolito
+ Camillo Bruni
+ Simon Burton
+ Bruno Gola
+ Alexandre Fayolle
+ Marius Gedminas
+ Guido van Rossum
+ Valentino Volonghi
+ Adrian Kuhn
+ Paul deGrandis
+ Gerald Klix
+ Wanja Saatkamp
+ Anders Hammarquist
+ Oscar Nierstrasz
+ Eugene Oden
+ Lukas Renggli
+ Guenter Jantzen
+ Dinu Gherman
+ Bartosz Skowron
+ Georg Brandl
+ Ben Young
+ Jean-Paul Calderone
+ Nicolas Chauvat
+ Rocco Moretti
+ Michael Twomey
+ boria
+ Jared Grubb
+ Olivier Dormond
+ Stuart Williams
+ Jens-Uwe Mager
+ Justas Sadzevicius
+ Mikael Sch?nenberg
+ Brian Dorsey
+ Jonathan David Riehl
+ Beatrice During
+ Elmo M?ntynen
+ Andreas Friedge
+ Alex Gaynor
+ Anders Qvist
+ Alan McIntyre
+ Bert Freudenberg
+
+ Heinrich-Heine University, Germany
+ Open End AB (formerly AB Strakt), Sweden
+ merlinux GmbH, Germany
+ tismerysoft GmbH, Germany
+ Logilab Paris, France
+ DFKI GmbH, Germany
Impara, Germany
- Change Maker, Sweden
+ Change Maker, Sweden
Permission is hereby granted, free of charge, to any person
@@ -144,56 +202,44 @@
DEALINGS IN THE SOFTWARE.
-License for 'lib-python/2.4.1' and 'lib-python/2.4.1-modified'
-==============================================================
+
+License for 'lib-python/2.5.2' and 'lib-python/2.5.2-modified'
+==============================================================
Except when otherwise stated (look for LICENSE files or
copyright/license information at the beginning of each file) the files
-in the 'lib-python/2.4.1' and 'lib-python/2.4.1-modified' directories
+in the 'lib-python/2.5.2' and 'lib-python/2.5.2-modified' directories
are all copyrighted by the Python Software Foundation and licensed under
the Python Software License of which you can find a copy here:
-http://www.python.org/doc/Copyright.html
+http://www.python.org/doc/Copyright.html
-License for files in pypy/modules/unicodedata
+License for 'pypy/translator/jvm/src/jna.jar'
=============================================
-The following files are from the website of The Unicode Consortium
-at . For the terms of use of these files, see
-.
-
- CompositionExclusions-3.2.0.txt
- CompositionExclusions-4.1.0.txt
- CompositionExclusions-5.0.0.txt
- EastAsianWidth-3.2.0.txt
- EastAsianWidth-4.1.0.txt
- EastAsianWidth-5.0.0.txt
- UnicodeData-3.2.0.txt
- UnicodeData-4.1.0.txt
- UnicodeData-5.0.0.txt
-
-The following files are derived from files from the above website. The same
-terms of use apply:
-
- UnihanNumeric-3.2.0.txt
- UnihanNumeric-4.1.0.txt
- UnihanNumeric-5.0.0.txt
-
-License for pyrex
-=================
-
-Copyright stuff: Pyrex is free of restrictions. You may use, redistribute,
-modify and distribute modified versions.
-
-The latest version of Pyrex can be found here:
-
-
-
-Greg Ewing, Computer Science Dept, +--------------------------------------+
-University of Canterbury, | A citizen of NewZealandCorp, a |
-Christchurch, New Zealand | wholly-owned subsidiary of USA Inc. |
-greg at cosc.canterbury.ac.nz
+The file 'pypy/translator/jvm/src/jna.jar' is licensed under the GNU
+Lesser General Public License of which you can find a copy here:
+http://www.gnu.org/licenses/lgpl.html
+
+License for 'pypy/translator/jvm/src/jasmin.jar'
+================================================
+
+The file 'pypy/translator/jvm/src/jasmin.jar' is copyright (c) 1996-2004 Jon Meyer
+and distributed with permission. The use of Jasmin by PyPy does not imply
+that PyPy is endorsed by Jon Meyer nor any of Jasmin's contributors. Furthermore,
+the following disclaimer applies to Jasmin:
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
The Debian packaging is (C) 2007, 2008 Alexandre Fayolle
, Sylvain Th?nault
- and Chris Lamb and is
-licensed under the GPL, see `/usr/share/common-licenses/GPL'.
+ and Chris Lamb
+The Debian packaging is (C) 2010 Bartosz Skowron
+The package is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
From getxsick at codespeak.net Fri Mar 5 04:35:36 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 04:35:36 +0100 (CET)
Subject: [pypy-svn] r71771 - pypy/build/ubuntu/debian
Message-ID: <20100305033536.AB7C5282BD7@codespeak.net>
Author: getxsick
Date: Fri Mar 5 04:35:35 2010
New Revision: 71771
Modified:
pypy/build/ubuntu/debian/pypy-doc.docs
Log:
add LICENSE to pypy-docs
Modified: pypy/build/ubuntu/debian/pypy-doc.docs
==============================================================================
--- pypy/build/ubuntu/debian/pypy-doc.docs (original)
+++ pypy/build/ubuntu/debian/pypy-doc.docs Fri Mar 5 04:35:35 2010
@@ -1,2 +1,3 @@
pypy/doc/*
README
+LICENSE
From fijal at codespeak.net Fri Mar 5 04:40:21 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 04:40:21 +0100 (CET)
Subject: [pypy-svn] r71772 - pypy/trunk/pypy/rpython/lltypesystem
Message-ID: <20100305034021.9677A282BD9@codespeak.net>
Author: fijal
Date: Fri Mar 5 04:40:19 2010
New Revision: 71772
Modified:
pypy/trunk/pypy/rpython/lltypesystem/rstr.py
Log:
Sprinkle purefunction a bit all over the place.
Use rgc.ll_shrink_array for slicing last item from the string
Modified: pypy/trunk/pypy/rpython/lltypesystem/rstr.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/rstr.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/rstr.py Fri Mar 5 04:40:19 2010
@@ -18,6 +18,7 @@
from pypy.rpython.rmodel import Repr
from pypy.rpython.lltypesystem import llmemory
from pypy.tool.sourcetools import func_with_new_name
+from pypy.rlib import rgc
# ____________________________________________________________
#
@@ -140,6 +141,7 @@
self.ll = LLHelpers
self.malloc = mallocunicode
+ @purefunction
def ll_str(self, s):
# XXX crazy that this is here, but I don't want to break
# rmodel logic
@@ -152,6 +154,7 @@
result.chars[i] = cast_primitive(Char, c)
return result
+ @purefunction
def ll_encode_latin1(self, s):
length = len(s.chars)
result = mallocstr(length)
@@ -162,7 +165,6 @@
result.chars[i] = cast_primitive(Char, c)
return result
-
class CharRepr(AbstractCharRepr, StringRepr):
lowleveltype = Char
@@ -236,6 +238,7 @@
class LLHelpers(AbstractLLHelpers):
+ @purefunction
def ll_char_mul(ch, times):
if typeOf(ch) is Char:
malloc = mallocstr
@@ -296,6 +299,7 @@
def ll_strfasthash(s):
return s.hash # assumes that the hash is already computed
+ @purefunction
def ll_strconcat(s1, s2):
len1 = len(s1.chars)
len2 = len(s2.chars)
@@ -304,6 +308,7 @@
s1.copy_contents(s2, newstr, 0, len1, len2)
return newstr
+ @purefunction
def ll_strip(s, ch, left, right):
s_len = len(s.chars)
if s_len == 0:
@@ -321,6 +326,7 @@
s.copy_contents(s, result, lpos, 0, r_len)
return result
+ @purefunction
def ll_upper(s):
s_chars = s.chars
s_len = len(s_chars)
@@ -337,6 +343,7 @@
i += 1
return result
+ @purefunction
def ll_lower(s):
s_chars = s.chars
s_len = len(s_chars)
@@ -377,6 +384,7 @@
i += 1
return result
+ @purefunction
def ll_strcmp(s1, s2):
if not s1 and not s2:
return True
@@ -419,6 +427,7 @@
return True
+ @purefunction
def ll_startswith(s1, s2):
len1 = len(s1.chars)
len2 = len(s2.chars)
@@ -434,6 +443,7 @@
return True
+ @purefunction
def ll_endswith(s1, s2):
len1 = len(s1.chars)
len2 = len(s2.chars)
@@ -450,6 +460,7 @@
return True
+ @purefunction
def ll_find_char(s, ch, start, end):
i = start
if end > len(s.chars):
@@ -460,6 +471,7 @@
i += 1
return -1
+ @purefunction
def ll_rfind_char(s, ch, start, end):
if end > len(s.chars):
end = len(s.chars)
@@ -470,6 +482,7 @@
return i
return -1
+ @purefunction
def ll_count_char(s, ch, start, end):
count = 0
i = start
@@ -481,6 +494,7 @@
i += 1
return count
+ @purefunction
def ll_find(cls, s1, s2, start, end):
"""Knuth Morris Prath algorithm for substring match"""
len2 = len(s2.chars)
@@ -515,6 +529,7 @@
return -1
ll_find = classmethod(ll_find)
+ @purefunction
def ll_rfind(cls, s1, s2, start, end):
"""Reversed version of ll_find()"""
len2 = len(s2.chars)
@@ -562,6 +577,7 @@
return -1
ll_rfind = classmethod(ll_rfind)
+ @purefunction
def ll_count(cls, s1, s2, start, end):
"""Knuth Morris Prath algorithm for substring match"""
# XXX more code should be shared with ll_find
@@ -640,6 +656,7 @@
i += 1
return result
+ @purefunction
def ll_stringslice_startonly(s1, start):
len1 = len(s1.chars)
newstr = s1.malloc(len1 - start)
@@ -649,6 +666,7 @@
s1.copy_contents(s1, newstr, start, 0, lgt)
return newstr
+ @purefunction
def ll_stringslice_startstop(s1, start, stop):
if stop >= len(s1.chars):
if start == 0:
@@ -661,12 +679,11 @@
s1.copy_contents(s1, newstr, start, 0, lgt)
return newstr
+ @purefunction
def ll_stringslice_minusone(s1):
newlen = len(s1.chars) - 1
- newstr = s1.malloc(newlen)
assert newlen >= 0
- s1.copy_contents(s1, newstr, 0, 0, newlen)
- return newstr
+ return rgc.ll_shrink_array(s1, newlen)
def ll_split_chr(LIST, s, c):
@@ -694,6 +711,7 @@
item.copy_contents(s, item, i, 0, j - i)
return res
+ @purefunction
def ll_replace_chr_chr(s, c1, c2):
length = len(s.chars)
newstr = s.malloc(length)
@@ -708,6 +726,7 @@
j += 1
return newstr
+ @purefunction
def ll_contains(s, c):
chars = s.chars
strlen = len(chars)
@@ -718,6 +737,7 @@
i += 1
return False
+ @purefunction
def ll_int(s, base):
if not 2 <= base <= 36:
raise ValueError
From fijal at codespeak.net Fri Mar 5 04:55:11 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 04:55:11 +0100 (CET)
Subject: [pypy-svn] r71773 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100305035511.9D510282BDA@codespeak.net>
Author: fijal
Date: Fri Mar 5 04:55:07 2010
New Revision: 71773
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
don't look into some of those functions
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 04:55:07 2010
@@ -147,6 +147,7 @@
#
importhook.unwrap_spec = [ObjSpace, str, W_Root, W_Root, W_Root, int]
+ at jit.dont_look_inside
def absolute_import(space, modulename, baselevel, fromlist_w, tentative):
lock = getimportlock(space)
lock.acquire_lock()
@@ -345,6 +346,7 @@
if pkgdir is not None:
space.setattr(w_mod, w('__path__'), space.newlist([w(pkgdir)]))
+ at jit.dont_look_inside
def load_module(space, w_modulename, find_info, reuse=False):
if find_info is None:
return
@@ -428,6 +430,7 @@
msg = "No module named %s"
raise operationerrfmt(space.w_ImportError, msg, modulename)
+ at jit.dont_look_inside
def reload(space, w_module):
"""Reload the module.
The module must have been successfully imported before."""
@@ -625,6 +628,7 @@
code_w.exec_code(space, w_dict, w_dict)
+ at jit.dont_look_inside
def load_source_module(space, w_modulename, w_mod, pathname, source,
write_pyc=True):
"""
@@ -724,6 +728,7 @@
"Non-code object in %s", cpathname)
return pycode
+ at jit.dont_look_inside
def load_compiled_module(space, w_modulename, w_mod, cpathname, magic,
timestamp, source):
"""
From fijal at codespeak.net Fri Mar 5 05:03:20 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 05:03:20 +0100 (CET)
Subject: [pypy-svn] r71774 - pypy/branch/import-fiddle/pypy/module/imp
Message-ID: <20100305040320.159B451055@codespeak.net>
Author: fijal
Date: Fri Mar 5 05:03:18 2010
New Revision: 71774
Modified:
pypy/branch/import-fiddle/pypy/module/imp/importing.py
Log:
one-if-too-far optimization
Modified: pypy/branch/import-fiddle/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-fiddle/pypy/module/imp/importing.py Fri Mar 5 05:03:18 2010
@@ -220,8 +220,7 @@
first = w_mod
tentative = 0
prefix.append(part)
- if fromlist_w is not None:
- w_path = try_getattr(space, w_mod, w('__path__'))
+ w_path = try_getattr(space, w_mod, w('__path__'))
level += 1
if fromlist_w is not None:
From getxsick at codespeak.net Fri Mar 5 05:12:29 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 05:12:29 +0100 (CET)
Subject: [pypy-svn] r71775 - in pypy/build/ubuntu/debian: . manpages scripts
Message-ID: <20100305041229.CE24C51057@codespeak.net>
Author: getxsick
Date: Fri Mar 5 05:12:27 2010
New Revision: 71775
Added:
pypy/build/ubuntu/debian/manpages/dotviewer.1
pypy/build/ubuntu/debian/manpages/graphserver.1
pypy/build/ubuntu/debian/manpages/sshgraphserver.1
pypy/build/ubuntu/debian/pypy-dotviewer.install
pypy/build/ubuntu/debian/pypy-dotviewer.manpages
pypy/build/ubuntu/debian/scripts/dotviewer
pypy/build/ubuntu/debian/scripts/graphserver
pypy/build/ubuntu/debian/scripts/sshgraphserver
Modified:
pypy/build/ubuntu/debian/changelog
pypy/build/ubuntu/debian/control
pypy/build/ubuntu/debian/manpages/pypy.1
Log:
add pypy-dotviewer package
Modified: pypy/build/ubuntu/debian/changelog
==============================================================================
--- pypy/build/ubuntu/debian/changelog (original)
+++ pypy/build/ubuntu/debian/changelog Fri Mar 5 05:12:27 2010
@@ -2,10 +2,11 @@
* New upstream release.
* New maintainer.
- * Only JIT-oriented upstream (e.g. stackless is dropped)
- * Rename pypy-translate to rpycompile
- * Run tests (-A, lib-python, JIT)
- * Switch to dpkg-source 3.0 (native) format
+ * Only JIT-oriented upstream (e.g. pypy-stackless is dropped).
+ * Rename pypy-translate to rpycompile.
+ * Add pypy-dotviewer package.
+ * Run tests (-A, lib-python, JIT) when binaries are built.
+ * Switch to dpkg-source 3.0 (native) format.
-- Bartosz Skowron Tue, 02 Mar 2010 18:08:37 +0100
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Fri Mar 5 05:12:27 2010
@@ -53,3 +53,10 @@
.
This package provides a version of the standard Python library suitable for
use with the PyPy interpreter, both interpreted and translated.
+
+Package: pypy-dotviewer
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, python-pygame, graphviz
+Recommends: pypy | pypy-dev
+Description: XXX
+ Description of the package
Added: pypy/build/ubuntu/debian/manpages/dotviewer.1
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/manpages/dotviewer.1 Fri Mar 5 05:12:27 2010
@@ -0,0 +1,15 @@
+.TH DOTVIEWER 1 "March 5, 2010"
+.SH NAME
+dotviewer \- PyPy visualization tool.
+.SH SYNOPSIS
+.B dotviewer
+.RI filename.(dot|plain)
+.SH OPTIONS
+In the first form, show the graph contained in a .dot file.
+In the second form, the graph was already compiled to a .plain file.
+.SH SEE ALSO
+.BR graphserver(1), sshgraphserver(1), pypy (1),
+.SH AUTHORS
+\fBPyPy\fP was written by the members of the PyPy project .
+.PP
+This manual page was originally written by Bartosz Skowron .
Added: pypy/build/ubuntu/debian/manpages/graphserver.1
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/manpages/graphserver.1 Fri Mar 5 05:12:27 2010
@@ -0,0 +1,11 @@
+.TH GRAPHSERVER 1 "March 5, 2010"
+.SH NAME
+graphserver \- PyPy visualization graph server.
+.SH DESCRIPTION
+From the command-line it's easier to use graphserver instead of this.
+.SH SEE ALSO
+.BR sshgraphserver (1), dotviewer (1), pypy (1),
+.SH AUTHORS
+\fBPyPy\fP was written by the members of the PyPy project .
+.PP
+This manual page was originally written by Bartosz Skowron .
Modified: pypy/build/ubuntu/debian/manpages/pypy.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/pypy.1 (original)
+++ pypy/build/ubuntu/debian/manpages/pypy.1 Fri Mar 5 05:12:27 2010
@@ -35,7 +35,7 @@
.B \-\-info
Print translation information about this PyPy executable.
.SH SEE ALSO
-.BR rpycompile (1),
+.BR rpycompile (1), dotviewer (1), graphserver(1), sshgraphserver(1),
.SH AUTHORS
\fBPyPy\fP was written by the members of the PyPy project .
.PP
Added: pypy/build/ubuntu/debian/manpages/sshgraphserver.1
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/manpages/sshgraphserver.1 Fri Mar 5 05:12:27 2010
@@ -0,0 +1,21 @@
+.TH SSHGRAPHSERVER 1 "March 5, 2010"
+.SH NAME
+sshgraphserver \- PyPy visualization SSH graph server.
+.SH SYNOPSIS
+.B sshgraphserver
+.RI hostname
+.SH OPTIONS
+other arguments for ssh.
+.SH DESCRIPTION
+Display locally the graphs that are built by dotviewer on remote machines.
+
+\fBsshgraphserver\fP logs in to 'hostname' by passing the arguments on the
+command-line to ssh. No further configuration is required: it works for all
+programs using the dotviewer library as long as they run on 'hostname' under
+the same username as the one sshgraphserver logs as.
+.SH SEE ALSO
+.BR graphserver (1), dotviewer (1), pypy (1),
+.SH AUTHORS
+\fBPyPy\fP was written by the members of the PyPy project .
+.PP
+This manual page was originally written by Bartosz Skowron .
Added: pypy/build/ubuntu/debian/pypy-dotviewer.install
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/pypy-dotviewer.install Fri Mar 5 05:12:27 2010
@@ -0,0 +1,4 @@
+dotviewer usr/share/pypy-1.2
+debian/scripts/dotviewer usr/bin
+debian/scripts/graphserver usr/bin
+debian/scripts/sshgraphserver usr/bin
Added: pypy/build/ubuntu/debian/pypy-dotviewer.manpages
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/pypy-dotviewer.manpages Fri Mar 5 05:12:27 2010
@@ -0,0 +1,3 @@
+debian/manpages/dotviewer.1
+debian/manpages/graphserver.1
+debian/manpages/sshgraphserver.1
Added: pypy/build/ubuntu/debian/scripts/dotviewer
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/scripts/dotviewer Fri Mar 5 05:12:27 2010
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/share/pypy-1.2/dotviewer/dotviewer.py "$@"
Added: pypy/build/ubuntu/debian/scripts/graphserver
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/scripts/graphserver Fri Mar 5 05:12:27 2010
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/share/pypy-1.2/dotviewer/graphserver.py "$@"
Added: pypy/build/ubuntu/debian/scripts/sshgraphserver
==============================================================================
--- (empty file)
+++ pypy/build/ubuntu/debian/scripts/sshgraphserver Fri Mar 5 05:12:27 2010
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/share/pypy-1.2/dotviewer/sshgraphserver.py "$@"
From getxsick at codespeak.net Fri Mar 5 05:18:39 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 05:18:39 +0100 (CET)
Subject: [pypy-svn] r71776 - pypy/build/ubuntu/debian
Message-ID: <20100305041839.0DC2B51057@codespeak.net>
Author: getxsick
Date: Fri Mar 5 05:18:38 2010
New Revision: 71776
Modified:
pypy/build/ubuntu/debian/control
Log:
set pypy-dotviewer for all architectures
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Fri Mar 5 05:18:38 2010
@@ -55,7 +55,7 @@
use with the PyPy interpreter, both interpreted and translated.
Package: pypy-dotviewer
-Architecture: any
+Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, python-pygame, graphviz
Recommends: pypy | pypy-dev
Description: XXX
From fijal at codespeak.net Fri Mar 5 05:19:12 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 05:19:12 +0100 (CET)
Subject: [pypy-svn] r71777 - pypy/build/ubuntu/debian
Message-ID: <20100305041912.DC6FD51058@codespeak.net>
Author: fijal
Date: Fri Mar 5 05:19:09 2010
New Revision: 71777
Modified:
pypy/build/ubuntu/debian/control
Log:
Kill python in python in python for python here
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Fri Mar 5 05:19:09 2010
@@ -11,14 +11,11 @@
Depends: ${shlibs:Depends}, ${misc:Depends}, pypy-lib (>= ${source:Version}), python, python-ctypes, gcc, libffi-dev, zlib1g-dev, libbz2-dev
Recommends: pypy-doc, python-dev, libgc-dev, llvm-cfe, mono-gmcs, spidermonkey-bin, jasmin-sable, libreadline5-dev
Suggests: gcl-dev
-Description: the Python in python interpreter, interpreted version
- The PyPy project aims to provide a Python implementation of the Python
- interpreter.
- .
- This package provides the interpreted version of PyPy, which requires
- a Python interpreter to run. It is able to translate itself using
- several backends. To do this, you will need to install some of the
- Recommended packages, as well as upgrade your machine with lots of RAM.
+Description: PyPy-dev is a compiler writing toolchain.
+ This package provides the toolchain (including source code) for developing
+ dynamic languages interpreters in RPython. It can be also used to compile
+ PyPy's Python interpreter, although we suggest downloading it from trunk
+ in this case.
.
Install this package if you want to translate RPython programs, or to
build a custom translated version of the PyPy interpreter.
@@ -26,33 +23,24 @@
Package: pypy
Architecture: i386
Depends: ${shlibs:Depends}, ${misc:Depends}, pypy-lib, libffi, zlib1g, libbz2-dev
-Description: the Python in Python interpreter, C backend translation
- The PyPy project aims to provide a Python implementation of the Python
- interpreter.
- .
- This package provides the PyPy interpreter compiled using the C backend
- and no special additionnal functionality. As such it can be used as another
- implementation of the Python language.
+Description: PyPy is a python interpreter with Just in time compiler.
+ This package provides a binary version of the compiled interpreter, together
+ with several supported modules.
Package: pypy-doc
Architecture: all
Section: doc
Description: Documentation for PyPy
- The PyPy project aims to provide a Python implementation of the Python
- interpreter.
- .
This package provides documentation for the PyPy interpreter, the translation
- process, etc. You will definitely need it if you intend to play with PyPy.
+ process, etc. You will definitely need it if you intend to play with PyPy,
+ however all of those docs are online.
Package: pypy-lib
Architecture: all
Recommends: pypy | pypy-dev
Description: standard Python library for PyPy
- The PyPy project aims to provide a Python implementation of the Python
- interpreter.
- .
This package provides a version of the standard Python library suitable for
- use with the PyPy interpreter, both interpreted and translated.
+ use with the PyPy interpreter.
Package: pypy-dotviewer
Architecture: all
From getxsick at codespeak.net Fri Mar 5 05:36:10 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 05:36:10 +0100 (CET)
Subject: [pypy-svn] r71778 - pypy/build/ubuntu/debian/manpages
Message-ID: <20100305043610.7A86651057@codespeak.net>
Author: getxsick
Date: Fri Mar 5 05:36:06 2010
New Revision: 71778
Modified:
pypy/build/ubuntu/debian/manpages/pypy.1
Log:
update manpage (JIT options)
Modified: pypy/build/ubuntu/debian/manpages/pypy.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/pypy.1 (original)
+++ pypy/build/ubuntu/debian/manpages/pypy.1 Fri Mar 5 05:36:06 2010
@@ -26,6 +26,9 @@
.B \-h, \-\-help
Show this help message and exit.
.TP
+.B \-W
+warning control (arg is action:message:category:module:lineno).
+.TP
.B \-m
Library module to be run as a script (terminates option list).
.TP
@@ -34,6 +37,24 @@
.TP
.B \-\-info
Print translation information about this PyPy executable.
+.TP
+.B \-\-jit debug=N
+low-level JIT parameter (default 2)
+.TP
+.B \-\-jit inlining=N
+low-level JIT parameter (default False)
+.TP
+.B \-\-jit optimizer=N
+low-level JIT parameter (default 1)
+.TP
+.B \-\-jit threshold=N
+low-level JIT parameter (default 1000)
+.TP
+.B \-\-jit trace_eagerness=N
+low-level JIT parameter (default 200)
+.TP
+.B \-\-jit trace_limit=N
+low-level JIT parameter (default 10000)
.SH SEE ALSO
.BR rpycompile (1), dotviewer (1), graphserver(1), sshgraphserver(1),
.SH AUTHORS
From fijal at codespeak.net Fri Mar 5 05:42:13 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 05:42:13 +0100 (CET)
Subject: [pypy-svn] r71779 - pypy/build/ubuntu/debian
Message-ID: <20100305044213.5A8DC282BD7@codespeak.net>
Author: fijal
Date: Fri Mar 5 05:42:11 2010
New Revision: 71779
Modified:
pypy/build/ubuntu/debian/control
Log:
Write a description for dotviewer
Modified: pypy/build/ubuntu/debian/control
==============================================================================
--- pypy/build/ubuntu/debian/control (original)
+++ pypy/build/ubuntu/debian/control Fri Mar 5 05:42:11 2010
@@ -46,5 +46,7 @@
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, python-pygame, graphviz
Recommends: pypy | pypy-dev
-Description: XXX
- Description of the package
+Description: A viewer for dot files and graphs generated by PyPy
+ This package provides a tool that can display .dot files in animated
+ manner. It's widely used by various PyPy's debugging tools, like
+ JIT assembler viewer, flowgraph viewer etc.
From getxsick at codespeak.net Fri Mar 5 05:45:54 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 05:45:54 +0100 (CET)
Subject: [pypy-svn] r71780 - pypy/build/ubuntu/debian
Message-ID: <20100305044554.5A74251055@codespeak.net>
Author: getxsick
Date: Fri Mar 5 05:45:52 2010
New Revision: 71780
Modified:
pypy/build/ubuntu/debian/copyright
Log:
add license for unicodedata
Modified: pypy/build/ubuntu/debian/copyright
==============================================================================
--- pypy/build/ubuntu/debian/copyright (original)
+++ pypy/build/ubuntu/debian/copyright Fri Mar 5 05:45:52 2010
@@ -237,6 +237,29 @@
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+License for 'pypy/module/unicodedata'
+=====================================
+
+The following files are from the website of The Unicode Consortium
+at http://www.unicode.org/. For the terms of use of these files, see
+http://www.unicode.org/terms_of_use.html
+
+ CompositionExclusions-3.2.0.txt
+ CompositionExclusions-4.1.0.txt
+ CompositionExclusions-5.0.0.txt
+ EastAsianWidth-3.2.0.txt
+ EastAsianWidth-4.1.0.txt
+ EastAsianWidth-5.0.0.txt
+ UnicodeData-3.2.0.txt
+ UnicodeData-4.1.0.txt
+ UnicodeData-5.0.0.txt
+
+The following files are derived from files from the above website. The same
+terms of use apply.
+ UnihanNumeric-3.2.0.txt
+ UnihanNumeric-4.1.0.txt
+ UnihanNumeric-5.0.0.txt
+
The Debian packaging is (C) 2007, 2008 Alexandre Fayolle
, Sylvain Th?nault
From fijal at codespeak.net Fri Mar 5 05:50:17 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 05:50:17 +0100 (CET)
Subject: [pypy-svn] r71781 - pypy/build/ubuntu/debian/manpages
Message-ID: <20100305045017.4E98B51057@codespeak.net>
Author: fijal
Date: Fri Mar 5 05:50:15 2010
New Revision: 71781
Modified:
pypy/build/ubuntu/debian/manpages/pypy.1
Log:
a bit update
Modified: pypy/build/ubuntu/debian/manpages/pypy.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/pypy.1 (original)
+++ pypy/build/ubuntu/debian/manpages/pypy.1 Fri Mar 5 05:50:15 2010
@@ -1,11 +1,11 @@
.TH PYPY 1 "March 4, 2010"
.SH NAME
-pypy \- PyPy Python interpreter compiled using the C backend.
+pypy \- PyPy's Python interpreter with a just in time compiler.
.SH SYNOPSIS
.B pypy
.RI [options]
.SH DESCRIPTION
-\fBpypy\fP is a Python interpreter compiled using the C backend.
+\fBpypy\fP is a Python interpreter with a just in time compiler.
.SH OPTIONS
.TP
.B \-i
@@ -39,7 +39,7 @@
Print translation information about this PyPy executable.
.TP
.B \-\-jit debug=N
-low-level JIT parameter (default 2)
+Set the verbosity of the jit (default: 2, 0 - turn it off)
.TP
.B \-\-jit inlining=N
low-level JIT parameter (default False)
From getxsick at codespeak.net Fri Mar 5 05:55:08 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 05:55:08 +0100 (CET)
Subject: [pypy-svn] r71782 - in pypy/build/ubuntu/debian: . manpages
Message-ID: <20100305045508.95FE051058@codespeak.net>
Author: getxsick
Date: Fri Mar 5 05:55:06 2010
New Revision: 71782
Modified:
pypy/build/ubuntu/debian/Makefile.in
pypy/build/ubuntu/debian/manpages/pypy.1
Log:
set --jit-debug=0 for translation
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Fri Mar 5 05:55:06 2010
@@ -1,7 +1,7 @@
TARGET=pypy/translator/goal/targetpypystandalone
TRANSLATE=pypy/translator/goal/translate.py
-TRANSLATEOPTS=--batch --source -Ojit
+TRANSLATEOPTS=--batch --source -Ojit --jit-debug=0
TARGETOPTS=%(TARGETOPTS)s
PREFIX=%(PREFIX)s
LOGIC=-o logic
Modified: pypy/build/ubuntu/debian/manpages/pypy.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/pypy.1 (original)
+++ pypy/build/ubuntu/debian/manpages/pypy.1 Fri Mar 5 05:55:06 2010
@@ -39,22 +39,22 @@
Print translation information about this PyPy executable.
.TP
.B \-\-jit debug=N
-Set the verbosity of the jit (default: 2, 0 - turn it off)
+Set the verbosity of the jit (default: 0)
.TP
.B \-\-jit inlining=N
-low-level JIT parameter (default False)
+low-level JIT parameter (default: False)
.TP
.B \-\-jit optimizer=N
-low-level JIT parameter (default 1)
+low-level JIT parameter (default: 1)
.TP
.B \-\-jit threshold=N
-low-level JIT parameter (default 1000)
+low-level JIT parameter (default: 1000)
.TP
.B \-\-jit trace_eagerness=N
-low-level JIT parameter (default 200)
+low-level JIT parameter (default: 200)
.TP
.B \-\-jit trace_limit=N
-low-level JIT parameter (default 10000)
+low-level JIT parameter (default: 10000)
.SH SEE ALSO
.BR rpycompile (1), dotviewer (1), graphserver(1), sshgraphserver(1),
.SH AUTHORS
From getxsick at codespeak.net Fri Mar 5 06:01:52 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 06:01:52 +0100 (CET)
Subject: [pypy-svn] r71783 - pypy/build/ubuntu/debian/manpages
Message-ID: <20100305050152.072AA51059@codespeak.net>
Author: getxsick
Date: Fri Mar 5 06:01:49 2010
New Revision: 71783
Modified:
pypy/build/ubuntu/debian/manpages/dotviewer.1
Log:
update description
Modified: pypy/build/ubuntu/debian/manpages/dotviewer.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/dotviewer.1 (original)
+++ pypy/build/ubuntu/debian/manpages/dotviewer.1 Fri Mar 5 06:01:49 2010
@@ -1,12 +1,16 @@
.TH DOTVIEWER 1 "March 5, 2010"
.SH NAME
-dotviewer \- PyPy visualization tool.
+dotviewer \- A viewer for dot files and graphs generated by PyPy
.SH SYNOPSIS
.B dotviewer
.RI filename.(dot|plain)
.SH OPTIONS
In the first form, show the graph contained in a .dot file.
In the second form, the graph was already compiled to a .plain file.
+.SH DESCRIPTION
+\fBdotviewer\fP provides a tool that can display .dot files in animated
+manner. It's widely used by various PyPy's debugging tools, like
+JIT assembler viewer, flowgraph viewer etc.
.SH SEE ALSO
.BR graphserver(1), sshgraphserver(1), pypy (1),
.SH AUTHORS
From fijal at codespeak.net Fri Mar 5 06:07:10 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 06:07:10 +0100 (CET)
Subject: [pypy-svn] r71784 - in pypy/trunk/pypy/jit: backend
backend/llsupport backend/test metainterp
Message-ID: <20100305050710.AA100282BD6@codespeak.net>
Author: fijal
Date: Fri Mar 5 06:07:07 2010
New Revision: 71784
Modified:
pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
pypy/trunk/pypy/jit/backend/model.py
pypy/trunk/pypy/jit/backend/test/test_random.py
pypy/trunk/pypy/jit/metainterp/executor.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
Log:
Revert 71737:71735. Apparently it broke some tests (test_sqlite in cpython
as well as translate). I cannot explain why, so I revert it.
To be investigated on a branch probably.
Modified: pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/llmodel.py Fri Mar 5 06:07:07 2010
@@ -14,15 +14,11 @@
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr, BaseCallDescr
-class CPUMutableContainer(object):
- _overflow_flag = False
-
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
- self.mutable = CPUMutableContainer()
assert type(opts) is not bool
self.opts = opts
@@ -54,19 +50,12 @@
self._setup_on_leave_jitted_translated()
else:
self._setup_on_leave_jitted_untranslated()
- self.class_sizes = {}
-
- def set_overflow_flag(self, val):
- self.mutable._overflow_flag = val
-
- def get_overflow_error(self):
- return self.mutable._overflow_flag
def setup(self):
pass
def set_class_sizes(self, class_sizes):
- self.class_sizes.update(class_sizes)
+ self.class_sizes = class_sizes
def _setup_prebuilt_error(self, prefix, Class):
if self.rtyper is not None: # normal case
@@ -116,8 +105,8 @@
v_i = _exception_emulator[1]
_exception_emulator[0] = 0
_exception_emulator[1] = 0
- self.mutable.saved_exception = tp_i
- self.mutable.saved_exc_value = self._cast_int_to_gcref(v_i)
+ self.saved_exception = tp_i
+ self.saved_exc_value = self._cast_int_to_gcref(v_i)
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -144,8 +133,8 @@
# from now on, the state is again consistent -- no more RPython
# exception is set. The following code produces a write barrier
# in the assignment to self.saved_exc_value, as needed.
- self.mutable.saved_exception = exception
- self.mutable.saved_exc_value = exc_value
+ self.saved_exception = exception
+ self.saved_exc_value = exc_value
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -183,14 +172,14 @@
return rffi.cast(lltype.Signed, f)
def get_exception(self):
- return self.mutable.saved_exception
+ return self.saved_exception
def get_exc_value(self):
- return self.mutable.saved_exc_value
+ return self.saved_exc_value
def clear_exception(self):
- self.mutable.saved_exception = 0
- self.mutable.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
+ self.saved_exception = 0
+ self.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
# ------------------- helpers and descriptions --------------------
Modified: pypy/trunk/pypy/jit/backend/model.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/model.py (original)
+++ pypy/trunk/pypy/jit/backend/model.py Fri Mar 5 06:07:07 2010
@@ -8,14 +8,9 @@
portal_calldescr = None
done_with_this_frame_int_v = -1
- _overflow_flag = False
-
def __init__(self):
self.fail_descr_list = []
- def _freeze_(self):
- return True
-
def get_fail_descr_number(self, descr):
assert isinstance(descr, history.AbstractFailDescr)
n = descr.index
@@ -118,12 +113,6 @@
def get_zero_division_error(self):
raise NotImplementedError
- def get_overflow_flag(self):
- return self._overflow_flag
-
- def set_overflow_flag(self, val):
- self._overflow_flag = val
-
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/trunk/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/test/test_random.py (original)
+++ pypy/trunk/pypy/jit/backend/test/test_random.py Fri Mar 5 06:07:07 2010
@@ -264,8 +264,8 @@
fail_subset = builder.subset_of_intvars(r)
original_intvars = builder.intvars[:]
super(AbstractOvfOperation, self).produce_into(builder, r)
- if builder.cpu.get_overflow_flag(): # overflow detected
- builder.cpu.set_overflow_flag(False)
+ if builder.cpu._overflow_flag: # overflow detected
+ del builder.cpu._overflow_flag
op = ResOperation(rop.GUARD_OVERFLOW, [], None)
# the overflowed result should not be used any more, but can
# be used on the failure path: recompute fail_subset including
Modified: pypy/trunk/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/executor.py (original)
+++ pypy/trunk/pypy/jit/metainterp/executor.py Fri Mar 5 06:07:07 2010
@@ -145,7 +145,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_sub_ovf(cpu, box1, box2):
@@ -158,7 +158,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_mul_ovf(cpu, box1, box2):
@@ -171,7 +171,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
# ----------
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Fri Mar 5 06:07:07 2010
@@ -1898,8 +1898,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu.get_overflow_flag():
- self.cpu.set_overflow_flag(False)
+ if self.cpu._overflow_flag:
+ self.cpu._overflow_flag = False
frame.generate_guard(frame.pc, rop.GUARD_OVERFLOW, None, [])
return self.raise_overflow_error()
else:
From fijal at codespeak.net Fri Mar 5 06:20:58 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 06:20:58 +0100 (CET)
Subject: [pypy-svn] r71785 - in pypy/branch/import-fiddle/pypy/jit: backend
backend/llsupport backend/test metainterp
Message-ID: <20100305052058.1031E282BD7@codespeak.net>
Author: fijal
Date: Fri Mar 5 06:20:55 2010
New Revision: 71785
Modified:
pypy/branch/import-fiddle/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/import-fiddle/pypy/jit/backend/model.py
pypy/branch/import-fiddle/pypy/jit/backend/test/test_random.py
pypy/branch/import-fiddle/pypy/jit/metainterp/executor.py
pypy/branch/import-fiddle/pypy/jit/metainterp/pyjitpl.py
Log:
Merge 71784 from trunk, so I can isolate potential issues
Modified: pypy/branch/import-fiddle/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/import-fiddle/pypy/jit/backend/llsupport/llmodel.py Fri Mar 5 06:20:55 2010
@@ -14,15 +14,11 @@
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr, BaseCallDescr
-class CPUMutableContainer(object):
- _overflow_flag = False
-
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
- self.mutable = CPUMutableContainer()
assert type(opts) is not bool
self.opts = opts
@@ -54,19 +50,12 @@
self._setup_on_leave_jitted_translated()
else:
self._setup_on_leave_jitted_untranslated()
- self.class_sizes = {}
-
- def set_overflow_flag(self, val):
- self.mutable._overflow_flag = val
-
- def get_overflow_error(self):
- return self.mutable._overflow_flag
def setup(self):
pass
def set_class_sizes(self, class_sizes):
- self.class_sizes.update(class_sizes)
+ self.class_sizes = class_sizes
def _setup_prebuilt_error(self, prefix, Class):
if self.rtyper is not None: # normal case
@@ -116,8 +105,8 @@
v_i = _exception_emulator[1]
_exception_emulator[0] = 0
_exception_emulator[1] = 0
- self.mutable.saved_exception = tp_i
- self.mutable.saved_exc_value = self._cast_int_to_gcref(v_i)
+ self.saved_exception = tp_i
+ self.saved_exc_value = self._cast_int_to_gcref(v_i)
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -144,8 +133,8 @@
# from now on, the state is again consistent -- no more RPython
# exception is set. The following code produces a write barrier
# in the assignment to self.saved_exc_value, as needed.
- self.mutable.saved_exception = exception
- self.mutable.saved_exc_value = exc_value
+ self.saved_exception = exception
+ self.saved_exc_value = exc_value
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -183,14 +172,14 @@
return rffi.cast(lltype.Signed, f)
def get_exception(self):
- return self.mutable.saved_exception
+ return self.saved_exception
def get_exc_value(self):
- return self.mutable.saved_exc_value
+ return self.saved_exc_value
def clear_exception(self):
- self.mutable.saved_exception = 0
- self.mutable.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
+ self.saved_exception = 0
+ self.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
# ------------------- helpers and descriptions --------------------
Modified: pypy/branch/import-fiddle/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/jit/backend/model.py (original)
+++ pypy/branch/import-fiddle/pypy/jit/backend/model.py Fri Mar 5 06:20:55 2010
@@ -8,14 +8,9 @@
portal_calldescr = None
done_with_this_frame_int_v = -1
- _overflow_flag = False
-
def __init__(self):
self.fail_descr_list = []
- def _freeze_(self):
- return True
-
def get_fail_descr_number(self, descr):
assert isinstance(descr, history.AbstractFailDescr)
n = descr.index
@@ -118,12 +113,6 @@
def get_zero_division_error(self):
raise NotImplementedError
- def get_overflow_flag(self):
- return self._overflow_flag
-
- def set_overflow_flag(self, val):
- self._overflow_flag = val
-
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/branch/import-fiddle/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/import-fiddle/pypy/jit/backend/test/test_random.py Fri Mar 5 06:20:55 2010
@@ -264,8 +264,8 @@
fail_subset = builder.subset_of_intvars(r)
original_intvars = builder.intvars[:]
super(AbstractOvfOperation, self).produce_into(builder, r)
- if builder.cpu.get_overflow_flag(): # overflow detected
- builder.cpu.set_overflow_flag(False)
+ if builder.cpu._overflow_flag: # overflow detected
+ del builder.cpu._overflow_flag
op = ResOperation(rop.GUARD_OVERFLOW, [], None)
# the overflowed result should not be used any more, but can
# be used on the failure path: recompute fail_subset including
Modified: pypy/branch/import-fiddle/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/import-fiddle/pypy/jit/metainterp/executor.py Fri Mar 5 06:20:55 2010
@@ -145,7 +145,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_sub_ovf(cpu, box1, box2):
@@ -158,7 +158,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_mul_ovf(cpu, box1, box2):
@@ -171,7 +171,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
# ----------
Modified: pypy/branch/import-fiddle/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/import-fiddle/pypy/jit/metainterp/pyjitpl.py Fri Mar 5 06:20:55 2010
@@ -1898,8 +1898,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu.get_overflow_flag():
- self.cpu.set_overflow_flag(False)
+ if self.cpu._overflow_flag:
+ self.cpu._overflow_flag = False
frame.generate_guard(frame.pc, rop.GUARD_OVERFLOW, None, [])
return self.raise_overflow_error()
else:
From fijal at codespeak.net Fri Mar 5 06:21:43 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 06:21:43 +0100 (CET)
Subject: [pypy-svn] r71786 - in pypy/branch/cleanup-warnings/pypy/jit:
backend backend/llsupport backend/test metainterp
Message-ID: <20100305052143.4DB265105A@codespeak.net>
Author: fijal
Date: Fri Mar 5 06:21:41 2010
New Revision: 71786
Modified:
pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py
Log:
Merge 71784 from trunk
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py Fri Mar 5 06:21:41 2010
@@ -14,15 +14,11 @@
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr, BaseCallDescr
-class CPUMutableContainer(object):
- _overflow_flag = False
-
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
- self.mutable = CPUMutableContainer()
assert type(opts) is not bool
self.opts = opts
@@ -54,19 +50,12 @@
self._setup_on_leave_jitted_translated()
else:
self._setup_on_leave_jitted_untranslated()
- self.class_sizes = {}
-
- def set_overflow_flag(self, val):
- self.mutable._overflow_flag = val
-
- def get_overflow_error(self):
- return self.mutable._overflow_flag
def setup(self):
pass
def set_class_sizes(self, class_sizes):
- self.class_sizes.update(class_sizes)
+ self.class_sizes = class_sizes
def _setup_prebuilt_error(self, prefix, Class):
if self.rtyper is not None: # normal case
@@ -116,8 +105,8 @@
v_i = _exception_emulator[1]
_exception_emulator[0] = 0
_exception_emulator[1] = 0
- self.mutable.saved_exception = tp_i
- self.mutable.saved_exc_value = self._cast_int_to_gcref(v_i)
+ self.saved_exception = tp_i
+ self.saved_exc_value = self._cast_int_to_gcref(v_i)
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -144,8 +133,8 @@
# from now on, the state is again consistent -- no more RPython
# exception is set. The following code produces a write barrier
# in the assignment to self.saved_exc_value, as needed.
- self.mutable.saved_exception = exception
- self.mutable.saved_exc_value = exc_value
+ self.saved_exception = exception
+ self.saved_exc_value = exc_value
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -183,14 +172,14 @@
return rffi.cast(lltype.Signed, f)
def get_exception(self):
- return self.mutable.saved_exception
+ return self.saved_exception
def get_exc_value(self):
- return self.mutable.saved_exc_value
+ return self.saved_exc_value
def clear_exception(self):
- self.mutable.saved_exception = 0
- self.mutable.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
+ self.saved_exception = 0
+ self.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
# ------------------- helpers and descriptions --------------------
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/model.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/model.py Fri Mar 5 06:21:41 2010
@@ -8,14 +8,9 @@
portal_calldescr = None
done_with_this_frame_int_v = -1
- _overflow_flag = False
-
def __init__(self):
self.fail_descr_list = []
- def _freeze_(self):
- return True
-
def get_fail_descr_number(self, descr):
assert isinstance(descr, history.AbstractFailDescr)
n = descr.index
@@ -118,12 +113,6 @@
def get_zero_division_error(self):
raise NotImplementedError
- def get_overflow_flag(self):
- return self._overflow_flag
-
- def set_overflow_flag(self, val):
- self._overflow_flag = val
-
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py Fri Mar 5 06:21:41 2010
@@ -264,8 +264,8 @@
fail_subset = builder.subset_of_intvars(r)
original_intvars = builder.intvars[:]
super(AbstractOvfOperation, self).produce_into(builder, r)
- if builder.cpu.get_overflow_flag(): # overflow detected
- builder.cpu.set_overflow_flag(False)
+ if builder.cpu._overflow_flag: # overflow detected
+ del builder.cpu._overflow_flag
op = ResOperation(rop.GUARD_OVERFLOW, [], None)
# the overflowed result should not be used any more, but can
# be used on the failure path: recompute fail_subset including
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py Fri Mar 5 06:21:41 2010
@@ -145,7 +145,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_sub_ovf(cpu, box1, box2):
@@ -158,7 +158,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_mul_ovf(cpu, box1, box2):
@@ -171,7 +171,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
# ----------
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py Fri Mar 5 06:21:41 2010
@@ -1898,8 +1898,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu.get_overflow_flag():
- self.cpu.set_overflow_flag(False)
+ if self.cpu._overflow_flag:
+ self.cpu._overflow_flag = False
frame.generate_guard(frame.pc, rop.GUARD_OVERFLOW, None, [])
return self.raise_overflow_error()
else:
From dan at codespeak.net Fri Mar 5 07:52:42 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Fri, 5 Mar 2010 07:52:42 +0100 (CET)
Subject: [pypy-svn] r71787 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100305065242.6EC0651057@codespeak.net>
Author: dan
Date: Fri Mar 5 07:52:39 2010
New Revision: 71787
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
More tests, fixed some logic in DynamicType as a result.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py Fri Mar 5 07:52:39 2010
@@ -42,14 +42,9 @@
elif self.name == code:
return space.w_True
else:
- xxx
- return space.w_False
+ raise OperationError(space.w_TypeError, space.wrap("data type not understood"))
except OperationError, e:
- xxx
- return space.w_False
- except TypeError, e:
- xxx
- return space.w_False #FIXME: need to throw applevel type error
+ raise OperationError(space.w_TypeError, space.wrap("data type not understood"))
descr_eq.unwrap_spec = ['self', ObjSpace, W_Root]
DynamicType.typedef = TypeDef('dtype',
__eq__ = interp2app(DynamicType.descr_eq),
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Fri Mar 5 07:52:39 2010
@@ -281,6 +281,27 @@
assert compare(ar[0], ar[2])
assert compare(ar[..., 0], [0, 3, 0])
+class AppTestDType(object):
+ def setup_class(cls):
+ cls.space = gettestobjspace(usemodules=('micronumpy',))
+ #FIXME: need DynamicType.__new__/__init__ to best test this
+ def test_eq(self):
+ from numpy import zeros
+
+ a = zeros((4,), dtype=int)
+ assert a.dtype == int
+ assert a.dtype == 'i'
+ assert a.dtype == 'int32'
+ raises((TypeError,), a.dtype, 'in')
+ raises((TypeError,), a.dtype.__eq__, 3)
+
+ b = zeros((4,), dtype=float)
+ assert b.dtype == float
+ assert b.dtype == 'd'
+ assert b.dtype == 'float64'
+ raises((TypeError,), b.dtype, 'flo')
+ raises((TypeError,), b.dtype.__eq__, 3)
+
class TestDType(object):
def test_lookups(self, space):
from pypy.module.micronumpy.dtype import retrieve_dtype
From arigo at codespeak.net Fri Mar 5 09:50:22 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 09:50:22 +0100 (CET)
Subject: [pypy-svn] r71788 - in pypy/trunk/pypy: jit/backend/llsupport
jit/backend/llsupport/test rpython/memory/gctransform
translator/c/gcc translator/c/gcc/test translator/c/gcc/test/elf
Message-ID: <20100305085022.5A24F282BD7@codespeak.net>
Author: arigo
Date: Fri Mar 5 09:50:21 2010
New Revision: 71788
Modified:
pypy/trunk/pypy/jit/backend/llsupport/gc.py
pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py
pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py
pypy/trunk/pypy/translator/c/gcc/instruction.py
pypy/trunk/pypy/translator/c/gcc/test/elf/track4.s
pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s
pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py
pypy/trunk/pypy/translator/c/gcc/trackgcroot.py
Log:
Simplify a bit the encoding used for the location of asmgcroots:
by separating the EBP+N and EBP-N cases we avoid the issue of
encoding possibly-negative integers.
Modified: pypy/trunk/pypy/jit/backend/llsupport/gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/gc.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/gc.py Fri Mar 5 09:50:21 2010
@@ -202,10 +202,10 @@
"""Handles locating the stack roots in the assembler.
This is the class supporting --gcrootfinder=asmgcc.
"""
- LOC_NOWHERE = 0
- LOC_REG = 1
- LOC_EBP_BASED = 2
- LOC_ESP_BASED = 3
+ LOC_REG = 0
+ LOC_ESP_PLUS = 1
+ LOC_EBP_PLUS = 2
+ LOC_EBP_MINUS = 3
GCMAP_ARRAY = rffi.CArray(llmemory.Address)
CALLSHAPE_ARRAY = rffi.CArray(rffi.UCHAR)
@@ -252,37 +252,38 @@
lltype.free(oldgcmap, flavor='raw')
def get_basic_shape(self):
- return [self.LOC_EBP_BASED | 4, # return addr: at 4(%ebp)
- self.LOC_EBP_BASED | (-4), # saved %ebx: at -4(%ebp)
- self.LOC_EBP_BASED | (-8), # saved %esi: at -8(%ebp)
- self.LOC_EBP_BASED | (-12), # saved %edi: at -12(%ebp)
- self.LOC_EBP_BASED | 0, # saved %ebp: at (%ebp)
+ return [self.LOC_EBP_PLUS | 4, # return addr: at 4(%ebp)
+ self.LOC_EBP_MINUS | 4, # saved %ebx: at -4(%ebp)
+ self.LOC_EBP_MINUS | 8, # saved %esi: at -8(%ebp)
+ self.LOC_EBP_MINUS | 12, # saved %edi: at -12(%ebp)
+ self.LOC_EBP_PLUS | 0, # saved %ebp: at (%ebp)
0]
def add_ebp_offset(self, shape, offset):
assert (offset & 3) == 0
- shape.append(self.LOC_EBP_BASED | offset)
+ if offset >= 0:
+ encoded = self.LOC_EBP_PLUS | offset
+ else:
+ encoded = self.LOC_EBP_MINUS | (-offset)
+ shape.append(encoded)
def add_ebx(self, shape):
- shape.append(self.LOC_REG | 0)
+ shape.append(self.LOC_REG | 4)
def add_esi(self, shape):
- shape.append(self.LOC_REG | 4)
+ shape.append(self.LOC_REG | 8)
def add_edi(self, shape):
- shape.append(self.LOC_REG | 8)
+ shape.append(self.LOC_REG | 12)
def add_ebp(self, shape):
- shape.append(self.LOC_REG | 12)
+ shape.append(self.LOC_REG | 16)
def compress_callshape(self, shape):
# Similar to compress_callshape() in trackgcroot.py. XXX a bit slowish
result = []
for loc in shape:
- if loc < 0:
- loc = (-loc) * 2 - 1
- else:
- loc = loc * 2
+ assert loc >= 0
flag = 0
while loc >= 0x80:
result.append(int(loc & 0x7F) | flag)
Modified: pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py Fri Mar 5 09:50:21 2010
@@ -64,29 +64,28 @@
def frame_pos(n):
return -4*(4+n)
gcrootmap = GcRootMap_asmgcc()
- num1 = frame_pos(1)
+ num1 = frame_pos(-5)
num2 = frame_pos(55)
shape = gcrootmap.get_basic_shape()
gcrootmap.add_ebp_offset(shape, num1)
gcrootmap.add_ebp_offset(shape, num2)
- assert shape == [6, -2, -6, -10, 2, 0, num1|2, num2|2]
+ assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3]
gcrootmap.add_ebx(shape)
- assert shape == [6, -2, -6, -10, 2, 0, num1|2, num2|2, 0|1]
+ assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4]
gcrootmap.add_esi(shape)
- assert shape == [6, -2, -6, -10, 2, 0, num1|2, num2|2, 0|1, 4|1]
+ assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4, 8]
gcrootmap.add_edi(shape)
- assert shape == [6, -2, -6, -10, 2, 0, num1|2, num2|2, 0|1, 4|1, 8|1]
+ assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4, 8, 12]
gcrootmap.add_ebp(shape)
- assert shape == [6, -2, -6, -10, 2, 0, num1|2, num2|2, 0|1, 4|1, 8|1, 12|1]
+ assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4, 8, 12, 16]
#
shapeaddr = gcrootmap.compress_callshape(shape)
PCALLSHAPE = lltype.Ptr(GcRootMap_asmgcc.CALLSHAPE_ARRAY)
p = llmemory.cast_adr_to_ptr(shapeaddr, PCALLSHAPE)
- num1a = -2*(num1|2)-1
- num2a = ((-2*(num2|2)-1) >> 7) | 128
- num2b = (-2*(num2|2)-1) & 127
- for i, expected in enumerate([26, 18, 10, 2,
- num2a, num2b, num1a, 0, 4, 19, 11, 3, 12]):
+ num2a = ((-num2|3) >> 7) | 128
+ num2b = (-num2|3) & 127
+ for i, expected in enumerate([16, 12, 8, 4,
+ num2a, num2b, num1|2, 0, 2, 15, 11, 7, 6]):
assert p[i] == expected
#
retaddr = rffi.cast(llmemory.Address, 1234567890)
@@ -97,14 +96,14 @@
#
# the same as before, but enough times to trigger a few resizes
expected_shapeaddr = {}
- for i in range(1, 600):
+ for i in range(1, 700):
shape = gcrootmap.get_basic_shape()
gcrootmap.add_ebp_offset(shape, frame_pos(i))
shapeaddr = gcrootmap.compress_callshape(shape)
expected_shapeaddr[i] = shapeaddr
retaddr = rffi.cast(llmemory.Address, 123456789 + i)
gcrootmap.put(retaddr, shapeaddr)
- for i in range(1, 600):
+ for i in range(1, 700):
expected_retaddr = rffi.cast(llmemory.Address, 123456789 + i)
assert gcrootmap._gcmap[i*2+0] == expected_retaddr
assert gcrootmap._gcmap[i*2+1] == expected_shapeaddr[i]
Modified: pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py
==============================================================================
--- pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py (original)
+++ pypy/trunk/pypy/rpython/memory/gctransform/asmgcroot.py Fri Mar 5 09:50:21 2010
@@ -313,29 +313,32 @@
on the integer 'location' that describes it. All locations are
computed based on information saved by the 'callee'.
"""
+ ll_assert(location >= 0, "negative location")
kind = location & LOC_MASK
+ offset = location & ~ LOC_MASK
if kind == LOC_REG: # register
- reg = location >> 2
- ll_assert(0 <= reg < CALLEE_SAVED_REGS, "bad register location")
+ if location == LOC_NOWHERE:
+ return llmemory.NULL
+ reg = (location >> 2) - 1
+ ll_assert(reg < CALLEE_SAVED_REGS, "bad register location")
return callee.regs_stored_at[reg]
- elif kind == LOC_ESP_BASED: # in the caller stack frame at N(%esp)
- offset = location & ~ LOC_MASK
- ll_assert(offset >= 0, "bad %esp-based location")
+ elif kind == LOC_ESP_PLUS: # in the caller stack frame at N(%esp)
esp_in_caller = callee.frame_address + 4
return esp_in_caller + offset
- elif kind == LOC_EBP_BASED: # in the caller stack frame at N(%ebp)
- offset = location & ~ LOC_MASK
+ elif kind == LOC_EBP_PLUS: # in the caller stack frame at N(%ebp)
ebp_in_caller = callee.regs_stored_at[INDEX_OF_EBP].address[0]
return ebp_in_caller + offset
- else:
- return llmemory.NULL
+ else: # kind == LOC_EBP_MINUS: at -N(%ebp)
+ ebp_in_caller = callee.regs_stored_at[INDEX_OF_EBP].address[0]
+ return ebp_in_caller - offset
-LOC_NOWHERE = 0
-LOC_REG = 1
-LOC_EBP_BASED = 2
-LOC_ESP_BASED = 3
+LOC_REG = 0
+LOC_ESP_PLUS = 1
+LOC_EBP_PLUS = 2
+LOC_EBP_MINUS = 3
LOC_MASK = 0x03
+LOC_NOWHERE = LOC_REG | 0
# ____________________________________________________________
@@ -440,9 +443,6 @@
break
value = (value - 0x80) << 7
self.addr = addr
- if value & 1:
- value = ~ value
- value = value >> 1
return value
# ____________________________________________________________
Modified: pypy/trunk/pypy/translator/c/gcc/instruction.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/instruction.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/instruction.py Fri Mar 5 09:50:21 2010
@@ -1,13 +1,21 @@
-LOC_NOWHERE = 0
-LOC_REG = 1
-LOC_EBP_BASED = 2
-LOC_ESP_BASED = 3
+LOC_REG = 0
+LOC_ESP_PLUS = 1
+LOC_EBP_PLUS = 2
+LOC_EBP_MINUS = 3
LOC_MASK = 0x03
+LOC_NOWHERE = LOC_REG | 0
-def frameloc(base, offset):
- assert base in (LOC_EBP_BASED, LOC_ESP_BASED)
+def frameloc_esp(offset):
+ assert offset >= 0
assert offset % 4 == 0
- return base | offset
+ return LOC_ESP_PLUS | offset
+
+def frameloc_ebp(offset):
+ assert offset % 4 == 0
+ if offset >= 0:
+ return LOC_EBP_PLUS | offset
+ else:
+ return LOC_EBP_MINUS | (-offset)
class SomeNewValue(object):
@@ -40,12 +48,12 @@
# try to use esp-relative addressing
ofs_from_esp = framesize + self.ofs_from_frame_end
if ofs_from_esp % 2 == 0:
- return frameloc(LOC_ESP_BASED, ofs_from_esp)
+ return frameloc_esp(ofs_from_esp)
# we can get an odd value if the framesize is marked as bogus
# by visit_andl()
assert uses_frame_pointer
ofs_from_ebp = self.ofs_from_frame_end + 4
- return frameloc(LOC_EBP_BASED, ofs_from_ebp)
+ return frameloc_ebp(ofs_from_ebp)
class Insn(object):
Modified: pypy/trunk/pypy/translator/c/gcc/test/elf/track4.s
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/elf/track4.s (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/elf/track4.s Fri Mar 5 09:50:21 2010
@@ -26,7 +26,7 @@
movl %esi, %ebx
movl $nonsense, %esi
call foobar
- ;; expected {4(%ebp) | -8(%ebp), %ebx, -4(%ebp), (%ebp) | -12(%ebp), 4(%esp)}
+ ;; expected {4(%ebp) | -8(%ebp), %ebx, -4(%ebp), (%ebp) | 4(%esp), -12(%ebp)}
addl %edi, %eax
movl 4(%esp), %eax
movl %ebx, %esi
Modified: pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s Fri Mar 5 09:50:21 2010
@@ -13,7 +13,7 @@
movl $globalptr2, (%esp)
pushl $0
call foobar
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | -4(%ebp), 4(%esp)}
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | 4(%esp), -4(%ebp)}
popl %eax
#APP
/* GCROOT -4(%ebp) */
Modified: pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/test_trackgcroot.py Fri Mar 5 09:50:21 2010
@@ -3,7 +3,8 @@
from pypy.translator.c.gcc.trackgcroot import format_location
from pypy.translator.c.gcc.trackgcroot import format_callshape
from pypy.translator.c.gcc.trackgcroot import LOC_NOWHERE, LOC_REG
-from pypy.translator.c.gcc.trackgcroot import LOC_EBP_BASED, LOC_ESP_BASED
+from pypy.translator.c.gcc.trackgcroot import LOC_EBP_PLUS, LOC_EBP_MINUS
+from pypy.translator.c.gcc.trackgcroot import LOC_ESP_PLUS
from pypy.translator.c.gcc.trackgcroot import ElfAssemblerParser
from pypy.translator.c.gcc.trackgcroot import DarwinAssemblerParser
from pypy.translator.c.gcc.trackgcroot import compress_callshape
@@ -16,32 +17,31 @@
def test_format_location():
assert format_location(LOC_NOWHERE) == '?'
- assert format_location(LOC_REG | (0<<2)) == '%ebx'
- assert format_location(LOC_REG | (1<<2)) == '%esi'
- assert format_location(LOC_REG | (2<<2)) == '%edi'
- assert format_location(LOC_REG | (3<<2)) == '%ebp'
- assert format_location(LOC_EBP_BASED + 0) == '(%ebp)'
- assert format_location(LOC_EBP_BASED + 4) == '4(%ebp)'
- assert format_location(LOC_EBP_BASED - 4) == '-4(%ebp)'
- assert format_location(LOC_ESP_BASED + 0) == '(%esp)'
- assert format_location(LOC_ESP_BASED + 4) == '4(%esp)'
- assert format_location(LOC_ESP_BASED - 4) == '-4(%esp)'
+ assert format_location(LOC_REG | (1<<2)) == '%ebx'
+ assert format_location(LOC_REG | (2<<2)) == '%esi'
+ assert format_location(LOC_REG | (3<<2)) == '%edi'
+ assert format_location(LOC_REG | (4<<2)) == '%ebp'
+ assert format_location(LOC_EBP_PLUS + 0) == '(%ebp)'
+ assert format_location(LOC_EBP_PLUS + 4) == '4(%ebp)'
+ assert format_location(LOC_EBP_MINUS + 4) == '-4(%ebp)'
+ assert format_location(LOC_ESP_PLUS + 0) == '(%esp)'
+ assert format_location(LOC_ESP_PLUS + 4) == '4(%esp)'
def test_format_callshape():
expected = ('{4(%ebp) ' # position of the return address
'| 8(%ebp), 12(%ebp), 16(%ebp), 20(%ebp) ' # 4 saved regs
'| 24(%ebp), 28(%ebp)}') # GC roots
- assert format_callshape((LOC_EBP_BASED+4,
- LOC_EBP_BASED+8,
- LOC_EBP_BASED+12,
- LOC_EBP_BASED+16,
- LOC_EBP_BASED+20,
- LOC_EBP_BASED+24,
- LOC_EBP_BASED+28)) == expected
+ assert format_callshape((LOC_EBP_PLUS+4,
+ LOC_EBP_PLUS+8,
+ LOC_EBP_PLUS+12,
+ LOC_EBP_PLUS+16,
+ LOC_EBP_PLUS+20,
+ LOC_EBP_PLUS+24,
+ LOC_EBP_PLUS+28)) == expected
def test_compress_callshape():
- shape = (1, -3, 0x1234, -0x5678, 0x234567,
- -0x765432, 0x61626364, -0x41424344)
+ shape = (1, 127, 0x1234, 0x5678, 0x234567,
+ 0x765432, 0x61626364, 0x41424344)
bytes = list(compress_callshape(shape))
print bytes
assert len(bytes) == 1+1+2+3+4+4+5+5+1
Modified: pypy/trunk/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/trackgcroot.py Fri Mar 5 09:50:21 2010
@@ -9,9 +9,11 @@
from pypy.translator.c.gcc.instruction import InsnGCROOT
from pypy.translator.c.gcc.instruction import InsnStackAdjust
from pypy.translator.c.gcc.instruction import InsnCannotFollowEsp
-from pypy.translator.c.gcc.instruction import LocalVar, somenewvalue, frameloc
+from pypy.translator.c.gcc.instruction import LocalVar, somenewvalue
+from pypy.translator.c.gcc.instruction import frameloc_esp, frameloc_ebp
from pypy.translator.c.gcc.instruction import LOC_REG, LOC_NOWHERE, LOC_MASK
-from pypy.translator.c.gcc.instruction import LOC_EBP_BASED, LOC_ESP_BASED
+from pypy.translator.c.gcc.instruction import LOC_EBP_PLUS, LOC_EBP_MINUS
+from pypy.translator.c.gcc.instruction import LOC_ESP_PLUS
class FunctionGcRootTracker(object):
skip = 0
@@ -69,9 +71,9 @@
if self.is_stack_bottom:
retaddr = LOC_NOWHERE # end marker for asmgcroot.py
elif self.uses_frame_pointer:
- retaddr = frameloc(LOC_EBP_BASED, 4)
+ retaddr = frameloc_ebp(4)
else:
- retaddr = frameloc(LOC_ESP_BASED, insn.framesize)
+ retaddr = frameloc_esp(insn.framesize)
shape = [retaddr]
# the first gcroots are always the ones corresponding to
# the callee-saved registers
@@ -736,7 +738,7 @@
EBP = '%ebp'
EAX = '%eax'
CALLEE_SAVE_REGISTERS = ['%ebx', '%esi', '%edi', '%ebp']
- REG2LOC = dict((_reg, LOC_REG | (_i<<2))
+ REG2LOC = dict((_reg, LOC_REG | ((_i+1)<<2))
for _i, _reg in enumerate(CALLEE_SAVE_REGISTERS))
OPERAND = r'(?:[-\w$%+.:@"]+(?:[(][\w%,]+[)])?|[(][\w%,]+[)])'
LABEL = r'([a-zA-Z_$.][a-zA-Z0-9_$@.]*)'
@@ -808,7 +810,7 @@
EBP = 'ebp'
EAX = 'eax'
CALLEE_SAVE_REGISTERS = ['ebx', 'esi', 'edi', 'ebp']
- REG2LOC = dict((_reg, LOC_REG | (_i<<2))
+ REG2LOC = dict((_reg, LOC_REG | ((_i+1)<<2))
for _i, _reg in enumerate(CALLEE_SAVE_REGISTERS))
TOP_OF_STACK = 'DWORD PTR [esp]'
@@ -1453,19 +1455,24 @@
# in the stack frame at an address relative to either %esp or %ebp.
# The last two bits of the location number are used to tell the cases
# apart; see format_location().
+ assert loc >= 0
kind = loc & LOC_MASK
- if kind == LOC_NOWHERE:
- return '?'
- elif kind == LOC_REG:
- reg = loc >> 2
- assert 0 <= reg <= 3
+ if kind == LOC_REG:
+ if loc == LOC_NOWHERE:
+ return '?'
+ reg = (loc >> 2) - 1
return ElfFunctionGcRootTracker.CALLEE_SAVE_REGISTERS[reg]
else:
- if kind == LOC_EBP_BASED:
+ offset = loc & ~ LOC_MASK
+ if kind == LOC_EBP_PLUS:
result = '(%ebp)'
- else:
+ elif kind == LOC_EBP_MINUS:
+ result = '(%ebp)'
+ offset = -offset
+ elif kind == LOC_ESP_PLUS:
result = '(%esp)'
- offset = loc & ~ LOC_MASK
+ else:
+ assert 0, kind
if offset != 0:
result = str(offset) + result
return result
@@ -1531,10 +1538,7 @@
shape.insert(5, 0)
result = []
for loc in shape:
- if loc < 0:
- loc = (-loc) * 2 - 1
- else:
- loc = loc * 2
+ assert loc >= 0
flag = 0
while loc >= 0x80:
result.append(int(loc & 0x7F) | flag)
@@ -1557,9 +1561,6 @@
if b < 0x80:
break
value = (value - 0x80) << 7
- if value & 1:
- value = ~ value
- value = value >> 1
result.append(value)
result.reverse()
assert result[5] == 0
From arigo at codespeak.net Fri Mar 5 10:01:41 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 10:01:41 +0100 (CET)
Subject: [pypy-svn] r71789 - in pypy/trunk/pypy/jit/backend/llsupport: . test
Message-ID: <20100305090141.D8030282BD6@codespeak.net>
Author: arigo
Date: Fri Mar 5 10:01:40 2010
New Revision: 71789
Modified:
pypy/trunk/pypy/jit/backend/llsupport/gc.py
pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py
Log:
Avoid one pass in compress_callshape() by computing
the encoded "unsigned char" numbers directly.
Modified: pypy/trunk/pypy/jit/backend/llsupport/gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/gc.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/gc.py Fri Mar 5 10:01:40 2010
@@ -252,51 +252,51 @@
lltype.free(oldgcmap, flavor='raw')
def get_basic_shape(self):
- return [self.LOC_EBP_PLUS | 4, # return addr: at 4(%ebp)
- self.LOC_EBP_MINUS | 4, # saved %ebx: at -4(%ebp)
- self.LOC_EBP_MINUS | 8, # saved %esi: at -8(%ebp)
- self.LOC_EBP_MINUS | 12, # saved %edi: at -12(%ebp)
- self.LOC_EBP_PLUS | 0, # saved %ebp: at (%ebp)
- 0]
+ return [chr(self.LOC_EBP_PLUS | 4), # return addr: at 4(%ebp)
+ chr(self.LOC_EBP_MINUS | 4), # saved %ebx: at -4(%ebp)
+ chr(self.LOC_EBP_MINUS | 8), # saved %esi: at -8(%ebp)
+ chr(self.LOC_EBP_MINUS | 12), # saved %edi: at -12(%ebp)
+ chr(self.LOC_EBP_PLUS | 0), # saved %ebp: at (%ebp)
+ chr(0)]
+
+ def _encode_num(self, shape, number):
+ assert number >= 0
+ flag = 0
+ while number >= 0x80:
+ shape.append(chr((number & 0x7F) | flag))
+ flag = 0x80
+ number >>= 7
+ shape.append(chr(number | flag))
def add_ebp_offset(self, shape, offset):
assert (offset & 3) == 0
if offset >= 0:
- encoded = self.LOC_EBP_PLUS | offset
+ num = self.LOC_EBP_PLUS | offset
else:
- encoded = self.LOC_EBP_MINUS | (-offset)
- shape.append(encoded)
+ num = self.LOC_EBP_MINUS | (-offset)
+ self._encode_num(shape, num)
def add_ebx(self, shape):
- shape.append(self.LOC_REG | 4)
+ shape.append(chr(self.LOC_REG | 4))
def add_esi(self, shape):
- shape.append(self.LOC_REG | 8)
+ shape.append(chr(self.LOC_REG | 8))
def add_edi(self, shape):
- shape.append(self.LOC_REG | 12)
+ shape.append(chr(self.LOC_REG | 12))
def add_ebp(self, shape):
- shape.append(self.LOC_REG | 16)
+ shape.append(chr(self.LOC_REG | 16))
def compress_callshape(self, shape):
- # Similar to compress_callshape() in trackgcroot.py. XXX a bit slowish
- result = []
- for loc in shape:
- assert loc >= 0
- flag = 0
- while loc >= 0x80:
- result.append(int(loc & 0x7F) | flag)
- flag = 0x80
- loc >>= 7
- result.append(int(loc) | flag)
+ # Similar to compress_callshape() in trackgcroot.py.
# XXX so far, we always allocate a new small array (we could regroup
# them inside bigger arrays) and we never try to share them.
- length = len(result)
+ length = len(shape)
compressed = lltype.malloc(self.CALLSHAPE_ARRAY, length,
flavor='raw')
for i in range(length):
- compressed[length-1-i] = rffi.cast(rffi.UCHAR, result[i])
+ compressed[length-1-i] = rffi.cast(rffi.UCHAR, shape[i])
return llmemory.cast_ptr_to_adr(compressed)
Modified: pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/test/test_gc.py Fri Mar 5 10:01:40 2010
@@ -65,27 +65,32 @@
return -4*(4+n)
gcrootmap = GcRootMap_asmgcc()
num1 = frame_pos(-5)
+ num1a = num1|2
num2 = frame_pos(55)
+ num2a = ((-num2|3) >> 7) | 128
+ num2b = (-num2|3) & 127
shape = gcrootmap.get_basic_shape()
gcrootmap.add_ebp_offset(shape, num1)
gcrootmap.add_ebp_offset(shape, num2)
- assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3]
+ assert shape == map(chr, [6, 7, 11, 15, 2, 0, num1a, num2b, num2a])
gcrootmap.add_ebx(shape)
- assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4]
+ assert shape == map(chr, [6, 7, 11, 15, 2, 0, num1a, num2b, num2a,
+ 4])
gcrootmap.add_esi(shape)
- assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4, 8]
+ assert shape == map(chr, [6, 7, 11, 15, 2, 0, num1a, num2b, num2a,
+ 4, 8])
gcrootmap.add_edi(shape)
- assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4, 8, 12]
+ assert shape == map(chr, [6, 7, 11, 15, 2, 0, num1a, num2b, num2a,
+ 4, 8, 12])
gcrootmap.add_ebp(shape)
- assert shape == [6, 7, 11, 15, 2, 0, num1|2, -num2|3, 4, 8, 12, 16]
+ assert shape == map(chr, [6, 7, 11, 15, 2, 0, num1a, num2b, num2a,
+ 4, 8, 12, 16])
#
shapeaddr = gcrootmap.compress_callshape(shape)
PCALLSHAPE = lltype.Ptr(GcRootMap_asmgcc.CALLSHAPE_ARRAY)
p = llmemory.cast_adr_to_ptr(shapeaddr, PCALLSHAPE)
- num2a = ((-num2|3) >> 7) | 128
- num2b = (-num2|3) & 127
for i, expected in enumerate([16, 12, 8, 4,
- num2a, num2b, num1|2, 0, 2, 15, 11, 7, 6]):
+ num2a, num2b, num1a, 0, 2, 15, 11, 7, 6]):
assert p[i] == expected
#
retaddr = rffi.cast(llmemory.Address, 1234567890)
From arigo at codespeak.net Fri Mar 5 11:23:42 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 11:23:42 +0100 (CET)
Subject: [pypy-svn] r71790 - in pypy/trunk/pypy/config: . test
Message-ID: <20100305102342.427E6282BD6@codespeak.net>
Author: arigo
Date: Fri Mar 5 11:23:40 2010
New Revision: 71790
Modified:
pypy/trunk/pypy/config/pypyoption.py
pypy/trunk/pypy/config/test/test_pypyoption.py
Log:
'withshadowtracking' is incompatible with 'withinlineddict'.
Remove it explicitly and fix the test. It would have been
better if it complained -- now I'm unsure which of the two
options was picked up in my pypy-c test builds...
Modified: pypy/trunk/pypy/config/pypyoption.py
==============================================================================
--- pypy/trunk/pypy/config/pypyoption.py (original)
+++ pypy/trunk/pypy/config/pypyoption.py Fri Mar 5 11:23:40 2010
@@ -325,7 +325,6 @@
config.objspace.opcodes.suggest(CALL_LIKELY_BUILTIN=True)
if level in ['2', '3', 'jit']:
config.objspace.opcodes.suggest(CALL_METHOD=True)
- config.objspace.std.suggest(withshadowtracking=True)
config.objspace.std.suggest(withrangelist=True)
config.objspace.std.suggest(withmethodcache=True)
config.objspace.std.suggest(withprebuiltchar=True)
Modified: pypy/trunk/pypy/config/test/test_pypyoption.py
==============================================================================
--- pypy/trunk/pypy/config/test/test_pypyoption.py (original)
+++ pypy/trunk/pypy/config/test/test_pypyoption.py Fri Mar 5 11:23:40 2010
@@ -47,7 +47,7 @@
def test_set_pypy_opt_level():
conf = get_pypy_config()
set_pypy_opt_level(conf, '2')
- assert conf.objspace.std.withshadowtracking
+ assert conf.objspace.std.withsharingdict
conf = get_pypy_config()
set_pypy_opt_level(conf, '0')
assert not conf.objspace.std.newshortcut
From arigo at codespeak.net Fri Mar 5 12:00:31 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 12:00:31 +0100 (CET)
Subject: [pypy-svn] r71791 - pypy/build/bot2/pypybuildbot
Message-ID: <20100305110031.CDA65282BD6@codespeak.net>
Author: arigo
Date: Fri Mar 5 12:00:29 2010
New Revision: 71791
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
Add JITMACOSX32. Not run every night so far, but only manually.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Fri Mar 5 12:00:29 2010
@@ -94,6 +94,7 @@
JITLINUX32 = "pypy-c-jit-linux-x86-32"
OJITLINUX32 = "pypy-c-Ojit-no-jit-linux-x86-32"
+JITMACOSX32 = "pypy-c-jit-macosx-x86-32"
JITONLYLINUX32 = "jitonly-own-linux-x86-32"
JITBENCH = "jit-benchmark-linux-x86-32"
@@ -175,6 +176,12 @@
'factory' : pypyJITTranslatedTestFactory,
'category' : 'jit',
},
+ {"name" : JITMACOSX32,
+ "slavenames": ["minime"],
+ 'builddir' : JITMACOSX32,
+ 'factory' : pypyJITTranslatedTestFactory,
+ 'category' : 'jit',
+ },
{"name": JITONLYLINUX32,
"slavenames": ["bigdogvm1"],
"builddir": JITONLYLINUX32,
From arigo at codespeak.net Fri Mar 5 12:03:28 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 12:03:28 +0100 (CET)
Subject: [pypy-svn] r71792 - pypy/build/bot2/pypybuildbot
Message-ID: <20100305110328.DE033282BD6@codespeak.net>
Author: arigo
Date: Fri Mar 5 12:03:27 2010
New Revision: 71792
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
Also add JITWIN32. Similarly, this is not run nightly for now.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Fri Mar 5 12:03:27 2010
@@ -95,6 +95,7 @@
JITLINUX32 = "pypy-c-jit-linux-x86-32"
OJITLINUX32 = "pypy-c-Ojit-no-jit-linux-x86-32"
JITMACOSX32 = "pypy-c-jit-macosx-x86-32"
+JITWIN32 = "pypy-c-jit-win-x86-32"
JITONLYLINUX32 = "jitonly-own-linux-x86-32"
JITBENCH = "jit-benchmark-linux-x86-32"
@@ -182,6 +183,12 @@
'factory' : pypyJITTranslatedTestFactory,
'category' : 'jit',
},
+ {"name" : JITWIN32,
+ "slavenames": ["bigboard"],
+ 'builddir' : JITWIN32,
+ 'factory' : pypyJITTranslatedTestFactory,
+ 'category' : 'jit',
+ },
{"name": JITONLYLINUX32,
"slavenames": ["bigdogvm1"],
"builddir": JITONLYLINUX32,
From arigo at codespeak.net Fri Mar 5 13:24:27 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 13:24:27 +0100 (CET)
Subject: [pypy-svn] r71793 - pypy/build/bot2/pypybuildbot
Message-ID: <20100305122427.2171251055@codespeak.net>
Author: arigo
Date: Fri Mar 5 13:24:25 2010
New Revision: 71793
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
Picking a random slave is not really what we want;
let's pick the first available one instead.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Fri Mar 5 13:24:25 2010
@@ -1,6 +1,7 @@
from buildbot.scheduler import Nightly
from buildbot.buildslave import BuildSlave
from buildbot.status.html import WebStatus
+from buildbot.process.builder import Builder
# I really wanted to pass logPath to Site
@@ -29,6 +30,10 @@
StatusResourceBuilder.ping = my_ping
# Disabled.
+# Picking a random slave is not really what we want;
+# let's pick the first available one instead.
+Builder.CHOOSE_SLAVES_RANDOMLY = False
+
status = WebStatus(httpPortNumber, allowForce=True)
From arigo at codespeak.net Fri Mar 5 13:38:15 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 13:38:15 +0100 (CET)
Subject: [pypy-svn] r71794 - pypy/trunk/pypy/rpython/lltypesystem
Message-ID: <20100305123815.027F451055@codespeak.net>
Author: arigo
Date: Fri Mar 5 13:38:14 2010
New Revision: 71794
Modified:
pypy/trunk/pypy/rpython/lltypesystem/rstr.py
Log:
Can't do that. You are mutating the string passed as an argument!
Revert this part of r71772.
(Incidentally, r71784 is a pointless revert because non-JITted
pypy-c's fail in the same way. My guess is that the cause was
really r71772.)
Modified: pypy/trunk/pypy/rpython/lltypesystem/rstr.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/rstr.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/rstr.py Fri Mar 5 13:38:14 2010
@@ -18,7 +18,6 @@
from pypy.rpython.rmodel import Repr
from pypy.rpython.lltypesystem import llmemory
from pypy.tool.sourcetools import func_with_new_name
-from pypy.rlib import rgc
# ____________________________________________________________
#
@@ -682,9 +681,10 @@
@purefunction
def ll_stringslice_minusone(s1):
newlen = len(s1.chars) - 1
+ newstr = s1.malloc(newlen)
assert newlen >= 0
- return rgc.ll_shrink_array(s1, newlen)
-
+ s1.copy_contents(s1, newstr, 0, 0, newlen)
+ return newstr
def ll_split_chr(LIST, s, c):
chars = s.chars
From arigo at codespeak.net Fri Mar 5 13:43:14 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 13:43:14 +0100 (CET)
Subject: [pypy-svn] r71795 - in pypy/branch/guard-value-counting/pypy:
jit/metainterp jit/metainterp/test module/pypyjit
Message-ID: <20100305124314.1F9E651055@codespeak.net>
Author: arigo
Date: Fri Mar 5 13:43:12 2010
New Revision: 71795
Modified:
pypy/branch/guard-value-counting/pypy/jit/metainterp/compile.py
pypy/branch/guard-value-counting/pypy/jit/metainterp/optimizeopt.py
pypy/branch/guard-value-counting/pypy/jit/metainterp/pyjitpl.py
pypy/branch/guard-value-counting/pypy/jit/metainterp/test/test_optimizeopt.py
pypy/branch/guard-value-counting/pypy/module/pypyjit/interp_jit.py
Log:
Check in my working copy. That branch will probably be abandonned
and maybe restarted some day.
Modified: pypy/branch/guard-value-counting/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/guard-value-counting/pypy/jit/metainterp/compile.py (original)
+++ pypy/branch/guard-value-counting/pypy/jit/metainterp/compile.py Fri Mar 5 13:43:12 2010
@@ -202,35 +202,90 @@
],
}
+
class ResumeDescr(AbstractFailDescr):
def __init__(self, original_greenkey):
self.original_greenkey = original_greenkey
def _clone_if_mutable(self):
raise NotImplementedError
-class ResumeGuardDescr(ResumeDescr):
+
+class PreOptGuardDescr(ResumeDescr):
+ """The descr of any guard operation before optimization."""
+
+ # this class also gets the following attributes stored by resume.py code
+ pd_snapshot = None
+ pd_frame_info_list = None
+
+ # XXX temp
+ def __setattr__(self, attr, value):
+ assert not attr.startswith('rd_')
+ ResumeDescr.__setattr__(self, attr, value)
+
+ def get_final_descr(self, opnum, metainterp_sd):
+ if opnum == rop.GUARD_TRUE:
+ cls = ResumeGuardTrueDescr
+ elif opnum == rop.GUARD_FALSE:
+ cls = ResumeGuardFalseDescr
+ elif opnum == rop.GUARD_VALUE:
+ cls = ResumeGuardValueDescr
+ elif opnum == rop.GUARD_NO_EXCEPTION or opnum == rop.GUARD_EXCEPTION:
+ cls = ResumeGuardExcDescr
+ elif opnum == rop.GUARD_NO_OVERFLOW:
+ cls = ResumeGuardNoOverflowDescr
+ elif opnum == rop.GUARD_NONNULL:
+ cls = ResumeGuardNonNullDescr
+ elif opnum == rop.GUARD_ISNULL:
+ cls = ResumeGuardIsNullDescr
+ elif opnum == rop.GUARD_NOT_FORCED:
+ cls = ResumeGuardForcedDescr
+ else:
+ cls = ResumeGuardDefaultDescr
+ return cls(metainterp_sd, self.original_greenkey)
+
+ def get_final_descr_guard_value_bool(self, metainterp_sd):
+ return ResumeGuardValueBoolDescr(metainterp_sd, self.original_greenkey)
+
+ def _clone_if_mutable(self):
+ res = PreOptGuardDescr(self.original_greenkey)
+ # XXX a bit ugly to have to list them here
+ res.rd_snapshot = self.rd_snapshot
+ res.rd_frame_info_list = self.rd_frame_info_list
+ return res
+
+
+class BaseResumeGuardDescr(ResumeDescr):
+ """The base class for the descr of guard operations after optimization."""
counter = 0
+
# this class also gets the following attributes stored by resume.py code
- rd_snapshot = None
rd_frame_info_list = None
rd_numb = None
rd_consts = None
rd_virtuals = None
rd_pendingfields = None
+ # XXX temp
+ def __setattr__(self, attr, value):
+ assert not attr.startswith('pd_')
+ ResumeDescr.__setattr__(self, attr, value)
+
def __init__(self, metainterp_sd, original_greenkey):
ResumeDescr.__init__(self, original_greenkey)
self.metainterp_sd = metainterp_sd
def store_final_boxes(self, guard_op, boxes):
+ guard_op.descr = self
guard_op.fail_args = boxes
- self.guard_opnum = guard_op.opnum
def handle_fail(self, metainterp_sd):
from pypy.jit.metainterp.pyjitpl import MetaInterp
metainterp = MetaInterp(metainterp_sd)
return metainterp.handle_guard_failure(self)
+ def prepare_resume(self, metainterp):
+ raise NotImplementedError
+
def compile_and_attach(self, metainterp, new_loop):
# We managed to create a bridge. Attach the new operations
# to the corrsponding guard_op and compile from there
@@ -241,18 +296,47 @@
new_loop.operations)
- def _clone_if_mutable(self):
- res = self.__class__(self.metainterp_sd, self.original_greenkey)
- # XXX a bit ugly to have to list them all here
- res.rd_snapshot = self.rd_snapshot
- res.rd_frame_info_list = self.rd_frame_info_list
- res.rd_numb = self.rd_numb
- res.rd_consts = self.rd_consts
- res.rd_virtuals = self.rd_virtuals
- res.rd_pendingfields = self.rd_pendingfields
- return res
+# we have all the following classes as a way to save one word in each
+# instance
+
+class ResumeGuardDefaultDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ pass
+
+class ResumeGuardTrueDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ metainterp.prepare_resume_guard_true()
+
+class ResumeGuardFalseDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ metainterp.prepare_resume_guard_false()
+
+class ResumeGuardExcDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ metainterp.prepare_resume_guard_exc()
+
+class ResumeGuardNoOverflowDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ metainterp.prepare_resume_guard_no_overflow()
+
+class ResumeGuardNonNullDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ metainterp.prepare_resume_guard_non_null()
+
+class ResumeGuardIsNullDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ metainterp.prepare_resume_guard_is_null()
+
+# for GUARD_VALUE detected to operate on a bool
+ResumeGuardValueBoolDescr = ResumeGuardDefaultDescr
+
+class ResumeGuardValueDescr(BaseResumeGuardDescr):
+ def prepare_resume(self, metainterp):
+ pass # xxx
+
-class ResumeGuardForcedDescr(ResumeGuardDescr):
+class ResumeGuardForcedDescr(BaseResumeGuardDescr):
+ """A version of ResumeGuardDescr for GUARD_NOT_FORCED."""
def handle_fail(self, metainterp_sd):
from pypy.jit.metainterp.pyjitpl import MetaInterp
@@ -317,6 +401,10 @@
class ResumeFromInterpDescr(ResumeDescr):
+ """This is used by pyjitpl as the ResumeDescr for cases where tracing
+ started from the interpreter, at a loop boundary, instead of from a
+ guard failure.
+ """
def __init__(self, original_greenkey, redkey):
ResumeDescr.__init__(self, original_greenkey)
self.redkey = redkey
Modified: pypy/branch/guard-value-counting/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/guard-value-counting/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/guard-value-counting/pypy/jit/metainterp/optimizeopt.py Fri Mar 5 13:43:12 2010
@@ -549,18 +549,11 @@
def store_final_boxes_in_guard(self, op):
pendingfields = self.heap_op_optimizer.force_lazy_setfields_for_guard()
- descr = op.descr
- assert isinstance(descr, compile.ResumeGuardDescr)
- modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
- newboxes = modifier.finish(self.values, pendingfields)
- if len(newboxes) > self.metainterp_sd.options.failargs_limit: # XXX be careful here
- raise compile.GiveUp
- descr.store_final_boxes(op, newboxes)
- #
+ pdescr = op.descr
+ assert isinstance(pdescr, compile.PreOptGuardDescr)
+ metainterp_sd = self.metainterp_sd
+
# Hack: turn guard_value(bool) into guard_true/guard_false.
- # This is done after the operation is emitted, to let
- # store_final_boxes_in_guard set the guard_opnum field
- # of the descr to the original rop.GUARD_VALUE.
if op.opnum == rop.GUARD_VALUE and op.args[0] in self.bool_boxes:
constvalue = op.args[1].getint()
if constvalue == 0:
@@ -571,6 +564,16 @@
raise AssertionError("uh?")
op.opnum = opnum
op.args = [op.args[0]]
+ rdescr = pdescr.get_final_descr_guard_value_bool(metainterp_sd)
+ else:
+ rdescr = pdescr.get_final_descr(op.opnum, metainterp_sd)
+
+ modifier = resume.ResumeDataVirtualAdder(pdescr, rdescr,
+ self.resumedata_memo)
+ newboxes = modifier.finish(self.values, pendingfields)
+ if len(newboxes) > self.metainterp_sd.options.failargs_limit: # XXX be careful here
+ raise compile.GiveUp
+ rdescr.store_final_boxes(op, newboxes)
def optimize_default(self, op):
if op.is_always_pure():
@@ -654,15 +657,14 @@
# replace the original guard with a guard_value
old_guard_op = self.newoperations[value.last_guard_index]
old_opnum = old_guard_op.opnum
- old_guard_op.opnum = op.opnum
+ old_guard_op.opnum = rop.GUARD_VALUE
old_guard_op.args = [old_guard_op.args[0], op.args[1]]
- if old_opnum == rop.GUARD_NONNULL:
- # hack hack hack. Change the guard_opnum on
- # old_guard_op.descr so that when resuming,
- # the operation is not skipped by pyjitpl.py.
- descr = old_guard_op.descr
- assert isinstance(descr, compile.ResumeGuardDescr)
- descr.guard_opnum = rop.GUARD_NONNULL_CLASS
+ # hack hack hack. Change the guard_opnum on
+ # old_guard_op.descr so that when resuming,
+ # the operation is not skipped by pyjitpl.py.
+ descr = old_guard_op.descr
+ assert isinstance(descr, compile.ResumeGuardDescr)
+ descr.guard_opnum = rop.GUARD_VALUE
emit_operation = False
constbox = op.args[1]
assert isinstance(constbox, Const)
@@ -699,7 +701,7 @@
# old_guard_op.descr so that when resuming,
# the operation is not skipped by pyjitpl.py.
descr = old_guard_op.descr
- assert isinstance(descr, compile.ResumeGuardDescr)
+ assert isinstance(descr, compile.BaseResumeGuardDescr)
descr.guard_opnum = rop.GUARD_NONNULL_CLASS
emit_operation = False
if emit_operation:
Modified: pypy/branch/guard-value-counting/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/guard-value-counting/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/guard-value-counting/pypy/jit/metainterp/pyjitpl.py Fri Mar 5 13:43:12 2010
@@ -1016,12 +1016,8 @@
moreargs = list(extraargs)
metainterp_sd = metainterp.staticdata
original_greenkey = metainterp.resumekey.original_greenkey
- if opnum == rop.GUARD_NOT_FORCED:
- resumedescr = compile.ResumeGuardForcedDescr(metainterp_sd,
- original_greenkey)
- else:
- resumedescr = compile.ResumeGuardDescr(metainterp_sd,
- original_greenkey)
+ resumedescr = compile.PreOptGuardDescr(metainterp_sd,
+ original_greenkey)
guard_op = metainterp.history.record(opnum, moreargs, None,
descr=resumedescr)
virtualizable_boxes = None
Modified: pypy/branch/guard-value-counting/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/guard-value-counting/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/branch/guard-value-counting/pypy/jit/metainterp/test/test_optimizeopt.py Fri Mar 5 13:43:12 2010
@@ -13,6 +13,8 @@
from pypy.jit.metainterp import executor, compile, resume
from pypy.jit.metainterp.resoperation import rop, opname, ResOperation
from pypy.jit.metainterp.test.oparser import pure_parse
+from pypy.jit.metainterp.compile import PreOptGuardDescr
+from pypy.jit.metainterp.compile import BaseResumeGuardDescr
class FakeFrame(object):
parent_resumedata_snapshot = None
@@ -36,31 +38,33 @@
self.globaldata = Fake()
def test_store_final_boxes_in_guard():
- from pypy.jit.metainterp.compile import ResumeGuardDescr
+ from pypy.jit.metainterp.compile import ResumeGuardTrueDescr
from pypy.jit.metainterp.resume import tag, TAGBOX
b0 = BoxInt()
b1 = BoxInt()
opt = optimizeopt.Optimizer(FakeMetaInterpStaticData(LLtypeMixin.cpu),
None)
- fdescr = ResumeGuardDescr(None, None)
- op = ResOperation(rop.GUARD_TRUE, [], None, descr=fdescr)
+ pdescr = PreOptGuardDescr(None)
+ op = ResOperation(rop.GUARD_TRUE, [], None, descr=pdescr)
# setup rd data
fi0 = resume.FrameInfo(None, FakeFrame("code0", 1, 2))
- fdescr.rd_frame_info_list = resume.FrameInfo(fi0,
+ pdescr.pd_frame_info_list = resume.FrameInfo(fi0,
FakeFrame("code1", 3, -1))
snapshot0 = resume.Snapshot(None, [b0])
- fdescr.rd_snapshot = resume.Snapshot(snapshot0, [b1])
+ pdescr.pd_snapshot = resume.Snapshot(snapshot0, [b1])
#
opt.store_final_boxes_in_guard(op)
+ rdescr = op.descr
+ assert isinstance(rdescr, ResumeGuardTrueDescr)
if op.fail_args == [b0, b1]:
- assert fdescr.rd_numb.nums == [tag(1, TAGBOX)]
- assert fdescr.rd_numb.prev.nums == [tag(0, TAGBOX)]
+ assert rdescr.rd_numb.nums == [tag(1, TAGBOX)]
+ assert rdescr.rd_numb.prev.nums == [tag(0, TAGBOX)]
else:
assert op.fail_args == [b1, b0]
- assert fdescr.rd_numb.nums == [tag(0, TAGBOX)]
- assert fdescr.rd_numb.prev.nums == [tag(1, TAGBOX)]
- assert fdescr.rd_virtuals is None
- assert fdescr.rd_consts == []
+ assert rdescr.rd_numb.nums == [tag(0, TAGBOX)]
+ assert rdescr.rd_numb.prev.nums == [tag(1, TAGBOX)]
+ assert rdescr.rd_virtuals is None
+ assert rdescr.rd_consts == []
def test_sharing_field_lists_of_virtual():
class FakeOptimizer(object):
@@ -205,15 +209,14 @@
# ____________________________________________________________
-class Storage(compile.ResumeGuardDescr):
+class Storage(PreOptGuardDescr):
"for tests."
def __init__(self, metainterp_sd=None, original_greenkey=None):
self.metainterp_sd = metainterp_sd
self.original_greenkey = original_greenkey
- def store_final_boxes(self, op, boxes):
- op.fail_args = boxes
def __eq__(self, other):
- return type(self) is type(other) # xxx obscure
+ # xxx obscure, for equaloplists()
+ return self is other or isinstance(other, BaseResumeGuardDescr)
class BaseTestOptimizeOpt(BaseTest):
@@ -221,8 +224,8 @@
if fail_args is None:
return None
descr = Storage()
- descr.rd_frame_info_list = resume.FrameInfo(None, FakeFrame())
- descr.rd_snapshot = resume.Snapshot(None, fail_args)
+ descr.pd_frame_info_list = resume.FrameInfo(None, FakeFrame())
+ descr.pd_snapshot = resume.Snapshot(None, fail_args)
return descr
def assert_equal(self, optimized, expected):
@@ -1796,41 +1799,46 @@
self.optimize_loop(ops, "Not, Not, Not, Not, Not", expected)
def test_merge_guard_nonnull_guard_class(self):
+ self.make_fail_descr()
ops = """
[p1, i0, i1, i2, p2]
- guard_nonnull(p1) [i0]
+ guard_nonnull(p1, descr=fdescr) [i0]
i3 = int_add(i1, i2)
guard_class(p1, ConstClass(node_vtable)) [i1]
jump(p2, i0, i1, i3, p2)
"""
expected = """
[p1, i0, i1, i2, p2]
- guard_nonnull_class(p1, ConstClass(node_vtable)) [i0]
+ guard_nonnull_class(p1, ConstClass(node_vtable), descr=fdescr) [i0]
i3 = int_add(i1, i2)
jump(p2, i0, i1, i3, p2)
"""
self.optimize_loop(ops, "Not, Not, Not, Not, Not", expected)
+ self.check_expanded_fail_descr("i0", rop.GUARD_NONNULL_CLASS)
def test_merge_guard_nonnull_guard_value(self):
+ self.make_fail_descr()
ops = """
[p1, i0, i1, i2, p2]
- guard_nonnull(p1) [i0]
+ guard_nonnull(p1, descr=fdescr) [i0]
i3 = int_add(i1, i2)
guard_value(p1, ConstPtr(myptr)) [i1]
jump(p2, i0, i1, i3, p2)
"""
expected = """
[p1, i0, i1, i2, p2]
- guard_value(p1, ConstPtr(myptr)) [i0]
+ guard_value(p1, ConstPtr(myptr), descr=fdescr) [i0]
i3 = int_add(i1, i2)
jump(p2, i0, i1, i3, p2)
"""
self.optimize_loop(ops, "Not, Not, Not, Not, Not", expected)
+ self.check_expanded_fail_descr("i0", rop.GUARD_VALUE)
def test_merge_guard_nonnull_guard_class_guard_value(self):
+ self.make_fail_descr()
ops = """
[p1, i0, i1, i2, p2]
- guard_nonnull(p1) [i0]
+ guard_nonnull(p1, descr=fdescr) [i0]
i3 = int_add(i1, i2)
guard_class(p1, ConstClass(node_vtable)) [i2]
i4 = int_sub(i3, 1)
@@ -1839,12 +1847,13 @@
"""
expected = """
[p1, i0, i1, i2, p2]
- guard_value(p1, ConstPtr(myptr)) [i0]
+ guard_value(p1, ConstPtr(myptr), descr=fdescr) [i0]
i3 = int_add(i1, i2)
i4 = int_sub(i3, 1)
jump(p2, i0, i1, i4, p2)
"""
self.optimize_loop(ops, "Not, Not, Not, Not, Not", expected)
+ self.check_expanded_fail_descr("i0", rop.GUARD_VALUE)
def test_guard_class_oois(self):
ops = """
@@ -2043,10 +2052,11 @@
_variables_equal(fieldbox, fieldvalue.strip(), strict=False)
index += 1
- def check_expanded_fail_descr(self, expectedtext):
+ def check_expanded_fail_descr(self, expectedtext, guard_opnum):
guard_op, = [op for op in self.loop.operations if op.is_guard()]
fail_args = guard_op.fail_args
fdescr = guard_op.descr
+ assert fdescr.guard_opnum == guard_opnum
reader = resume.ResumeDataReader(fdescr, fail_args,
MyMetaInterp(self.cpu))
boxes = reader.consume_boxes()
@@ -2071,7 +2081,7 @@
jump(1, i3)
"""
self.optimize_loop(ops, 'Not, Not', expected)
- self.check_expanded_fail_descr('15, i3')
+ self.check_expanded_fail_descr('15, i3', rop.GUARD_TRUE)
def test_expand_fail_2(self):
self.make_fail_descr()
@@ -2091,7 +2101,7 @@
self.optimize_loop(ops, 'Not, Not', expected)
self.check_expanded_fail_descr('''ptr
where ptr is a node_vtable, valuedescr=i2
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_3(self):
self.make_fail_descr()
@@ -2115,7 +2125,7 @@
self.check_expanded_fail_descr('''p1, i3
where p1 is a node_vtable, valuedescr=1, nextdescr=p2
where p2 is a node_vtable, valuedescr=i2, nextdescr=p3
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_4(self):
for arg in ['p1', 'p1,i2', 'i2,p1', 'p1,p2', 'p2,p1',
@@ -2142,8 +2152,8 @@
self.optimize_loop(ops % arg, 'Not, Not, Not', expected)
self.check_expanded_fail_descr('''i3, %s, i3
where p1 is a node_vtable, valuedescr=i2, nextdescr=p2
- where p2 is a node_vtable, valuedescr=i2''' % arg)
-
+ where p2 is a node_vtable, valuedescr=i2''' % arg,
+ rop.GUARD_TRUE)
def test_expand_fail_5(self):
self.make_fail_descr()
@@ -2167,7 +2177,7 @@
self.check_expanded_fail_descr('''p1, i3, p2, i4
where p1 is a node_vtable, valuedescr=i4, nextdescr=p2
where p2 is a node_vtable, valuedescr=i2, nextdescr=p1
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_6(self):
self.make_fail_descr()
@@ -2187,7 +2197,7 @@
Not, Not''', expected)
self.check_expanded_fail_descr('''p0
where p0 is a node_vtable, valuedescr=i1b
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_varray(self):
self.make_fail_descr()
@@ -2208,7 +2218,7 @@
self.optimize_loop(ops, 'Not', expected)
self.check_expanded_fail_descr('''p1
where p1 is a varray arraydescr: 25, i1
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_vstruct(self):
self.make_fail_descr()
@@ -2230,7 +2240,7 @@
self.optimize_loop(ops, 'Not, Not', expected)
self.check_expanded_fail_descr('''p2
where p2 is a vstruct ssize, adescr=i1, bdescr=p1
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_v_all_1(self):
self.make_fail_descr()
@@ -2271,7 +2281,7 @@
where p6s is a vstruct ssize, adescr=ia, bdescr=p7v
where p5s is a vstruct ssize, adescr=i2, bdescr=p7v
where p7v is a node_vtable, valuedescr=iv
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_lazy_setfield_1(self):
self.make_fail_descr()
@@ -2297,7 +2307,7 @@
self.check_expanded_fail_descr('''
p1.nextdescr = p2
where p2 is a node_vtable, valuedescr=i2
- ''')
+ ''', rop.GUARD_TRUE)
def test_expand_fail_lazy_setfield_2(self):
self.make_fail_descr()
@@ -2322,7 +2332,7 @@
self.check_expanded_fail_descr('''
ConstPtr(myptr).nextdescr = p2
where p2 is a node_vtable, valuedescr=i2
- ''')
+ ''', rop.GUARD_TRUE)
class TestLLtype(BaseTestOptimizeOpt, LLtypeMixin):
@@ -2621,7 +2631,7 @@
self.check_expanded_fail_descr('''p2, p1
where p1 is a node_vtable, nextdescr=p1b
where p1b is a node_vtable, valuedescr=i1
- ''')
+ ''', rop.GUARD_NOT_FORCED)
def test_vref_virtual_and_lazy_setfield(self):
self.make_fail_descr()
@@ -2660,7 +2670,7 @@
where p2 is a jit_virtual_ref_vtable, virtualtokendescr=i3, virtualrefindexdescr=2
where p1 is a node_vtable, nextdescr=p1b
where p1b is a node_vtable, valuedescr=i1
- ''')
+ ''', rop.GUARD_NO_EXCEPTION)
def test_vref_virtual_after_finish(self):
self.make_fail_descr()
Modified: pypy/branch/guard-value-counting/pypy/module/pypyjit/interp_jit.py
==============================================================================
--- pypy/branch/guard-value-counting/pypy/module/pypyjit/interp_jit.py (original)
+++ pypy/branch/guard-value-counting/pypy/module/pypyjit/interp_jit.py Fri Mar 5 13:43:12 2010
@@ -22,8 +22,6 @@
'lastblock',
]
-JUMP_ABSOLUTE = opmap['JUMP_ABSOLUTE']
-
def can_inline(next_instr, bytecode):
return not bool(bytecode.co_flags & CO_CONTAINSLOOP)
@@ -49,14 +47,6 @@
greens = ['next_instr', 'pycode']
virtualizables = ['frame']
-## def compute_invariants(self, reds, next_instr, pycode):
-## # compute the information that really only depends on next_instr
-## # and pycode
-## frame = reds.frame
-## valuestackdepth = frame.valuestackdepth
-## blockstack = frame.blockstack
-## return (valuestackdepth, blockstack)
-
pypyjitdriver = PyPyJitDriver(can_inline = can_inline,
get_printable_location = get_printable_location,
get_jitcell_at = get_jitcell_at,
From getxsick at codespeak.net Fri Mar 5 14:05:14 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Fri, 5 Mar 2010 14:05:14 +0100 (CET)
Subject: [pypy-svn] r71796 - in pypy/build/ubuntu/debian: . manpages scripts
Message-ID: <20100305130514.EA5C051055@codespeak.net>
Author: getxsick
Date: Fri Mar 5 14:05:13 2010
New Revision: 71796
Removed:
pypy/build/ubuntu/debian/manpages/graphserver.1
pypy/build/ubuntu/debian/scripts/graphserver
Modified:
pypy/build/ubuntu/debian/pypy-dotviewer.install
pypy/build/ubuntu/debian/pypy-dotviewer.manpages
Log:
remove graphserver from pypy-dotviewer
Modified: pypy/build/ubuntu/debian/pypy-dotviewer.install
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dotviewer.install (original)
+++ pypy/build/ubuntu/debian/pypy-dotviewer.install Fri Mar 5 14:05:13 2010
@@ -1,4 +1,3 @@
dotviewer usr/share/pypy-1.2
debian/scripts/dotviewer usr/bin
-debian/scripts/graphserver usr/bin
debian/scripts/sshgraphserver usr/bin
Modified: pypy/build/ubuntu/debian/pypy-dotviewer.manpages
==============================================================================
--- pypy/build/ubuntu/debian/pypy-dotviewer.manpages (original)
+++ pypy/build/ubuntu/debian/pypy-dotviewer.manpages Fri Mar 5 14:05:13 2010
@@ -1,3 +1,2 @@
debian/manpages/dotviewer.1
-debian/manpages/graphserver.1
debian/manpages/sshgraphserver.1
From arigo at codespeak.net Fri Mar 5 15:12:48 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 15:12:48 +0100 (CET)
Subject: [pypy-svn] r71798 - in pypy/release/1.2.x: . pypy/doc pypy/doc/jit
pypy/doc/tool
Message-ID: <20100305141248.0A14F51055@codespeak.net>
Author: arigo
Date: Fri Mar 5 15:12:41 2010
New Revision: 71798
Added:
pypy/release/1.2.x/pypy/doc/release-1.2.0.txt
- copied unchanged from r71659, pypy/trunk/pypy/doc/release-1.2.0.txt
Modified:
pypy/release/1.2.x/LICENSE
pypy/release/1.2.x/pypy/doc/architecture.txt
pypy/release/1.2.x/pypy/doc/contributor.txt
pypy/release/1.2.x/pypy/doc/docindex.txt
pypy/release/1.2.x/pypy/doc/download.txt
pypy/release/1.2.x/pypy/doc/extradoc.txt
pypy/release/1.2.x/pypy/doc/faq.txt
pypy/release/1.2.x/pypy/doc/getting-started-dev.txt
pypy/release/1.2.x/pypy/doc/getting-started-python.txt
pypy/release/1.2.x/pypy/doc/getting-started.txt
pypy/release/1.2.x/pypy/doc/how-to-release.txt
pypy/release/1.2.x/pypy/doc/index.txt
pypy/release/1.2.x/pypy/doc/jit/overview.txt
pypy/release/1.2.x/pypy/doc/jit/pyjitpl5.txt
pypy/release/1.2.x/pypy/doc/project-ideas.txt
pypy/release/1.2.x/pypy/doc/tool/makecontributor.py
pypy/release/1.2.x/pypy/doc/translation.txt
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71631:71659
Modified: pypy/release/1.2.x/LICENSE
==============================================================================
--- pypy/release/1.2.x/LICENSE (original)
+++ pypy/release/1.2.x/LICENSE Fri Mar 5 15:12:41 2010
@@ -35,18 +35,18 @@
copyrighted by one or more of the following people and organizations:
Armin Rigo
- Samuele Pedroni
+ Maciej Fijalkowski
Carl Friedrich Bolz
- Maciek Fijalkowski
- Michael Hudson
+ Samuele Pedroni
Antonio Cuni
+ Michael Hudson
Christian Tismer
Holger Krekel
Eric van Riet Paap
Richard Emslie
Anders Chrigstrom
- Aurelien Campeas
Amaury Forgeot d Arc
+ Aurelien Campeas
Anders Lehmann
Niklaus Haldimann
Seo Sanghyeon
@@ -54,11 +54,12 @@
Lawrence Oluyede
Jakub Gustak
Guido Wesdorp
- Niko Matsakis
- Toon Verwaest
+ Benjamin Peterson
Alexander Schremmer
+ Niko Matsakis
Ludovic Aubry
Alex Martelli
+ Toon Verwaest
Stephan Diehl
Adrien Di Mascio
Stefan Schwarzer
@@ -66,8 +67,8 @@
Patrick Maupin
Jacob Hallen
Laura Creighton
- Camillo Bruni
Bob Ippolito
+ Camillo Bruni
Simon Burton
Bruno Gola
Alexandre Fayolle
@@ -75,34 +76,35 @@
Guido van Rossum
Valentino Volonghi
Adrian Kuhn
- Anders Hammarquist
Paul deGrandis
Gerald Klix
Wanja Saatkamp
+ Anders Hammarquist
Oscar Nierstrasz
Eugene Oden
Lukas Renggli
- Bartosz SKOWRON
Guenter Jantzen
Dinu Gherman
+ Bartosz SKOWRON
Georg Brandl
- Benjamin Peterson
Ben Young
- Nicolas Chauvat
Jean-Paul Calderone
+ Nicolas Chauvat
Rocco Moretti
Michael Twomey
- Boris Feigin
+ boria
Jared Grubb
Olivier Dormond
Stuart Williams
Jens-Uwe Mager
Justas Sadzevicius
+ Mikael Sch?nenberg
Brian Dorsey
Jonathan David Riehl
Beatrice During
Elmo M?ntynen
Andreas Friedge
+ Alex Gaynor
Anders Qvist
Alan McIntyre
Bert Freudenberg
Modified: pypy/release/1.2.x/pypy/doc/architecture.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/architecture.txt (original)
+++ pypy/release/1.2.x/pypy/doc/architecture.txt Fri Mar 5 15:12:41 2010
@@ -250,7 +250,7 @@
.. _`Extreme Programming`: http://www.extremeprogramming.org/
.. _fast: faq.html#how-fast-is-pypy
-.. _`very compliant`: http://codespeak.net:8099/summary?category=lib-python&branch=%3Ctrunk%3E
+.. _`very compliant`: cpython_differences.html
.. _`RPython`: coding-guide.html#rpython
Modified: pypy/release/1.2.x/pypy/doc/contributor.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/contributor.txt (original)
+++ pypy/release/1.2.x/pypy/doc/contributor.txt Fri Mar 5 15:12:41 2010
@@ -8,18 +8,18 @@
Armin Rigo
- Samuele Pedroni
+ Maciej Fijalkowski
Carl Friedrich Bolz
- Maciek Fijalkowski
- Michael Hudson
+ Samuele Pedroni
Antonio Cuni
+ Michael Hudson
Christian Tismer
Holger Krekel
Eric van Riet Paap
Richard Emslie
Anders Chrigstrom
- Aurelien Campeas
Amaury Forgeot d Arc
+ Aurelien Campeas
Anders Lehmann
Niklaus Haldimann
Seo Sanghyeon
@@ -27,11 +27,12 @@
Lawrence Oluyede
Jakub Gustak
Guido Wesdorp
- Niko Matsakis
- Toon Verwaest
+ Benjamin Peterson
Alexander Schremmer
+ Niko Matsakis
Ludovic Aubry
Alex Martelli
+ Toon Verwaest
Stephan Diehl
Adrien Di Mascio
Stefan Schwarzer
@@ -39,8 +40,8 @@
Patrick Maupin
Jacob Hallen
Laura Creighton
- Camillo Bruni
Bob Ippolito
+ Camillo Bruni
Simon Burton
Bruno Gola
Alexandre Fayolle
@@ -48,46 +49,46 @@
Guido van Rossum
Valentino Volonghi
Adrian Kuhn
- Anders Hammarquist
Paul deGrandis
Gerald Klix
Wanja Saatkamp
+ Anders Hammarquist
Oscar Nierstrasz
Eugene Oden
Lukas Renggli
- Bartosz SKOWRON
Guenter Jantzen
Dinu Gherman
+ Bartosz SKOWRON
Georg Brandl
Ben Young
- Nicolas Chauvat
Jean-Paul Calderone
+ Nicolas Chauvat
Rocco Moretti
Michael Twomey
- Boris Feigin
+ boria
Jared Grubb
Olivier Dormond
Stuart Williams
Jens-Uwe Mager
Justas Sadzevicius
+ Mikael Sch?nenberg
Brian Dorsey
Jonathan David Riehl
Beatrice During
Elmo M?ntynen
Andreas Friedge
+ Alex Gaynor
Anders Qvist
Alan McIntyre
Bert Freudenberg
Pieter Zieschang
- Ignas Mikalajunas
Jacob Oscarson
Lutz Paelike
- Benjamin Peterson
Michael Schneider
Artur Lisiecki
Lene Wagner
Christopher Armstrong
- Joshua Gilbert
+ Jan de Mooij
Jacek Generowicz
Gasper Zejn
Stephan Busemann
@@ -95,11 +96,10 @@
Godefroid Chappelle
Toby Watson
Andrew Thompson
- Gintautas Miliauskas
+ Joshua Gilbert
Anders Sigfridsson
- Neil Shepperd
+ David Schneider
Michael Chermside
tav
- Igor Trindade Oliveira
Martin Blais
Victor Stinner
Modified: pypy/release/1.2.x/pypy/doc/docindex.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/docindex.txt (original)
+++ pypy/release/1.2.x/pypy/doc/docindex.txt Fri Mar 5 15:12:41 2010
@@ -73,9 +73,9 @@
Windows, on top of .NET, and on top of Java.
To dig into PyPy it is recommended to try out the current
Subversion HEAD, which is always working or mostly working,
-instead of the `release 1.1.0`__.
+instead of the latest release, which is `1.2.0`__.
-.. __: release-1.1.0.html
+.. __: release-1.2.0.html
PyPy is mainly developed on Linux and Mac OS X. Windows is supported,
but platform-specific bugs tend to take longer before we notice and fix
Modified: pypy/release/1.2.x/pypy/doc/download.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/download.txt (original)
+++ pypy/release/1.2.x/pypy/doc/download.txt Fri Mar 5 15:12:41 2010
@@ -2,19 +2,28 @@
Download one of the following release files:
=============================================
-PyPy 1.1 Sources:
+PyPy 1.2 Sources:
-----------------
-* `pypy-1.1.0.tar.bz2`_ (sources, unix line endings) or
-* `pypy-1.1.0.tar.gz`_ (sources, unix line endings) or
-* `pypy-1.1.0.zip`_ (sources, windows line-endings)
-
-.. _`pypy-1.1.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-1.1.0.tar.bz2
-.. _`pypy-1.1.0.zip`: http://codespeak.net/download/pypy/pypy-1.1.0.zip
-.. _`pypy-1.1.0.tar.gz`: http://codespeak.net/download/pypy/pypy-1.1.0.tar.gz
+* `pypy-1.2.0.tar.bz2`_ (sources, unix line endings) or
+* `pypy-1.2.0.tar.gz`_ (sources, unix line endings) or
+* `pypy-1.2.0.zip`_ (sources, windows line-endings)
+
+.. _`pypy-1.2.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.bz2
+.. _`pypy-1.2.0.zip`: http://codespeak.net/download/pypy/pypy-1.2.0.zip
+.. _`pypy-1.2.0.tar.gz`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.gz
Prebuilt binaries
~~~~~~~~~~~~~~~~~
-We do not provide prebuilt binaries yet (but would happily
-link to other people's pages with one version or another).
+XXX
+
+The ``lang`` repository
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``lang`` part of our repository, which contains other interpreters
+developped mostly as external contributions, has moved and is no longer
+included in the above packages. You can grab it by `browsing the
+Subversion source`__.
+
+.. __: http://codespeak.net/svn/pypy/lang/
Modified: pypy/release/1.2.x/pypy/doc/extradoc.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/extradoc.txt (original)
+++ pypy/release/1.2.x/pypy/doc/extradoc.txt Fri Mar 5 15:12:41 2010
@@ -7,6 +7,9 @@
*Articles about PyPy published so far, most recent first:* (bibtex_ file)
+* `High performance implementation of Python for CLI/.NET with JIT compiler generation for dynamic languages`_,
+ A. Cuni, Ph.D. thesis
+
* `Tracing the Meta-Level: PyPy's Tracing JIT Compiler`_,
C.F. Bolz, A. Cuni, M. Fijalkowski, A. Rigo
@@ -55,6 +58,7 @@
.. _bibtex: http://codespeak.net/svn/pypy/extradoc/talk/bibtex.bib
+.. _`High performance implementation of Python for CLI/.NET with JIT compiler generation for dynamic languages`: http://codespeak.net/svn/user/antocuni/phd/thesis/thesis.pdf
.. _`How to *not* write Virtual Machines for Dynamic Languages`: http://codespeak.net/svn/pypy/extradoc/talk/dyla2007/dyla.pdf
.. _`Tracing the Meta-Level: PyPy's Tracing JIT Compiler`: http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit.pdf
.. _`Faster than C#: Efficient Implementation of Dynamic Languages on .NET`: http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009-dotnet/cli-jit.pdf
@@ -72,9 +76,17 @@
Talks and Presentations
----------------------------------
+Talks in 2010
++++++++++++++
+
+* `PyCon 2010`_.
+
+
Talks in 2009
+++++++++++++
+* `RuPy 2009`_.
+
* `EuroPython talks 2009`_.
* `PyCon talks 2009`_.
@@ -227,6 +239,8 @@
* `Architecture introduction slides`_ a mostly up-to-date
introduction for the Amsterdam PyPy-Sprint Dec 2003.
+.. _`PyCon 2010`: http://morepypy.blogspot.com/2010/02/pycon-2010-report.html
+.. _`RuPy 2009`: http://morepypy.blogspot.com/2009/11/pypy-on-rupy-2009.html
.. _`PyPy 3000`: http://codespeak.net/pypy/extradoc/talk/ep2006/pypy3000.txt
.. _`What can PyPy do for you`: http://codespeak.net/pypy/extradoc/talk/ep2006/usecases-slides.html
.. _`PyPy introduction at EuroPython 2006`: http://codespeak.net/pypy/extradoc/talk/ep2006/intro.pdf
Modified: pypy/release/1.2.x/pypy/doc/faq.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/faq.txt (original)
+++ pypy/release/1.2.x/pypy/doc/faq.txt Fri Mar 5 15:12:41 2010
@@ -56,10 +56,12 @@
OS X and mostly works under Windows too (but is tested there less
extensively). PyPy needs a CPython running on the target platform to
bootstrap, as cross compilation is not really meant to work yet.
-At the moment you need CPython 2.4 (with ctypes 0.9.9.6 or newer) or
-CPython 2.5 for the translation process.
+At the moment you need CPython 2.4 (with ctypes) or CPython 2.5 or 2.6
+for the translation process.
-PyPy also basically works in a 64-bit Linux environment.
+PyPy also basically works in a 64-bit Linux environment, but
+*it requires a 32-bit Intel CPU* for the JIT right now. (It works
+fine in a 32-bit chroot of an Intel 64.)
------------------------------------------------
Which Python version (2.x?) does PyPy implement?
@@ -131,19 +133,25 @@
.. _whysoslow:
-The answer to this question depends on how the PyPy interpreter is run. When
-optimized and translated to C, the PyPy interpreter runs somewhere between 1
-and 2 times slower than CPython. If the PyPy interpreter is run on top of
-CPython, i.e., without translation of any kind, then it is slower by a factor
-of 2000. Obtaining good measurements for the performance when run on the CLI or
-JVM is difficult, but it is safe to say that PyPy currently runs slower than
-IronPython (CLI) or Jython (JVM) for most tests.
-
-The work on the Just-In-Time compiler is currently at its fifth revision,
-but it looks like this revision is finally going to make it. It is work
-in progress; see the `JIT documentation`_.
+In three words, PyPy is "kind of fast". In more than three
+words, the answer to this question is hard to give as a single
+number. The fastest PyPy available so far is clearly PyPy
+`with a JIT included`_, optimized and translated to C. This
+version of PyPy is "kind of fast" in the sense that there are
+numerous examples of Python code that run *much faster* than
+CPython, up to a large number of times faster. And there are
+also examples of code that are just as slow as without the
+JIT. A PyPy that does not include a JIT has performance that
+is more predictable: it runs generally somewhere between 1 and
+2 times slower than CPython, in the worst case up to 4 times
+slower.
+
+Obtaining good measurements for the performance when run on
+the CLI or JVM is difficult, but the JIT on the CLI `seems to
+work nicely`__ too.
-.. _`JIT documentation`: jit/index.html
+.. __: http://codespeak.net/svn/user/antocuni/phd/thesis/thesis.pdf
+.. _`with a JIT included`: jit/index.html
.. _`prolog and javascript`:
@@ -163,10 +171,11 @@
Currently, we have preliminary versions of a JavaScript interpreter
(Leonardo Santagada as his Summer of PyPy project), a `Prolog interpreter`_
(Carl Friedrich Bolz as his Bachelor thesis), and a `SmallTalk interpreter`_
-(produced during a sprint). All of them are unfinished at the moment.
+(produced during a sprint). `All of them`_ are unfinished at the moment.
.. _`Prolog interpreter`: http://codespeak.net/svn/pypy/lang/prolog/
.. _`SmallTalk interpreter`: http://dx.doi.org/10.1007/978-3-540-89275-5_7
+.. _`All of them`: http://codespeak.net/svn/pypy/lang/
Development
========================================================================
Modified: pypy/release/1.2.x/pypy/doc/getting-started-dev.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/getting-started-dev.txt (original)
+++ pypy/release/1.2.x/pypy/doc/getting-started-dev.txt Fri Mar 5 15:12:41 2010
@@ -334,7 +334,7 @@
++++++++++++++++++++++++++++
`ctypes`_ is included in CPython 2.5 and higher. CPython 2.4 users needs to
-install it (version 0.9.9.6 or later) if they want to run low-level tests. See
+install it if they want to run low-level tests. See
the `download page of ctypes`_.
.. _`download page of ctypes`: http://sourceforge.net/project/showfiles.php?group_id=71702
Modified: pypy/release/1.2.x/pypy/doc/getting-started-python.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/getting-started-python.txt (original)
+++ pypy/release/1.2.x/pypy/doc/getting-started-python.txt Fri Mar 5 15:12:41 2010
@@ -47,34 +47,28 @@
* ``libncurses-dev`` (for the optional ``_minimal_curses`` module)
* ``libexpat1-dev`` (for the optional ``pyexpat`` module)
* ``libssl-dev`` (for the optional ``_ssl`` module)
- * ``libgc-dev`` (only when translating with `--opt=0, 1` or `size`)
+ * ``libgc-dev`` (Boehm: only when translating with `--opt=0, 1` or `size`)
2. Translation is somewhat time-consuming (30 min to
over one hour) and RAM-hungry. If you have less than 1.5 GB of
RAM (or a slow machine) you might want to pick the
`optimization level`_ `1` in the next step. A level of
- `2` or `3` gives much better results, though.
+ `2` or `3` or `jit` gives much better results, though.
Let me stress this another time: at ``--opt=1`` you get the Boehm
GC, which is here mostly for historical and for testing reasons.
You really do not want to pick it. The resulting ``pypy-c`` is
slow.
- Alternatively, if you want to enable the experimental JIT, choose
- the optimization level ``jit``.
-
3. Run::
cd pypy/translator/goal
- python translate.py --opt=3 targetpypystandalone.py
-
- possibly replacing ``--opt=3`` with ``--opt=jit`` or another
- `optimization level`_ of your choice.
+ python translate.py --opt=jit targetpypystandalone.py
- On Linux 32-bit Intel machines, you can get some extra speed
- (and extra translation time) by adding ``--gcrootfinder=asmgcc``
- just after the ``--opt`` option. (This option is implied by
- ``--opt=jit``.)
+ possibly replacing ``--opt=jit`` with another `optimization level`_
+ of your choice like ``--opt=2`` if you do not want the included JIT
+ compiler. (The default level so far is 2. Do not use ``--opt=jit``
+ on something else than Intel **32-bit** machines.)
.. _`optimization level`: config/opt.html
@@ -99,11 +93,13 @@
>>>>
This executable can be moved around or copied on other machines; see
-Installation_ below.
+Installation_ below. For now a JIT-enabled ``pypy-c`` always produces
+debugging output to stderr when it exits, unless translated with
+``--jit-debug=off``.
The ``translate.py`` script takes a very large number of options controlling
what to translate and how. See ``translate.py -h``. Some of the more
-interesting options are:
+interesting options (but for now incompatible with the JIT) are:
* ``--stackless``: this produces a pypy-c that includes features
inspired by `Stackless Python `__.
@@ -121,54 +117,12 @@
.. _`translate PyPy with the thunk object space`:
-Translating with the thunk object space
+Translating with non-standard options
++++++++++++++++++++++++++++++++++++++++
-One of the original features provided by PyPy is the "thunk"
-object space, providing lazily-computed objects in a fully
-transparent manner::
-
- cd pypy
- python bin/py.py -o thunk
-
- >>>> from __pypy__ import thunk
- >>>> def longcomputation(lst):
- .... print "computing..."
- .... return sum(lst)
- ....
- >>>> x = thunk(longcomputation, range(5))
- >>>> y = thunk(longcomputation, range(10))
-
-From the application perspective, ``x`` and ``y`` represent
-exactly the objects being returned by the ``longcomputation()``
-invocations. You can put these objects into a dictionary
-without triggering the computation::
-
- >>>> d = {5: x, 10: y}
- >>>> result = d[5]
- >>>> result
- computing...
- 10
- >>>> type(d[10])
- computing...
-
- >>>> d[10]
- 45
-
-It is interesting to note that this lazy-computing Python extension
-is solely implemented in a small `objspace/thunk.py`_ file consisting
-of around 200 lines of code.
-
-It is also possible to translate a PyPy version using the "thunk" object
-space::
-
- cd pypy/translator/goal
- python translate.py targetpypystandalone.py --objspace=thunk
-
-the example above should work in the translated result.
-
-If you want know more about pypy-exclusive features go to `objspace proxies`_
-document.
+It is possible to have non-standard features enabled for translation,
+but they are not really tested any more. Look for example at the
+`objspace proxies`_ document.
.. _`objspace proxies`: objspace-proxies.html
@@ -181,7 +135,15 @@
./translate.py --backend=cli targetpypystandalone.py
-The executable and all its dependecies will be stored in the
+Or better, try out the experimental `branch/cli-jit`_ described by
+Antonio Cuni's `Ph.D. thesis`_ and translate with the JIT::
+
+ ./translate.py -Ojit --backend=cli targetpypystandalone.py
+
+.. _`branch/cli-jit`: http://codespeak.net/svn/pypy/branch/cli-jit/
+.. _`Ph.D. thesis`: http://codespeak.net/svn/user/antocuni/phd/thesis/thesis.pdf
+
+The executable and all its dependencies will be stored in the
./pypy-cli-data directory. To run pypy.NET, you can run
./pypy-cli-data/main.exe. If you are using Linux or Mac, you can use
the convenience ./pypy-cli script::
@@ -251,11 +213,11 @@
``PREFIX/pypy/lib`` can all be found. The prefixes that are tried are::
.
- ./share/pypy-1.1
+ ./share/pypy-1.2
..
- ../share/pypy-1.1
+ ../share/pypy-1.2
../..
- ../../share/pypy-1.1
+ ../../share/pypy-1.2
../../..
etc.
@@ -334,11 +296,6 @@
.. _`CLI backend`: cli-backend.html
.. _`Boehm-Demers-Weiser garbage collector`: http://www.hpl.hp.com/personal/Hans_Boehm/gc/
.. _clr: clr-module.html
-.. _`CPythons core language regression tests`: http://codespeak.net:8099/summary?category=lib-python&branch=%3Ctrunk%3E
+.. _`CPythons core language regression tests`: http://codespeak.net:8099/summary?category=applevel&branch=%3Ctrunk%3E
.. include:: _ref.txt
-
-
-
-
-
Modified: pypy/release/1.2.x/pypy/doc/getting-started.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/getting-started.txt (original)
+++ pypy/release/1.2.x/pypy/doc/getting-started.txt Fri Mar 5 15:12:41 2010
@@ -14,10 +14,9 @@
Python itself, flexible and easy to experiment with.
We target a large variety of platforms, small and large, by providing a
compiler toolsuite that can produce custom Python versions. Platform, memory
-and threading models are aspects of the translation process - as
-opposed to encoding low level details into the language implementation itself.
-Eventually, dynamic optimization techniques - implemented as another
-translation aspect - should become robust against language changes. `more...`_
+and threading models, as well as the JIT compiler itself, are aspects of the
+translation process - as opposed to encoding low level details into the
+language implementation itself. `more...`_
.. _Python: http://docs.python.org/ref
.. _`more...`: architecture.html
Modified: pypy/release/1.2.x/pypy/doc/how-to-release.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/how-to-release.txt (original)
+++ pypy/release/1.2.x/pypy/doc/how-to-release.txt Fri Mar 5 15:12:41 2010
@@ -23,14 +23,14 @@
some of the next updates may be done before or after branching; make
sure things are ported back to the trunk and to the branch as
necessary
-* update dist/pypy/doc/contributor.txt (and possibly dist/LICENSE)
-* update dist/README
-* write release announcement dist/pypy/doc/release-x.y(.z).txt
+* update pypy/doc/contributor.txt (and possibly LICENSE)
+* update README
+* write release announcement pypy/doc/release-x.y(.z).txt
the release announcement should contain a direct link to the download page
(which is getting started).
-* update dist/pypy/doc/getting-started.txt links at the top
+* update pypy/doc/getting-started.txt links at the top
and release number references, make sure it is generally up-to-date
-* use, after the necessary updates, dist/pypy/tool/makerelease.py to
+* use, after the necessary updates, pypy/tool/makerelease.py to
make the tarballs on codespeak; this generates html doc for the
tarballs too. Use::
@@ -44,6 +44,8 @@
if some stuff is missing. We have some support for running part of
our nightly tests on tarballs (see
http://codespeak.net/svn/user/pedronis/tarball-testing).
-* write a news item for the release in dist/pypy/doc/news.txt
+* write a news item for the release in pypy/doc/news.txt
+* update http://codespeak.net/svn/pypy/dist and codespeak's
+ precomputed html files
* send announcements to pypy-dev, pypy-funding, python-list,
python-announce, python-dev ...
Modified: pypy/release/1.2.x/pypy/doc/index.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/index.txt (original)
+++ pypy/release/1.2.x/pypy/doc/index.txt Fri Mar 5 15:12:41 2010
@@ -8,7 +8,7 @@
Getting into PyPy ...
=============================================
-* `Release 1.1`_: the latest official release
+* `Release 1.2`_: the latest official release
* `PyPy Blog`_: news and status info about PyPy
@@ -56,4 +56,4 @@
.. _`Documentation`: docindex.html
.. _`Getting Started`: getting-started.html
.. _papers: extradoc.html
-.. _`Release 1.1`: release-1.1.0.html
+.. _`Release 1.2`: release-1.2.0.html
Modified: pypy/release/1.2.x/pypy/doc/jit/overview.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/jit/overview.txt (original)
+++ pypy/release/1.2.x/pypy/doc/jit/overview.txt Fri Mar 5 15:12:41 2010
@@ -16,23 +16,30 @@
--------
Writing an interpreter for a complex dynamic language like Python is not
-a small task. So doing it a high-level language looks like a good idea,
-because high-level languages have many advantages over low-level ones
-(flexibility, ease of implementation, no low-level issues...). This is
-the basic observation behind PyPy.
-
-But coding in a high-level language has other benefits beyond the
-obvious ones. Perhaps most importantly, it allows the language
-interpreter to be analyzed when turned into a compiler. This is
-precisely what our JIT compiler generator does. Based on tracing
-JIT techniques, **it can turn the interpreter of an arbitrary
-dynamic language into a just-in-time compiler for the same language.**
-It works mostly automatically and only needs guidance by the language
-implementor in the form of a small number of hints in the source code of
-the interpreter. The resulting JIT compiler has the same language
-semantics as the original interpreter by construction. It generates
-machine code for the user program while aggressively optimizing it,
-leading to a big performance boost.
+a small task, especially if, for performance goals, we want to write a
+Just-in-Time (JIT) compiler too.
+
+The good news is that it's not what we did. We indeed wrote an
+interpreter for Python, but we never wrote any JIT compiler for Python
+in PyPy. Instead, we use the fact that our interpreter for Python is
+written in RPython, which is a nice, high-level language -- and we turn
+it *automatically* into a JIT compiler for Python.
+
+This transformation is of course completely transparent to the user,
+i.e. the programmer writing Python programs. The goal (which we
+achieved) is to support *all* Python features -- including, for example,
+random frame access and debuggers. But it is also mostly transparent to
+the language implementor, i.e. to the source code of the Python
+interpreter. It only needs a bit of guidance: we had to put a small
+number of hints in the source code of our interpreter. Based on these
+hints, the *JIT compiler generator* produces a JIT compiler which has
+the same language semantics as the original interpreter by construction.
+This JIT compiler itself generates machine code at runtime, aggressively
+optimizing the user's program and leading to a big performance boost,
+while keeping the semantics unmodified. Of course, the interesting bit
+is that our Python language interpreter can evolve over time without
+getting out of sync with the JIT compiler.
+
The path we followed
--------------------
@@ -47,13 +54,15 @@
compilers. If this turns out to be correct, the practical speed of
dynamic languages could be vastly improved.
-Today (beginning 2009), our prototype is no longer using partial
-evaluation -- at least not in a way that would convince paper reviewers.
-It is instead based on the notion of *tracing JIT,* recently studied for
-Java and JavaScript. When compared to all existing tracing JITs so far,
-however, partial evaluation gives us some extra techniques that we
-already had in our previous JIT generators, notably how to optimize
-structures by removing allocations.
+All these previous JIT compiler generators were producing JIT compilers
+similar to the hand-written Psyco. But today, starting from 2009, our
+prototype is no longer using partial evaluation -- at least not in a way
+that would convince paper reviewers. It is instead based on the notion
+of *tracing JIT,* recently studied for Java and JavaScript. When
+compared to all existing tracing JITs so far, however, partial
+evaluation gives us some extra techniques that we already had in our
+previous JIT generators, notably how to optimize structures by removing
+allocations.
The closest comparison to our current JIT is Tamarin's TraceMonkey.
However, this JIT compiler is written manually, which is quite some
@@ -87,12 +96,8 @@
is modified, so that they cannot get out of sync no matter how fast
the language evolves.
-* Fast enough: we think that we can get some rather good performance out
- of the generated JIT compilers. That's the whole point, of course.
- Previous experience shows that it should be possible. Our previous
- generated JIT compilers were similar to the hand-written Psyco; due
- to limits in automating the way Psyco works, our current generated
- JIT compilers are instead similar to tracing JITs like TraceMonkey.
+* Fast enough: we can get some rather good performance out of the
+ generated JIT compilers. That's the whole point, of course.
Alternative approaches to improve speed
Modified: pypy/release/1.2.x/pypy/doc/jit/pyjitpl5.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/jit/pyjitpl5.txt (original)
+++ pypy/release/1.2.x/pypy/doc/jit/pyjitpl5.txt Fri Mar 5 15:12:41 2010
@@ -172,7 +172,7 @@
* `Tracing the Meta-Level: PyPy's Tracing JIT Compiler`__
-.. __: http://codespeak.net/svn/pypy/extradoc/talk/ipcoolps2009/bolz-tracing-jit.pdf
+.. __: http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit-final.pdf
as well as the `blog posts with the JIT tag.`__
Modified: pypy/release/1.2.x/pypy/doc/project-ideas.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/project-ideas.txt (original)
+++ pypy/release/1.2.x/pypy/doc/project-ideas.txt Fri Mar 5 15:12:41 2010
@@ -1,8 +1,6 @@
Independent project ideas relating to PyPy
==========================================
-*NOTE: This is an extremely outdated list, don't consider it seriously*
-
PyPy allows experimentation in many directions -- indeed facilitating
experimentation in language implementation was one of the main
motivations for the project. This page is meant to collect some ideas
@@ -23,35 +21,41 @@
--------------------------------
PyPy's Just-In-Time compiler relies on backends for actual code
-generation. Right now we are working on the ``pyjitpl5`` branch, which
-is not stable. Working on the JIT backends should be soon possible.
-Open ideas are to write a backend for AMD64 (Intel 64); or .NET or
-Java (requires porting the JIT frontend to ootype too, which is not too
-hard); or trying to use LLVM-JIT.
+generation. We have so far a 32-bit Intel backend, and a CLI one. Open
+ideas are to write a backend for **Intel 64** (AMD64); or a backend for
+Java; or trying again to use LLVM-JIT (which I do not really recommend).
CTypes
------
Support ctypes on more backends. Right now ctypes is supported only
-when compiling PyPy to C. A nice project would be to support it when
+when compiling PyPy to C, and there is a bit of unfinished work to
+support it on **Intel 64.** A nice project would be to support it when
compiling to .NET or the JVM. That's not too hard, the only thing needed
is to port a small module that does the actual invocation of external
-libraries (a related project would be to port this module to Jython or
-IronPython to get support for ctypes there).
+libraries (a related project is to port this module to Jython or
+IronPython to get support for ctypes there, which is something that was
+tried but not finished as far as I know).
.. _distribution:
.. _persistence:
-Experiment with distribution and persistence
---------------------------------------------
+Extensions of the Python language
+---------------------------------
+
++----------------------------------------------------------------------+
+| :NOTE: |
+| |
+| The ideas in this paragraph are marked as "experimental". We may |
+| or may not be interested in helping you out. You are warned :-) |
+| |
++----------------------------------------------------------------------+
One of the advantages of PyPy's implementation is that the Python-level type
of an object and its implementation are completely independent. This should
allow a much more intuitive interface to, for example, objects that are backed
-by a persistent store.
-
-The `transparent proxy`_ objects are a key step in this
+by a persistent store. The `transparent proxy`_ objects are a key step in this
direction; now all that remains is to implement the interesting bits :-)
An example project might be to implement functionality akin to the `ZODB's
@@ -61,15 +65,22 @@
Another example would be to implement a multi-CPU extension that internally
uses several processes and uses transparent proxies to share object views.
+Other ideas are to do something interesting with sandboxing_; or to
+work more on the Stackless_ features (e.g. integrate it with the JIT);
+or revive the logic object space, which tried to bring unification-like
+features to Python.
+
+.. _sandboxing: sandbox.html
+.. _Stackless: stackless.html
+
-Various Ideas
--------------
+Other languages
+---------------
-- improve one of the existing interpreters (e.g. the Prolog, the Scheme or
- the JavaScript interpreter or the Smalltalk VM), or start a new one
+Improve one of the `existing interpreters`__, or start a new one.
+Experiment with the JIT compiler generator.
-- revive the logic object space, which tried to bring unification-like
- features to Python
+.. __: http://codespeak.net/svn/pypy/lang/
Or else...
Modified: pypy/release/1.2.x/pypy/doc/tool/makecontributor.py
==============================================================================
--- pypy/release/1.2.x/pypy/doc/tool/makecontributor.py (original)
+++ pypy/release/1.2.x/pypy/doc/tool/makecontributor.py Fri Mar 5 15:12:41 2010
@@ -8,12 +8,12 @@
try:
path = py.std.sys.argv[1]
except IndexError:
- print "usage: %s PATH" %(py.std.sys.argv[0])
+ print "usage: %s ROOTPATH" %(py.std.sys.argv[0])
raise SystemExit, 1
d = {}
-for logentry in py.path.svnwc(py.std.sys.argv[1]).log():
+for logentry in py.path.svnwc(path).log():
a = logentry.author
if a in d:
d[a] += 1
@@ -30,6 +30,8 @@
cutoff = 5 # cutoff for authors in the LICENSE file
mark = False
for author, count in items:
+ if author in excluded:
+ continue
user = uconf.system.User(author)
try:
realname = user.realname.strip()
Modified: pypy/release/1.2.x/pypy/doc/translation.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/translation.txt (original)
+++ pypy/release/1.2.x/pypy/doc/translation.txt Fri Mar 5 15:12:41 2010
@@ -27,7 +27,7 @@
this task into several steps, and the purpose of this document is to
introduce them.
-As of the 1.1 release, RPython_ programs can be translated into the following
+As of the 1.2 release, RPython_ programs can be translated into the following
languages/platforms: C/POSIX, CLI/.NET
and Java/JVM (in addition, there's `a backend`_ that translates
`application-level`_ into `interpreter-level`_ code, but this is a special
From arigo at codespeak.net Fri Mar 5 15:14:33 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 15:14:33 +0100 (CET)
Subject: [pypy-svn] r71799 - in pypy/release/1.2.x/pypy: doc
translator/c/test translator/jvm/test translator/platform
Message-ID: <20100305141433.55C1051055@codespeak.net>
Author: arigo
Date: Fri Mar 5 15:14:31 2010
New Revision: 71799
Modified:
pypy/release/1.2.x/pypy/doc/getting-started-python.txt
pypy/release/1.2.x/pypy/translator/c/test/test_standalone.py
pypy/release/1.2.x/pypy/translator/jvm/test/test_builtin.py
pypy/release/1.2.x/pypy/translator/platform/maemo.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71702:71707
Modified: pypy/release/1.2.x/pypy/doc/getting-started-python.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/getting-started-python.txt (original)
+++ pypy/release/1.2.x/pypy/doc/getting-started-python.txt Fri Mar 5 15:14:31 2010
@@ -67,8 +67,8 @@
possibly replacing ``--opt=jit`` with another `optimization level`_
of your choice like ``--opt=2`` if you do not want the included JIT
- compiler. (The default level so far is 2. Do not use ``--opt=jit``
- on something else than Intel **32-bit** machines.)
+ compiler. (As of March 2010, the default level is ``--opt=2``, and
+ ``--opt=jit`` requires an Intel **32-bit** environment.)
.. _`optimization level`: config/opt.html
Modified: pypy/release/1.2.x/pypy/translator/c/test/test_standalone.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/c/test/test_standalone.py (original)
+++ pypy/release/1.2.x/pypy/translator/c/test/test_standalone.py Fri Mar 5 15:14:31 2010
@@ -398,7 +398,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: ValueError'
+ idx = lines.index('Fatal RPython error: ValueError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 4
l0, l1, l2 = lines[-4:-1]
assert l0 == 'RPython traceback:'
@@ -408,7 +409,8 @@
out2, err2 = cbuilder.cmdexec("x", expect_crash=True)
assert out2.strip() == ''
lines2 = err2.strip().splitlines()
- assert lines2[-1] == 'Fatal RPython error: KeyError'
+ idx = lines2.index('Fatal RPython error: KeyError') # assert found
+ lines2 = lines2[:idx+1]
l0, l1, l2 = lines2[-4:-1]
assert l0 == 'RPython traceback:'
assert re.match(r' File "\w+.c", line \d+, in entry_point', l1)
@@ -435,7 +437,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == 'done.'
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: KeyError'
+ idx = lines.index('Fatal RPython error: KeyError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 5
l0, l1, l2, l3 = lines[-5:-1]
assert l0 == 'RPython traceback:'
@@ -471,7 +474,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == 'done.'
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: KeyError'
+ idx = lines.index('Fatal RPython error: KeyError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 5
l0, l1, l2, l3 = lines[-5:-1]
assert l0 == 'RPython traceback:'
@@ -506,7 +510,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: ValueError'
+ idx = lines.index('Fatal RPython error: ValueError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 5
l0, l1, l2, l3 = lines[-5:-1]
assert l0 == 'RPython traceback:'
@@ -522,7 +527,7 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'in pypy_g_RPyRaiseException: AssertionError'
+ assert 'in pypy_g_RPyRaiseException: AssertionError' in lines
def test_assertion_error_nondebug(self):
def g(x):
@@ -539,7 +544,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'Fatal RPython error: AssertionError'
+ idx = lines.index('Fatal RPython error: AssertionError') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 4
l0, l1, l2 = lines[-4:-1]
assert l0 == 'RPython traceback:'
@@ -556,7 +562,7 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'in pypy_g_entry_point: foobar'
+ assert 'in pypy_g_entry_point: foobar' in lines
def test_ll_assert_error_nondebug(self):
py.test.skip("implement later, maybe: tracebacks even with ll_assert")
@@ -574,7 +580,8 @@
out, err = cbuilder.cmdexec("", expect_crash=True)
assert out.strip() == ''
lines = err.strip().splitlines()
- assert lines[-1] == 'PyPy assertion failed: foobar'
+ idx = lines.index('PyPy assertion failed: foobar') # assert found
+ lines = lines[:idx+1]
assert len(lines) >= 4
l0, l1, l2 = lines[-4:-1]
assert l0 == 'RPython traceback:'
Modified: pypy/release/1.2.x/pypy/translator/jvm/test/test_builtin.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/jvm/test/test_builtin.py (original)
+++ pypy/release/1.2.x/pypy/translator/jvm/test/test_builtin.py Fri Mar 5 15:14:31 2010
@@ -29,7 +29,7 @@
def test_os_access(self):
from socket import gethostname
- if gethostname() == 'wyvern':
+ if 1: # gethostname() == 'wyvern':
py.test.skip('bug in JDK when run headless: ' +
'http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6539705')
BaseTestBuiltin.test_os_access(self)
Modified: pypy/release/1.2.x/pypy/translator/platform/maemo.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/platform/maemo.py (original)
+++ pypy/release/1.2.x/pypy/translator/platform/maemo.py Fri Mar 5 15:14:31 2010
@@ -1,11 +1,12 @@
-import py
+import py, os
from pypy.translator.platform.linux import Linux, _run_subprocess, GnuMakefile
from pypy.translator.platform import ExecutionResult, log
from pypy.tool.udir import udir
from pypy.tool import autopath
def check_scratchbox():
- if not py.path.local('/scratchbox/login').check():
+ # in order to work, that file must exist and be executable by us
+ if not os.access('/scratchbox/login', os.X_OK):
py.test.skip("No scratchbox detected")
class Maemo(Linux):
From arigo at codespeak.net Fri Mar 5 15:15:58 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 15:15:58 +0100 (CET)
Subject: [pypy-svn] r71800 - in pypy/release/1.2.x: . pypy/doc
Message-ID: <20100305141558.BB97E51055@codespeak.net>
Author: arigo
Date: Fri Mar 5 15:15:57 2010
New Revision: 71800
Modified:
pypy/release/1.2.x/LICENSE
pypy/release/1.2.x/pypy/doc/contributor.txt
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71767:71768
Modified: pypy/release/1.2.x/LICENSE
==============================================================================
--- pypy/release/1.2.x/LICENSE (original)
+++ pypy/release/1.2.x/LICENSE Fri Mar 5 15:15:57 2010
@@ -85,7 +85,7 @@
Lukas Renggli
Guenter Jantzen
Dinu Gherman
- Bartosz SKOWRON
+ Bartosz Skowron
Georg Brandl
Ben Young
Jean-Paul Calderone
Modified: pypy/release/1.2.x/pypy/doc/contributor.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/contributor.txt (original)
+++ pypy/release/1.2.x/pypy/doc/contributor.txt Fri Mar 5 15:15:57 2010
@@ -58,7 +58,7 @@
Lukas Renggli
Guenter Jantzen
Dinu Gherman
- Bartosz SKOWRON
+ Bartosz Skowron
Georg Brandl
Ben Young
Jean-Paul Calderone
From arigo at codespeak.net Fri Mar 5 15:16:51 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 15:16:51 +0100 (CET)
Subject: [pypy-svn] r71801 - in pypy/release/1.2.x/pypy/config: . test
Message-ID: <20100305141651.8B01551055@codespeak.net>
Author: arigo
Date: Fri Mar 5 15:16:49 2010
New Revision: 71801
Modified:
pypy/release/1.2.x/pypy/config/pypyoption.py
pypy/release/1.2.x/pypy/config/test/test_pypyoption.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71789:71790
Modified: pypy/release/1.2.x/pypy/config/pypyoption.py
==============================================================================
--- pypy/release/1.2.x/pypy/config/pypyoption.py (original)
+++ pypy/release/1.2.x/pypy/config/pypyoption.py Fri Mar 5 15:16:49 2010
@@ -325,7 +325,6 @@
config.objspace.opcodes.suggest(CALL_LIKELY_BUILTIN=True)
if level in ['2', '3', 'jit']:
config.objspace.opcodes.suggest(CALL_METHOD=True)
- config.objspace.std.suggest(withshadowtracking=True)
config.objspace.std.suggest(withrangelist=True)
config.objspace.std.suggest(withmethodcache=True)
config.objspace.std.suggest(withprebuiltchar=True)
Modified: pypy/release/1.2.x/pypy/config/test/test_pypyoption.py
==============================================================================
--- pypy/release/1.2.x/pypy/config/test/test_pypyoption.py (original)
+++ pypy/release/1.2.x/pypy/config/test/test_pypyoption.py Fri Mar 5 15:16:49 2010
@@ -47,7 +47,7 @@
def test_set_pypy_opt_level():
conf = get_pypy_config()
set_pypy_opt_level(conf, '2')
- assert conf.objspace.std.withshadowtracking
+ assert conf.objspace.std.withsharingdict
conf = get_pypy_config()
set_pypy_opt_level(conf, '0')
assert not conf.objspace.std.newshortcut
From arigo at codespeak.net Fri Mar 5 15:29:13 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 15:29:13 +0100 (CET)
Subject: [pypy-svn] r71802 - pypy/trunk/pypy/translator/platform
Message-ID: <20100305142913.59B4051055@codespeak.net>
Author: arigo
Date: Fri Mar 5 15:29:11 2010
New Revision: 71802
Modified:
pypy/trunk/pypy/translator/platform/__init__.py
Log:
Fix this. 'Darwin' is not even imported.
Modified: pypy/trunk/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/__init__.py (original)
+++ pypy/trunk/pypy/translator/platform/__init__.py Fri Mar 5 15:29:11 2010
@@ -181,13 +181,11 @@
elif sys.platform == 'darwin':
from pypy.translator.platform.darwin import Darwin_i386, Darwin_x86_64
import platform
- if platform.machine() == 'i386':
- if sys.maxint <= 2147483647:
- host_factory = Darwin_i386
- else:
- host_factory = Darwin_x86_64
+ assert platform.machine() in ('i386', 'x86_64')
+ if sys.maxint <= 2147483647:
+ host_factory = Darwin_i386
else:
- host_factory = Darwin
+ host_factory = Darwin_x86_64
elif sys.platform == 'freebsd7':
from pypy.translator.platform.freebsd7 import Freebsd7, Freebsd7_64
import platform
From arigo at codespeak.net Fri Mar 5 15:29:53 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 15:29:53 +0100 (CET)
Subject: [pypy-svn] r71803 - pypy/release/1.2.x/pypy/translator/platform
Message-ID: <20100305142953.B6F5051055@codespeak.net>
Author: arigo
Date: Fri Mar 5 15:29:52 2010
New Revision: 71803
Modified:
pypy/release/1.2.x/pypy/translator/platform/__init__.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71801:71802
Modified: pypy/release/1.2.x/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/platform/__init__.py (original)
+++ pypy/release/1.2.x/pypy/translator/platform/__init__.py Fri Mar 5 15:29:52 2010
@@ -181,13 +181,11 @@
elif sys.platform == 'darwin':
from pypy.translator.platform.darwin import Darwin_i386, Darwin_x86_64
import platform
- if platform.machine() == 'i386':
- if sys.maxint <= 2147483647:
- host_factory = Darwin_i386
- else:
- host_factory = Darwin_x86_64
+ assert platform.machine() in ('i386', 'x86_64')
+ if sys.maxint <= 2147483647:
+ host_factory = Darwin_i386
else:
- host_factory = Darwin
+ host_factory = Darwin_x86_64
elif sys.platform == 'freebsd7':
from pypy.translator.platform.freebsd7 import Freebsd7, Freebsd7_64
import platform
From tobami at codespeak.net Fri Mar 5 16:30:26 2010
From: tobami at codespeak.net (tobami at codespeak.net)
Date: Fri, 5 Mar 2010 16:30:26 +0100 (CET)
Subject: [pypy-svn] r71805 - in codespeed/pyspeed: codespeed templates
Message-ID: <20100305153026.7BDA351055@codespeak.net>
Author: tobami
Date: Fri Mar 5 16:30:24 2010
New Revision: 71805
Modified:
codespeed/pyspeed/codespeed/views.py
codespeed/pyspeed/templates/overview.html
codespeed/pyspeed/templates/overview_table.html
codespeed/pyspeed/templates/timeline.html
Log:
changed permalinkToTimeline so that it selects both default interpreters. Changed arithmetic average implementation. Refactored a bit duplicated colortable and update table overview.html code
Modified: codespeed/pyspeed/codespeed/views.py
==============================================================================
--- codespeed/pyspeed/codespeed/views.py (original)
+++ codespeed/pyspeed/codespeed/views.py Fri Mar 5 16:30:24 2010
@@ -146,6 +146,7 @@
).filter(interpreter=1)
table_list = []
+ totals = {'change': [], 'trend': [], 'relative': []}
for bench in Benchmark.objects.all():
resultquery = result_list.filter(benchmark=bench)
if not len(resultquery): continue
@@ -155,6 +156,7 @@
c = change_list.filter(benchmark=bench)
if c.count():
change = (result - c[0].value)*100/c[0].value
+ totals['change'].append(result / c[0].value)
#calculate past average
average = 0
@@ -174,7 +176,7 @@
if average:
average = average / averagecount
trend = (result - average)*100/average
- #trend = "%.2f" % trend
+ totals['trend'].append(result / average)
else:
trend = "-"
@@ -182,6 +184,7 @@
c = base_list.filter(benchmark=bench)
if c.count():
relative = c[0].value / result
+ totals['relative'].append(relative)
table_list.append({
'benchmark': bench.name,
'bench_description': bench.description,
@@ -191,15 +194,23 @@
'relative': relative
})
- totals = {'result': 0, 'change': 0, 'trend': 0, 'relative': 0}
- lengths = {'result': 0, 'change': 0, 'trend': 0, 'relative': 0}
- for row in table_list:
- for key in totals.keys():
- if type(row[key]) == float:
- totals[key] += row[key]
- lengths[key] += 1
- for tot in totals:
- if lengths[tot]: totals[tot] = totals[tot]/lengths[tot]
+ # Compute Arithmetic averages
+ for key in totals.keys():
+ totals[key] = float(sum(totals[key]) / len(totals[key]))
+ totals['change'] = (totals['change'] - 1) * 100#transform ratio to percentage
+ totals['trend'] = (totals['trend'] - 1) * 100#transform ratio to percentage
+
+ # Compute Geometric average
+ #for key in totals:
+ #if not len(totals[key]):
+ #totals[key] = "-"
+ #continue
+ ## taken from python-statlib
+ #mult = 1.0
+ #one_over_n = 1.0/len(totals[key])
+ #for item in totals[key]:
+ #mult = mult * pow(item,one_over_n)
+ #totals[key] = mult - 1.0
return render_to_response('overview_table.html', locals())
Modified: codespeed/pyspeed/templates/overview.html
==============================================================================
--- codespeed/pyspeed/templates/overview.html (original)
+++ codespeed/pyspeed/templates/overview.html Fri Mar 5 16:30:24 2010
@@ -18,6 +18,11 @@
function permalinkToTimeline(benchmark) {
var conf = new Object();
conf["interpreters"] = $("input[name='interpreter']:checked").val();
+ //configure default interpreters checked (2 and 3)
+ //if interpreter is pypy-c or pypy-c-jit add the other one.
+ //If it is none of those keep just that one
+ if (conf["interpreters"] == "2") { conf["interpreters"] += ",3"; }
+ else if (conf["interpreters"] == "3") { conf["interpreters"] += ",2"; }
conf["benchmark"] = benchmark;
window.location="/timeline/?" + ued_encode(conf);
}
@@ -40,19 +45,7 @@
var changethres = {{ defaultchangethres }};
var trendthres = {{ defaulttrendthres }};
var compthres = {{ defaultcompthres }};
- $("#results > tbody > tr").each(function() {
- //Color change column
- var change = $(this).children("td:eq(2)").text().slice(0, -1);
- $(this).children("td:eq(2)").addClass(getColorcode(-change, changethres, -changethres));
- //Color trend column
- var trend = $(this).children("td:eq(3)").text().slice(0, -1);
- $(this).children("td:eq(3)").addClass(getColorcode(-trend, trendthres, -trendthres));
- //Color comparison column
- var comp = parseFloat($(this).children("td:eq(4)").text());
- $(this).children("td:eq(4)").addClass(getColorcode(comp, 1+compthres, 1-compthres));
- });
- //process average row
- $("#results > tfoot > tr").each(function() {
+ $("#results > :not(thead) > tr").each(function() {
//Color change column
var change = $(this).children("td:eq(2)").text().slice(0, -1);
$(this).children("td:eq(2)").addClass(getColorcode(-change, changethres, -changethres));
@@ -65,9 +58,9 @@
function updateTable() {
colorTable();
//process table rows
+ var tdwidth = parseInt($("#results thead tr").find("th:eq(5)").css("width"));
$("#results > tbody > tr").each(function() {
//Size plot bars
- var tdwidth = parseInt($("#results thead tr").find("th:eq(5)").css("width"));
var bar = transToLogBars(58, tdwidth, parseFloat($(this).children("td:eq(4)").text()));
$(this).children("td:eq(5)").find("span").css("width", bar["width"]).css("margin-left", bar["margin"]);
//Link rows to timelines
@@ -78,7 +71,6 @@
//process average row
$("#results > tfoot > tr").each(function() {
//Size plot bar for Average
- var tdwidth = parseInt($("#results thead tr").find("th:eq(5)").css("width"));
var bar = transToLogBars(58, tdwidth, parseFloat($(this).children("td:eq(4)").text()));
$(this).children("td:eq(5)").find("span").css("width", bar["width"]).css("margin-left", bar["margin"]);
});
Modified: codespeed/pyspeed/templates/overview_table.html
==============================================================================
--- codespeed/pyspeed/templates/overview_table.html (original)
+++ codespeed/pyspeed/templates/overview_table.html Fri Mar 5 16:30:24 2010
@@ -5,7 +5,7 @@
- Average {{ totals.change|floatformat:2 }}% {{ totals.trend|floatformat:2 }}% {{ totals.relative|floatformat:2 }} -
+ Average {{ totals.change|floatformat:2 }}% {{ totals.trend|floatformat:2 }}% {{ totals.relative|floatformat:2 }} -
{% for row in table_list %}
Modified: codespeed/pyspeed/templates/timeline.html
==============================================================================
--- codespeed/pyspeed/templates/timeline.html (original)
+++ codespeed/pyspeed/templates/timeline.html Fri Mar 5 16:30:24 2010
@@ -29,7 +29,7 @@
function renderPlot(data) {
if(data["error"] != "None") {
- h = parseInt($("#content").css("height"));
+ h = parseInt($("#content").css("height"));//get height for error message
$("#content").html(getLoadText(data["error"], h));
return 1;
}
@@ -160,7 +160,7 @@
Results for last
-
{% for rev in lastrevisions %}
+ {% for rev in lastrevisions %}
{{ rev }} {% endfor %}
revisionsPermalink
From fijal at codespeak.net Fri Mar 5 17:05:46 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 17:05:46 +0100 (CET)
Subject: [pypy-svn] r71808 - pypy/benchmarks
Message-ID: <20100305160546.C71A351057@codespeak.net>
Author: fijal
Date: Fri Mar 5 17:05:45 2010
New Revision: 71808
Modified:
pypy/benchmarks/runner.py
Log:
Kill --fast for now. We should have better way to distinguish warmup
from normal run, but for now simply kill fast
Modified: pypy/benchmarks/runner.py
==============================================================================
--- pypy/benchmarks/runner.py (original)
+++ pypy/benchmarks/runner.py Fri Mar 5 17:05:45 2010
@@ -14,7 +14,7 @@
force_host=None):
funcs = perf.BENCH_FUNCS.copy()
funcs.update(perf._FindAllBenchmarks(benchmarks.__dict__))
- opts = ['-f', '-b', ','.join(benchmark_set), '--inherit_env=PATH',
+ opts = ['-b', ','.join(benchmark_set), '--inherit_env=PATH',
'--no_charts']
if args:
opts += ['--args', args]
From fijal at codespeak.net Fri Mar 5 17:20:24 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 17:20:24 +0100 (CET)
Subject: [pypy-svn] r71810 - in pypy/benchmarks: . own own/twisted
unladen_swallow
Message-ID: <20100305162024.9A2C551057@codespeak.net>
Author: fijal
Date: Fri Mar 5 17:20:22 2010
New Revision: 71810
Added:
pypy/benchmarks/own/twisted/
pypy/benchmarks/own/twisted/TODO
pypy/benchmarks/own/twisted/accepts.py (contents, props changed)
pypy/benchmarks/own/twisted/all.py (contents, props changed)
pypy/benchmarks/own/twisted/benchlib.py (contents, props changed)
pypy/benchmarks/own/twisted/iteration.py (contents, props changed)
pypy/benchmarks/own/twisted/names.py (contents, props changed)
pypy/benchmarks/own/twisted/pb.py (contents, props changed)
pypy/benchmarks/own/twisted/tcp.py (contents, props changed)
pypy/benchmarks/own/twisted/threads.py (contents, props changed)
pypy/benchmarks/own/twisted/web.py (contents, props changed)
Removed:
pypy/benchmarks/own/twisted_benchlib.py
pypy/benchmarks/own/twisted_iteration.py
pypy/benchmarks/own/twisted_names.py
pypy/benchmarks/own/twisted_web.py
Modified:
pypy/benchmarks/benchmarks.py
pypy/benchmarks/unladen_swallow/perf.py
Log:
Import twisted benchmarks from their official place. Kill our edited versions.
By default we run 3 iterations of warmup + 10 iterations of normal, until
we have a better metric, that's probably fine
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Fri Mar 5 17:20:22 2010
@@ -17,22 +17,34 @@
d[BM.func_name] = BM
-TWISTED = [relative('lib/twisted-trunk'), relative('lib/zope.interface-3.5.3/src')]
+def _register_new_bm_twisted(name, bm_name, d, **opts):
+ def Measure(python, options):
+ def parser(line):
+ number = float(line.split(" ")[0])
+ return 3000/number
+ bm_path = relative('own', 'twisted', name + '.py')
+ return MeasureGeneric(python, options, bm_path, parser=parser, **opts)
+ Measure.func_name = 'Measure' + name.capitalize()
+
+ def BM(*args, **kwds):
+ return SimpleBenchmark(Measure, *args, **kwds)
+ BM.func_name = 'BM_' + bm_name
+
+ d[BM.func_name] = BM
+
+TWISTED = [relative('lib/twisted-trunk'), relative('lib/zope.interface-3.5.3/src'), relative('own/twisted')]
opts = {
'gcbench' : {'iteration_scaling' : .10},
- 'twisted_iteration': {'iteration_scaling': .10,
- 'bm_env': {'PYTHONPATH': ':'.join(TWISTED)}},
- 'twisted_web': {'iteration_scaling': .10,
- 'bm_env': {'PYTHONPATH': ':'.join(TWISTED)}},
- 'twisted_names': {'iteration_scaling': .10,
- 'bm_env': {'PYTHONPATH': ':'.join(TWISTED)}},
}
for name in ['float', 'nbody_modified', 'meteor-contest', 'fannkuch',
- 'spectral-norm', 'chaos', 'telco', 'gcbench',
- 'twisted_iteration', 'twisted_web', 'twisted_names']:
+ 'spectral-norm', 'chaos', 'telco']:
_register_new_bm(name, name, globals(), **opts.get(name, {}))
+for name in ['web', 'names', 'accepts', 'iteration', 'tcp', 'pb']:
+ _register_new_bm_twisted(name, 'twisted_' + name,
+ globals(), bm_env={'PYTHONPATH': ':'.join(TWISTED)},
+ iteration_scaling=.20)
_register_new_bm('spitfire', 'spitfire', globals(),
extra_args=['--benchmark=spitfire_o4'])
_register_new_bm('spitfire', 'spitfire_cstringio', globals(),
Added: pypy/benchmarks/own/twisted/TODO
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/TODO Fri Mar 5 17:20:22 2010
@@ -0,0 +1,2 @@
+Debug dns slowdown over time
+Add an AMP benchmark
Added: pypy/benchmarks/own/twisted/accepts.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/accepts.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,55 @@
+
+from __future__ import division
+
+from twisted.internet.protocol import ServerFactory, ClientFactory, Protocol
+from twisted.internet.error import ConnectionClosed
+from twisted.internet.defer import Deferred
+
+from benchlib import Client, driver
+
+
+class Client(Client):
+ def __init__(self, reactor, portNumber):
+ super(Client, self).__init__(reactor)
+ self._portNumber = portNumber
+ self._factory = ClientFactory()
+
+
+ def _request(self):
+ finished = Deferred()
+ factory = ClientFactory()
+ factory.protocol = Protocol
+ factory.clientConnectionLost = factory.clientConnectionFailed = lambda connector, reason: finished.errback(reason)
+ finished.addErrback(self._filterFinished)
+ self._reactor.connectTCP('127.0.0.1', self._portNumber, factory)
+ finished.addCallback(self._continue)
+ finished.addErrback(self._stop)
+
+
+ def _filterFinished(self, reason):
+ reason.trap(ConnectionClosed)
+
+
+class CloseConnection(Protocol):
+ def makeConnection(self, transport):
+ transport.loseConnection()
+
+
+
+def main(reactor, duration):
+ concurrency = 50
+
+ factory = ServerFactory()
+ factory.protocol = CloseConnection
+ port = reactor.listenTCP(0, factory)
+
+ client = Client(reactor, port.getHost().port)
+ d = client.run(concurrency, duration)
+ return d
+
+
+
+if __name__ == '__main__':
+ import sys
+ import accepts
+ driver(accepts.main, sys.argv)
Added: pypy/benchmarks/own/twisted/all.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/all.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,8 @@
+
+from benchlib import multidriver
+
+import accepts, tcp, iteration, names, threads, web, pb
+
+if __name__ == '__main__':
+ multidriver(
+ accepts.main, tcp.main, iteration.main, names.main, threads.main, web.main, pb.main)
Added: pypy/benchmarks/own/twisted/benchlib.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/benchlib.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,87 @@
+
+import sys
+from twisted.internet.defer import Deferred
+from twisted.internet import reactor
+from twisted.python import log
+
+class Client(object):
+ def __init__(self, reactor):
+ self._reactor = reactor
+ self._requestCount = 0
+
+ def run(self, concurrency, duration):
+ self._reactor.callLater(duration, self._stop, None)
+ self._finished = Deferred()
+ for i in range(concurrency):
+ self._request()
+ return self._finished
+
+ def _continue(self, ignored):
+ self._requestCount += 1
+ if self._finished is not None:
+ self._request()
+
+ def _stop(self, reason):
+ if self._finished is not None:
+ finished = self._finished
+ self._finished = None
+ if reason is not None:
+ finished.errback(reason)
+ else:
+ finished.callback(self._requestCount)
+
+PRINT_TEMPL = ('%(stats)s %(name)s/sec (%(count)s %(name)s '
+ 'in %(duration)s seconds)')
+
+def benchmark_report(acceptCount, duration, name):
+ print PRINT_TEMPL % {
+ 'stats' : acceptCount / duration,
+ 'name' : name,
+ 'count' : acceptCount,
+ 'duration' : duration
+ }
+
+def setup_driver(f, argv, reactor):
+ from twisted.python.usage import Options
+
+ class BenchmarkOptions(Options):
+ optParameters = [
+ ('iterations', 'n', 1, 'number of iterations', int),
+ ('duration', 'd', 5, 'duration of each iteration', float),
+ ('warmup', 'w', 3, 'number of warmup iterations', int),
+ ]
+
+ options = BenchmarkOptions()
+ options.parseOptions(argv[1:])
+ duration = options['duration']
+ jobs = [f] * options['iterations']
+ d = Deferred()
+ def work(res, counter):
+ try:
+ f = jobs.pop()
+ except IndexError:
+ d.callback(None)
+ else:
+ next = f(reactor, duration)
+ if counter <= 0:
+ next.addCallback(benchmark_report, duration, f.__module__)
+ next.addCallbacks(work, d.errback, (counter - 1,))
+ work(None, options['warmup'])
+ return d
+
+def driver(f, argv):
+ d = setup_driver(f, argv, reactor)
+ d.addErrback(log.err)
+ reactor.callWhenRunning(d.addBoth, lambda ign: reactor.stop())
+ reactor.run()
+
+def multidriver(*f):
+ jobs = iter(f)
+ def work():
+ for job in jobs:
+ d = setup_driver(job, sys.argv, reactor)
+ d.addCallback(lambda ignored: work())
+ return
+ reactor.stop()
+ reactor.callWhenRunning(work)
+ reactor.run()
Added: pypy/benchmarks/own/twisted/iteration.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/iteration.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,25 @@
+
+from __future__ import division
+
+from benchlib import Client, driver
+
+
+class Client(Client):
+ def _request(self):
+ self._reactor.callLater(0.0, self._continue, None)
+
+
+
+def main(reactor, duration):
+ concurrency = 10
+
+ client = Client(reactor)
+ d = client.run(concurrency, duration)
+ return d
+
+
+
+if __name__ == '__main__':
+ import sys
+ import iteration
+ driver(iteration.main, sys.argv)
Added: pypy/benchmarks/own/twisted/names.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/names.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,47 @@
+
+from __future__ import division
+
+from twisted.names.dns import DNSDatagramProtocol
+from twisted.names.server import DNSServerFactory
+from twisted.names import hosts, client
+
+from benchlib import Client, driver
+
+
+class Client(Client):
+ def __init__(self, reactor, portNumber, timeout):
+ self._resolver = client.Resolver(servers=[('127.0.0.1', portNumber)])
+ self._timeout = timeout
+ super(Client, self).__init__(reactor)
+
+
+ def _request(self):
+ d = self._resolver.lookupAddress(
+ 'localhost', timeout=(self._timeout,))
+ d.addCallback(self._continue)
+ d.addErrback(self._stop)
+
+
+
+
+def main(reactor, duration):
+ concurrency = 10
+
+ controller = DNSServerFactory([hosts.Resolver()])
+ port = reactor.listenUDP(0, DNSDatagramProtocol(controller))
+ # Have queries time out no sooner than the duration of this benchmark so
+ # we don't have to deal with retries or timeout errors.
+ client = Client(reactor, port.getHost().port, duration)
+ d = client.run(concurrency, duration)
+ def cleanup(passthrough):
+ d = port.stopListening()
+ d.addCallback(lambda ign: passthrough)
+ return d
+ d.addBoth(cleanup)
+ return d
+
+
+if __name__ == '__main__':
+ import sys
+ import names
+ driver(names.main, sys.argv)
Added: pypy/benchmarks/own/twisted/pb.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/pb.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,61 @@
+
+"""
+Benchmark for Twisted Spread.
+"""
+
+from __future__ import division
+
+from twisted.spread.pb import PBServerFactory, PBClientFactory, Root
+
+from benchlib import Client, driver
+
+
+class BenchRoot(Root):
+ def remote_discard(self, argument):
+ pass
+
+
+
+class Client(Client):
+ _structure = [
+ 'hello' * 100,
+ {'foo': 'bar',
+ 'baz': 100,
+ u'these are bytes': (1, 2, 3)}]
+
+ def __init__(self, reactor, port):
+ super(Client, self).__init__(reactor)
+ self._port = port
+
+
+ def run(self, *args, **kwargs):
+ def connected(reference):
+ self._reference = reference
+ return super(Client, self).run(*args, **kwargs)
+ client = PBClientFactory()
+ d = client.getRootObject()
+ d.addCallback(connected)
+ self._reactor.connectTCP('127.0.0.1', self._port, client)
+ return d
+
+
+ def _request(self):
+ d = self._reference.callRemote('discard', self._structure)
+ d.addCallback(self._continue)
+ d.addErrback(self._stop)
+
+
+def main(reactor, duration):
+ concurrency = 15
+
+ server = PBServerFactory(BenchRoot())
+ port = reactor.listenTCP(0, server)
+ client = Client(reactor, port.getHost().port)
+ d = client.run(concurrency, duration)
+ return d
+
+
+if __name__ == '__main__':
+ import sys
+ import pb
+ driver(pb.main, sys.argv)
Added: pypy/benchmarks/own/twisted/tcp.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/tcp.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,93 @@
+
+"""
+This benchmarks runs a trivial Twisted TCP echo server and a client pumps as
+much data to it as it can in a fixed period of time.
+
+The size of the string passed to each write call may play a significant
+factor in the performance of this benchmark.
+"""
+
+from __future__ import division
+
+from twisted.internet.defer import Deferred
+from twisted.internet.protocol import ServerFactory, ClientCreator, Protocol
+from twisted.protocols.wire import Echo
+
+from benchlib import driver
+
+
+class Counter(Protocol):
+ count = 0
+
+ def dataReceived(self, bytes):
+ self.count += len(bytes)
+
+
+
+class Client(object):
+ _finished = None
+
+ def __init__(self, reactor, port):
+ self._reactor = reactor
+ self._port = port
+
+
+ def run(self, duration, chunkSize):
+ self._duration = duration
+ self._bytes = 'x' * chunkSize
+ # Set up a connection
+ cc = ClientCreator(self._reactor, Counter)
+ d = cc.connectTCP('127.0.0.1', self._port)
+ d.addCallback(self._connected)
+ return d
+
+
+ def _connected(self, client):
+ self._client = client
+ self._stopCall = self._reactor.callLater(self._duration, self._stop)
+ client.transport.registerProducer(self, False)
+ self._finished = Deferred()
+ return self._finished
+
+
+ def _stop(self):
+ self.stopProducing()
+ self._client.transport.unregisterProducer()
+ self._finish(self._client.count)
+
+
+ def _finish(self, value):
+ if self._finished is not None:
+ finished = self._finished
+ self._finished = None
+ finished.callback(value)
+
+
+ def resumeProducing(self):
+ self._client.transport.write(self._bytes)
+
+
+ def stopProducing(self):
+ self._client.transport.loseConnection()
+
+
+ def connectionLost(self, reason):
+ self._finish(reason)
+
+
+
+def main(reactor, duration):
+ chunkSize = 16384
+
+ server = ServerFactory()
+ server.protocol = Echo
+ serverPort = reactor.listenTCP(0, server)
+ client = Client(reactor, serverPort.getHost().port)
+ d = client.run(duration, chunkSize)
+ return d
+
+
+if __name__ == '__main__':
+ import sys
+ import tcp
+ driver(tcp.main, sys.argv)
Added: pypy/benchmarks/own/twisted/threads.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/threads.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,29 @@
+
+from __future__ import division
+
+from twisted.internet.threads import deferToThread
+
+from benchlib import Client, driver
+
+
+class Client(Client):
+ def _request(self):
+ d = deferToThread(lambda: None)
+ d.addCallback(self._continue)
+ d.addErrback(self._stop)
+
+
+
+def main(reactor, duration):
+ concurrency = 10
+
+ client = Client(reactor)
+ d = client.run(concurrency, duration)
+ return d
+
+
+
+if __name__ == '__main__':
+ import sys
+ import threads
+ driver(threads.main, sys.argv)
Added: pypy/benchmarks/own/twisted/web.py
==============================================================================
--- (empty file)
+++ pypy/benchmarks/own/twisted/web.py Fri Mar 5 17:20:22 2010
@@ -0,0 +1,76 @@
+
+"""
+This benchmark runs a trivial Twisted Web server and client and makes as
+many requests as it can in a fixed period of time.
+
+A significant problem with this benchmark is the lack of persistent
+connections in the HTTP client. Lots of TCP connections means lots of
+overhead in the kernel that's not really what we're trying to benchmark.
+Plus lots of sockets end up in TIME_WAIT which has a (briefly) persistent
+effect on system-wide performance and makes consecutive runs of the
+benchmark vary wildly in their results.
+"""
+
+from __future__ import division
+
+from twisted.internet.protocol import Protocol
+from twisted.internet.defer import Deferred
+from twisted.web.server import Site
+from twisted.web.static import Data
+from twisted.web.resource import Resource
+from twisted.web.client import ResponseDone, Agent
+
+from benchlib import Client, driver
+
+
+class BodyConsumer(Protocol):
+ def __init__(self, finished):
+ self.finished = finished
+
+ def connectionLost(self, reason):
+ if reason.check(ResponseDone):
+ self.finished.callback(None)
+ else:
+ self.finished.errback(reason)
+
+
+
+class Client(Client):
+ def __init__(self, reactor, portNumber, agent):
+ self._requestLocation = 'http://127.0.0.1:%d/' % (portNumber,)
+ self._agent = agent
+ super(Client, self).__init__(reactor)
+
+
+ def _request(self):
+ d = self._agent.request('GET', self._requestLocation)
+ d.addCallback(self._read)
+ d.addCallback(self._continue)
+ d.addErrback(self._stop)
+
+
+ def _read(self, response):
+ finished = Deferred()
+ response.deliverBody(BodyConsumer(finished))
+ return finished
+
+
+
+def main(reactor, duration):
+ concurrency = 10
+
+ root = Resource()
+ root.putChild('', Data("Hello, world", "text/plain"))
+ port = reactor.listenTCP(
+ 0, Site(root), backlog=128, interface='127.0.0.1')
+ agent = Agent(reactor)
+ client = Client(reactor, port.getHost().port, agent)
+ d = client.run(concurrency, duration)
+ return d
+
+
+
+if __name__ == '__main__':
+ import sys
+ import web
+ driver(web.main, sys.argv)
Modified: pypy/benchmarks/unladen_swallow/perf.py
==============================================================================
--- pypy/benchmarks/unladen_swallow/perf.py (original)
+++ pypy/benchmarks/unladen_swallow/perf.py Fri Mar 5 17:20:22 2010
@@ -754,7 +754,7 @@
def MeasureGeneric(python, options, bm_path, bm_env=None,
- extra_args=[], iteration_scaling=1):
+ extra_args=[], iteration_scaling=1, parser=float):
"""Abstract measurement function for Unladen's bm_* scripts.
Based on the values of options.fast/rigorous, will pass -n {5,50,100} to
@@ -792,7 +792,7 @@
result, mem_usage = CallAndCaptureOutput(command, bm_env,
track_memory=options.track_memory,
inherit_env=options.inherit_env)
- times = [float(line) for line in result.splitlines()]
+ times = [parser(line) for line in result.splitlines()]
return times, mem_usage
From fijal at codespeak.net Fri Mar 5 17:21:36 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 17:21:36 +0100 (CET)
Subject: [pypy-svn] r71811 - pypy/benchmarks/own/twisted
Message-ID: <20100305162136.7B54651057@codespeak.net>
Author: fijal
Date: Fri Mar 5 17:21:34 2010
New Revision: 71811
Modified:
pypy/benchmarks/own/twisted/benchlib.py
Log:
Make sure we don't run out of TCP connections
Modified: pypy/benchmarks/own/twisted/benchlib.py
==============================================================================
--- pypy/benchmarks/own/twisted/benchlib.py (original)
+++ pypy/benchmarks/own/twisted/benchlib.py Fri Mar 5 17:21:34 2010
@@ -34,6 +34,9 @@
'in %(duration)s seconds)')
def benchmark_report(acceptCount, duration, name):
+ if acceptCount < 10:
+ reactor.stop()
+ raise Exception("Run out of TCP connections!")
print PRINT_TEMPL % {
'stats' : acceptCount / duration,
'name' : name,
From dan at codespeak.net Fri Mar 5 17:37:51 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Fri, 5 Mar 2010 17:37:51 +0100 (CET)
Subject: [pypy-svn] r71814 -
pypy/branch/micronumpy/pypy/module/micronumpy/test
Message-ID: <20100305163751.539CD51057@codespeak.net>
Author: dan
Date: Fri Mar 5 17:37:49 2010
New Revision: 71814
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Fixed test_get_set_slices() a bit to be (mostly) comptaible with CPython, all other tests pass on both CPython and PyPy now.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Fri Mar 5 17:37:49 2010
@@ -44,9 +44,9 @@
cls.w_compare = cls.space.appexec([],
"""():
def compare(a, b):
+ assert a.dtype == type(b[0])
for x, y in zip(a, b):
if x != y: return False
- assert type(x) == type(y)
return True
return compare""")
cls.w_length = cls.space.appexec([], """(): return 16""")
@@ -196,12 +196,11 @@
cls.w_compare = cls.space.appexec([],
"""():
def compare(a, b):
+ assert a.dtype == type(b[0])
for x, y in zip(a, b):
if x != y: return False
- assert type(x) == type(y)
return True
return compare""")
-
def test_multidim(self):
from numpy import zeros
@@ -254,6 +253,7 @@
assert ar[i, j] == i*3+j
def test_get_set_slices(self):
+ skip("We don't raise exceptions like CPython NumPy.")
from numpy import array
gen_array = self.gen_array
compare = self.compare
@@ -263,20 +263,21 @@
assert s1[1]==1
s2 = ar[1:3]
assert s2[0][0] == 3
- raises(IndexError, ar.__getitem__, 'what a strange index')
+ raises(ValueError, ar.__getitem__, 'what a strange index') #FIXME: throw this exception
raises(IndexError, ar.__getitem__, (2, 2, 2)) #too many
raises(IndexError, ar.__getitem__, 5)
raises(IndexError, ar.__getitem__, (0, 6))
- #print ar[2:2].shape
+
assert 0 in ar[2:2].shape
assert compare(ar[-1], ar[2])
assert compare(ar[2:3][0], ar[2])
assert compare(ar[1, 0::2], [3, 5])
assert compare(ar[0::2, 0], [0, 6])
+
#setitem
ar[2] = 3
assert ar[2, 0] == ar[2, 1] == ar[2, 2] == 3
- raises(ValueError, ar.__setitem__, slice(2, 3), [1])
+ raises(ValueError, ar.__setitem__, slice(2, 3), [1]) #FIXME: doesn't throw
ar[2] = [0, 1, 2]
assert compare(ar[0], ar[2])
assert compare(ar[..., 0], [0, 3, 0])
From dan at codespeak.net Fri Mar 5 17:57:48 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Fri, 5 Mar 2010 17:57:48 +0100 (CET)
Subject: [pypy-svn] r71815 -
pypy/branch/micronumpy/pypy/module/micronumpy/test
Message-ID: <20100305165748.0BD1F51057@codespeak.net>
Author: dan
Date: Fri Mar 5 17:57:47 2010
New Revision: 71815
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Tests now completely CPython NumPy compatible, but we have to skip a test that we don't comply with.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Fri Mar 5 17:57:47 2010
@@ -257,6 +257,7 @@
from numpy import array
gen_array = self.gen_array
compare = self.compare
+
#getitem
ar = array(gen_array((3,3)))
s1 = ar[0]
@@ -277,7 +278,7 @@
#setitem
ar[2] = 3
assert ar[2, 0] == ar[2, 1] == ar[2, 2] == 3
- raises(ValueError, ar.__setitem__, slice(2, 3), [1]) #FIXME: doesn't throw
+ ar[2:3] == [1] #FIXME: this probably throws
ar[2] = [0, 1, 2]
assert compare(ar[0], ar[2])
assert compare(ar[..., 0], [0, 3, 0])
From arigo at codespeak.net Fri Mar 5 18:13:11 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 18:13:11 +0100 (CET)
Subject: [pypy-svn] r71817 - in pypy/trunk/pypy: objspace/flow
objspace/flow/test rlib translator/c/test
Message-ID: <20100305171311.8D69351057@codespeak.net>
Author: arigo
Date: Fri Mar 5 18:13:09 2010
New Revision: 71817
Modified:
pypy/trunk/pypy/objspace/flow/objspace.py
pypy/trunk/pypy/objspace/flow/test/test_objspace.py
pypy/trunk/pypy/rlib/runicode.py
pypy/trunk/pypy/translator/c/test/test_typed.py
Log:
Bah. Fix an issue with runicode. It required a bit more
hacking at the flow space.
Modified: pypy/trunk/pypy/objspace/flow/objspace.py
==============================================================================
--- pypy/trunk/pypy/objspace/flow/objspace.py (original)
+++ pypy/trunk/pypy/objspace/flow/objspace.py Fri Mar 5 18:13:09 2010
@@ -370,6 +370,9 @@
def call_args(self, w_callable, args):
try:
fn = self.unwrap(w_callable)
+ if hasattr(fn, "_flowspace_rewrite_directly_as_"):
+ fn = fn._flowspace_rewrite_directly_as_
+ w_callable = self.wrap(fn)
sc = self.specialcases[fn] # TypeError if 'fn' not hashable
except (UnwrapException, KeyError, TypeError):
pass
Modified: pypy/trunk/pypy/objspace/flow/test/test_objspace.py
==============================================================================
--- pypy/trunk/pypy/objspace/flow/test/test_objspace.py (original)
+++ pypy/trunk/pypy/objspace/flow/test/test_objspace.py Fri Mar 5 18:13:09 2010
@@ -892,6 +892,22 @@
raise TypeError()
py.test.raises(Exception, self.codetest, f)
+ def test__flowspace_rewrite_directly_as_(self):
+ def g(x):
+ pass
+ def f(x):
+ pass
+ f._flowspace_rewrite_directly_as_ = g
+ def h(x):
+ f(x)
+ graph = self.codetest(h)
+ assert self.all_operations(graph) == {'simple_call': 1}
+ for block in graph.iterblocks():
+ if block.operations:
+ op = block.operations[0]
+ assert op.opname == 'simple_call'
+ assert op.args[0] == Constant(g)
+
class TestFlowObjSpaceDelay(Base):
def setup_class(cls):
Modified: pypy/trunk/pypy/rlib/runicode.py
==============================================================================
--- pypy/trunk/pypy/rlib/runicode.py (original)
+++ pypy/trunk/pypy/rlib/runicode.py Fri Mar 5 18:13:09 2010
@@ -16,26 +16,28 @@
# when sizeof(wchar_t) == 4.
# Note that Python3 uses a similar implementation.
def UNICHR(c):
- if we_are_translated():
+ assert not we_are_translated()
+ if c < sys.maxunicode or c > MAXUNICODE:
return unichr(c)
else:
- if c < sys.maxunicode or c > MAXUNICODE:
- return unichr(c)
- else:
- c -= 0x10000
- return (unichr(0xD800 + (c >> 10)) +
- unichr(0xDC00 + (c & 0x03FF)))
+ c -= 0x10000
+ return (unichr(0xD800 + (c >> 10)) +
+ unichr(0xDC00 + (c & 0x03FF)))
+ UNICHR._flowspace_rewrite_directly_as_ = unichr
+ # ^^^ NB.: for translation, it's essential to use this hack instead
+ # of calling unichr() from UNICHR(), because unichr() detects if there
+ # is a "try:except ValueError" immediately around it.
def ORD(u):
- if we_are_translated():
- return ord(u)
- else:
- if isinstance(u, unicode) and len(u) == 2:
- ch1 = ord(u[0])
- ch2 = ord(u[1])
- if 0xD800 <= ch1 <= 0xDBFF and 0xDC00 <= ch2 <= 0xDFFF:
- return (((ch1 - 0xD800) << 10) | (ch2 - 0xDC00)) + 0x10000
- return ord(u)
+ assert not we_are_translated()
+ if isinstance(u, unicode) and len(u) == 2:
+ ch1 = ord(u[0])
+ ch2 = ord(u[1])
+ if 0xD800 <= ch1 <= 0xDBFF and 0xDC00 <= ch2 <= 0xDFFF:
+ return (((ch1 - 0xD800) << 10) | (ch2 - 0xDC00)) + 0x10000
+ return ord(u)
+ ORD._flowspace_rewrite_directly_as_ = ord
+
else:
UNICHR = unichr
ORD = ord
Modified: pypy/trunk/pypy/translator/c/test/test_typed.py
==============================================================================
--- pypy/trunk/pypy/translator/c/test/test_typed.py (original)
+++ pypy/trunk/pypy/translator/c/test/test_typed.py Fri Mar 5 18:13:09 2010
@@ -212,6 +212,18 @@
assert fn(-12) == -42
assert fn(sys.maxint) == -42
+ def test_UNICHR(self):
+ from pypy.rlib.runicode import UNICHR
+ def f(x):
+ try:
+ return ord(UNICHR(x))
+ except ValueError:
+ return -42
+ fn = self.getcompiled(f, [int])
+ assert fn(65) == 65
+ assert fn(-12) == -42
+ assert fn(sys.maxint) == -42
+
def test_list_indexerror(self):
def f(i):
lst = [123, 456]
From fijal at codespeak.net Fri Mar 5 18:26:21 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 18:26:21 +0100 (CET)
Subject: [pypy-svn] r71819 - pypy/benchmarks/own/twisted
Message-ID: <20100305172621.A87F451059@codespeak.net>
Author: fijal
Date: Fri Mar 5 18:26:20 2010
New Revision: 71819
Modified:
pypy/benchmarks/own/twisted/benchlib.py
Log:
Better detection of running out of TCP connections
Modified: pypy/benchmarks/own/twisted/benchlib.py
==============================================================================
--- pypy/benchmarks/own/twisted/benchlib.py (original)
+++ pypy/benchmarks/own/twisted/benchlib.py Fri Mar 5 18:26:20 2010
@@ -4,6 +4,8 @@
from twisted.internet import reactor
from twisted.python import log
+failure = 0
+
class Client(object):
def __init__(self, reactor):
self._reactor = reactor
@@ -34,9 +36,10 @@
'in %(duration)s seconds)')
def benchmark_report(acceptCount, duration, name):
+ global failure
if acceptCount < 10:
- reactor.stop()
- raise Exception("Run out of TCP connections!")
+ failure = 1
+ raise Exception("Run out of TCP connections")
print PRINT_TEMPL % {
'stats' : acceptCount / duration,
'name' : name,
@@ -77,6 +80,7 @@
d.addErrback(log.err)
reactor.callWhenRunning(d.addBoth, lambda ign: reactor.stop())
reactor.run()
+ sys.exit(failure)
def multidriver(*f):
jobs = iter(f)
From fijal at codespeak.net Fri Mar 5 18:27:58 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 18:27:58 +0100 (CET)
Subject: [pypy-svn] r71820 - pypy/benchmarks
Message-ID: <20100305172758.CA4B251059@codespeak.net>
Author: fijal
Date: Fri Mar 5 18:27:57 2010
New Revision: 71820
Modified:
pypy/benchmarks/benchmarks.py
Log:
Try harder not to run out of tcp connections
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Fri Mar 5 18:27:57 2010
@@ -42,9 +42,15 @@
'spectral-norm', 'chaos', 'telco']:
_register_new_bm(name, name, globals(), **opts.get(name, {}))
for name in ['web', 'names', 'accepts', 'iteration', 'tcp', 'pb']:
+ if name == 'accepts':
+ iteration_scaling = .07
+ elif name == 'web':
+ iteration_scaling = .12
+ else:
+ iteration_scaling = .20
_register_new_bm_twisted(name, 'twisted_' + name,
globals(), bm_env={'PYTHONPATH': ':'.join(TWISTED)},
- iteration_scaling=.20)
+ iteration_scaling=iteration_scaling)
_register_new_bm('spitfire', 'spitfire', globals(),
extra_args=['--benchmark=spitfire_o4'])
_register_new_bm('spitfire', 'spitfire_cstringio', globals(),
From arigo at codespeak.net Fri Mar 5 18:31:22 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 18:31:22 +0100 (CET)
Subject: [pypy-svn] r71821 - pypy/trunk/pypy/module/mmap
Message-ID: <20100305173122.B1B1D51059@codespeak.net>
Author: arigo
Date: Fri Mar 5 18:31:21 2010
New Revision: 71821
Modified:
pypy/trunk/pypy/module/mmap/interp_mmap.py
Log:
Capture and expose the RPython-level OSError exception.
I cannot really be sure that it's complete, and it's
all hard-to-test cases :-(
Modified: pypy/trunk/pypy/module/mmap/interp_mmap.py
==============================================================================
--- pypy/trunk/pypy/module/mmap/interp_mmap.py (original)
+++ pypy/trunk/pypy/module/mmap/interp_mmap.py Fri Mar 5 18:31:21 2010
@@ -54,7 +54,10 @@
tell.unwrap_spec = ['self']
def descr_size(self):
- return self.space.wrap(self.mmap.file_size())
+ try:
+ return self.space.wrap(self.mmap.file_size())
+ except OSError, e:
+ raise wrap_oserror(self.space, e, 'w_EnvironmentError')
descr_size.unwrap_spec = ['self']
def write(self, data):
@@ -83,6 +86,8 @@
except RValueError, v:
raise OperationError(self.space.w_ValueError,
self.space.wrap(v.message))
+ except OSError, e:
+ raise wrap_oserror(self.space, e, 'w_EnvironmentError')
flush.unwrap_spec = ['self', int, int]
def move(self, dest, src, count):
@@ -96,7 +101,10 @@
def resize(self, newsize):
self.check_valid()
self.check_resizeable()
- self.mmap.resize(newsize)
+ try:
+ self.mmap.resize(newsize)
+ except OSError, e:
+ raise wrap_oserror(self.space, e, 'w_EnvironmentError')
resize.unwrap_spec = ['self', int]
def __len__(self):
From arigo at codespeak.net Fri Mar 5 18:56:48 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 18:56:48 +0100 (CET)
Subject: [pypy-svn] r71823 - pypy/trunk/lib-python/modified-2.5.2/ctypes
Message-ID: <20100305175648.F173351058@codespeak.net>
Author: arigo
Date: Fri Mar 5 18:56:47 2010
New Revision: 71823
Modified:
pypy/trunk/lib-python/modified-2.5.2/ctypes/__init__.py
Log:
Comment out the code that detects if we are on an old Mac.
Such Macs are too old for building pypy-c's on anyway.
Removes one of the only dependencies on the 'gestalt' module.
Modified: pypy/trunk/lib-python/modified-2.5.2/ctypes/__init__.py
==============================================================================
--- pypy/trunk/lib-python/modified-2.5.2/ctypes/__init__.py (original)
+++ pypy/trunk/lib-python/modified-2.5.2/ctypes/__init__.py Fri Mar 5 18:56:47 2010
@@ -23,21 +23,23 @@
from _ctypes import FormatError
DEFAULT_MODE = RTLD_LOCAL
-if _os.name == "posix" and _sys.platform == "darwin":
- import gestalt
+## --- the following is skipped because we don't have 'gestalt' so far,
+## --- but we know pypy doesn't compile on Mac OS/X 10.3.
+##if _os.name == "posix" and _sys.platform == "darwin":
+## import gestalt
+
+## # gestalt.gestalt("sysv") returns the version number of the
+## # currently active system file as BCD.
+## # On OS X 10.4.6 -> 0x1046
+## # On OS X 10.2.8 -> 0x1028
+## # See also http://www.rgaros.nl/gestalt/
+## #
+## # On OS X 10.3, we use RTLD_GLOBAL as default mode
+## # because RTLD_LOCAL does not work at least on some
+## # libraries.
- # gestalt.gestalt("sysv") returns the version number of the
- # currently active system file as BCD.
- # On OS X 10.4.6 -> 0x1046
- # On OS X 10.2.8 -> 0x1028
- # See also http://www.rgaros.nl/gestalt/
- #
- # On OS X 10.3, we use RTLD_GLOBAL as default mode
- # because RTLD_LOCAL does not work at least on some
- # libraries.
-
- if gestalt.gestalt("sysv") < 0x1040:
- DEFAULT_MODE = RTLD_GLOBAL
+## if gestalt.gestalt("sysv") < 0x1040:
+## DEFAULT_MODE = RTLD_GLOBAL
from _ctypes import FUNCFLAG_CDECL as _FUNCFLAG_CDECL, \
FUNCFLAG_PYTHONAPI as _FUNCFLAG_PYTHONAPI
From arigo at codespeak.net Fri Mar 5 19:26:58 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 19:26:58 +0100 (CET)
Subject: [pypy-svn] r71824 - in pypy/trunk/pypy/rpython/lltypesystem/module:
. test
Message-ID: <20100305182658.E3B4D51057@codespeak.net>
Author: arigo
Date: Fri Mar 5 19:26:57 2010
New Revision: 71824
Modified:
pypy/trunk/pypy/rpython/lltypesystem/module/ll_math.py
pypy/trunk/pypy/rpython/lltypesystem/module/test/test_ll_math.py
Log:
Test and fix. On Mac OS/X, this triggers a use case
where the C function ldexp() fails to set errno=ERANGE
in case it overflows, but where we still really want
the OverflowError from RPython.
Modified: pypy/trunk/pypy/rpython/lltypesystem/module/ll_math.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/module/ll_math.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/module/ll_math.py Fri Mar 5 19:26:57 2010
@@ -7,6 +7,7 @@
from pypy.tool.sourcetools import func_with_new_name
from pypy.rlib import rposix
from pypy.translator.tool.cbuild import ExternalCompilationInfo
+from pypy.rlib.rarithmetic import isinf
math_frexp = rffi.llexternal('frexp', [rffi.DOUBLE, rffi.INTP], rffi.DOUBLE,
sandboxsafe=True)
@@ -26,16 +27,24 @@
def ll_math_frexp(x):
exp_p = lltype.malloc(rffi.INTP.TO, 1, flavor='raw')
- mantissa = math_frexp(x, exp_p)
- exponent = rffi.cast(lltype.Signed, exp_p[0])
- lltype.free(exp_p, flavor='raw')
+ try:
+ _error_reset()
+ mantissa = math_frexp(x, exp_p)
+ _check_error(mantissa)
+ exponent = rffi.cast(lltype.Signed, exp_p[0])
+ finally:
+ lltype.free(exp_p, flavor='raw')
return (mantissa, exponent)
def ll_math_modf(x):
intpart_p = lltype.malloc(rffi.DOUBLEP.TO, 1, flavor='raw')
- fracpart = math_modf(x, intpart_p)
- intpart = intpart_p[0]
- lltype.free(intpart_p, flavor='raw')
+ try:
+ _error_reset()
+ fracpart = math_modf(x, intpart_p)
+ _check_error(fracpart)
+ intpart = intpart_p[0]
+ finally:
+ lltype.free(intpart_p, flavor='raw')
return (fracpart, intpart)
def ll_math_ldexp(x, exp):
@@ -50,6 +59,8 @@
ERANGE = errno.ERANGE
def _check_error(x):
errno = rposix.get_errno()
+ if isinf(x):
+ errno = ERANGE
if errno:
if errno == ERANGE:
if not x:
Modified: pypy/trunk/pypy/rpython/lltypesystem/module/test/test_ll_math.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/module/test/test_ll_math.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/module/test/test_ll_math.py Fri Mar 5 19:26:57 2010
@@ -45,3 +45,26 @@
# underflows give 0.0 with no exception raised
assert f(1.0, -10000) == 0.0 # sanity-check the host Python
assert self.interpret(f, [1.0, -10000]) == 0.0
+
+ def test_overflow_1(self):
+ # this (probably, depending on platform) tests the case
+ # where the C function pow() sets ERANGE.
+ def f(x, y):
+ try:
+ return math.pow(x, y)
+ except OverflowError:
+ return -42.0
+
+ assert self.interpret(f, [10.0, 40000.0]) == -42.0
+
+ def test_overflow_2(self):
+ # this (not on Linux but on Mac OS/X at least) tests the case
+ # where the C function ldexp() does not set ERANGE, but
+ # returns +infinity.
+ def f(x, y):
+ try:
+ return math.ldexp(x, y)
+ except OverflowError:
+ return -42.0
+
+ assert self.interpret(f, [10.0, 40000]) == -42.0
From arigo at codespeak.net Fri Mar 5 19:33:27 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Fri, 5 Mar 2010 19:33:27 +0100 (CET)
Subject: [pypy-svn] r71825 - pypy/build/bot2/pypybuildbot
Message-ID: <20100305183327.C06B851057@codespeak.net>
Author: arigo
Date: Fri Mar 5 19:33:26 2010
New Revision: 71825
Modified:
pypy/build/bot2/pypybuildbot/master.py
Log:
Update.
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Fri Mar 5 19:33:26 2010
@@ -67,11 +67,22 @@
lib_python=True,
app_tests=True)
+jit_translation_args = ['-Ojit', '--gc=hybrid',
+ '--gcrootfinder=asmgcc',
+ '--jit-debug=steps']
+
pypyJITTranslatedTestFactory = pypybuilds.Translated(
- translationArgs=['-Ojit', '--gc=hybrid',
- '--gcrootfinder=asmgcc',
- '--jit-debug=steps'],
- targetArgs = [], #'--withoutmod-thread'],
+ translationArgs=jit_translation_args,
+ targetArgs=[],
+ lib_python=True,
+ pypyjit=True,
+ app_tests=True,
+ )
+
+pypyJITTranslatedTestFactoryWin = pypybuilds.Translated(
+ platform="win32",
+ translationArgs=jit_translation_args,
+ targetArgs=[],
lib_python=True,
pypyjit=True,
app_tests=True,
@@ -191,7 +202,7 @@
{"name" : JITWIN32,
"slavenames": ["bigboard"],
'builddir' : JITWIN32,
- 'factory' : pypyJITTranslatedTestFactory,
+ 'factory' : pypyJITTranslatedTestFactoryWin,
'category' : 'jit',
},
{"name": JITONLYLINUX32,
From fijal at codespeak.net Fri Mar 5 19:45:53 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 19:45:53 +0100 (CET)
Subject: [pypy-svn] r71826 - pypy/benchmarks
Message-ID: <20100305184553.E842B51057@codespeak.net>
Author: fijal
Date: Fri Mar 5 19:45:52 2010
New Revision: 71826
Modified:
pypy/benchmarks/benchmarks.py
Log:
Kill accepts for now, we run out of TCP connections a bit too easily
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Fri Mar 5 19:45:52 2010
@@ -41,7 +41,7 @@
for name in ['float', 'nbody_modified', 'meteor-contest', 'fannkuch',
'spectral-norm', 'chaos', 'telco']:
_register_new_bm(name, name, globals(), **opts.get(name, {}))
-for name in ['web', 'names', 'accepts', 'iteration', 'tcp', 'pb']:
+for name in ['web', 'names', 'iteration', 'tcp', 'pb']: # accepts
if name == 'accepts':
iteration_scaling = .07
elif name == 'web':
From fijal at codespeak.net Fri Mar 5 19:56:57 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 19:56:57 +0100 (CET)
Subject: [pypy-svn] r71827 - pypy/benchmarks
Message-ID: <20100305185657.E6FD551057@codespeak.net>
Author: fijal
Date: Fri Mar 5 19:56:56 2010
New Revision: 71827
Modified:
pypy/benchmarks/benchmarks.py
Log:
Reintroduce accepts
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Fri Mar 5 19:56:56 2010
@@ -41,13 +41,8 @@
for name in ['float', 'nbody_modified', 'meteor-contest', 'fannkuch',
'spectral-norm', 'chaos', 'telco']:
_register_new_bm(name, name, globals(), **opts.get(name, {}))
-for name in ['web', 'names', 'iteration', 'tcp', 'pb']: # accepts
- if name == 'accepts':
- iteration_scaling = .07
- elif name == 'web':
- iteration_scaling = .12
- else:
- iteration_scaling = .20
+for name in ['web', 'names', 'iteration', 'tcp', 'pb', 'accepts']:
+ iteration_scaling = .20
_register_new_bm_twisted(name, 'twisted_' + name,
globals(), bm_env={'PYTHONPATH': ':'.join(TWISTED)},
iteration_scaling=iteration_scaling)
From fijal at codespeak.net Fri Mar 5 23:51:23 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 23:51:23 +0100 (CET)
Subject: [pypy-svn] r71828 - pypy/benchmarks
Message-ID: <20100305225123.6EF4351058@codespeak.net>
Author: fijal
Date: Fri Mar 5 23:51:20 2010
New Revision: 71828
Modified:
pypy/benchmarks/benchmarks.py
Log:
disable accepts and change iteration scaling for web
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Fri Mar 5 23:51:20 2010
@@ -41,8 +41,11 @@
for name in ['float', 'nbody_modified', 'meteor-contest', 'fannkuch',
'spectral-norm', 'chaos', 'telco']:
_register_new_bm(name, name, globals(), **opts.get(name, {}))
-for name in ['web', 'names', 'iteration', 'tcp', 'pb', 'accepts']:
- iteration_scaling = .20
+for name in ['web', 'names', 'iteration', 'tcp', 'pb']:#, 'accepts']:
+ if name == 'web':
+ iteration_scaling = .12
+ else:
+ iteration_scaling = .20
_register_new_bm_twisted(name, 'twisted_' + name,
globals(), bm_env={'PYTHONPATH': ':'.join(TWISTED)},
iteration_scaling=iteration_scaling)
From fijal at codespeak.net Fri Mar 5 23:56:56 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Fri, 5 Mar 2010 23:56:56 +0100 (CET)
Subject: [pypy-svn] r71829 - pypy/build/bot2/pypybuildbot
Message-ID: <20100305225656.060B651058@codespeak.net>
Author: fijal
Date: Fri Mar 5 23:56:55 2010
New Revision: 71829
Modified:
pypy/build/bot2/pypybuildbot/builds.py
Log:
Pass branch to runner.py
Modified: pypy/build/bot2/pypybuildbot/builds.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/builds.py (original)
+++ pypy/build/bot2/pypybuildbot/builds.py Fri Mar 5 23:56:55 2010
@@ -133,7 +133,8 @@
command=["python", "runner.py", '--output-filename', 'result.json',
'--pypy-c', '../build/pypy/translator/goal/pypy-c',
'--upload', '--force-host', 'bigdog',
- '--revision', WithProperties('%(got_revision)s')],
+ '--revision', WithProperties('%(got_revision)s'),
+ '--branch', WithProperties('%(branch)s')],
workdir='./benchmarks',
haltOnFailure=True))
# a bit obscure hack to get both os.path.expand and a property
@@ -147,6 +148,7 @@
'--pypy-c', '../build/pypy/translator/goal/pypy-c',
'--revision', WithProperties('%(got_revision)s'),
'--upload', '--force-host', 'bigdog',
+ '--branch', WithProperties('%(branch)s'),
'--args', ',--jit threshold=1000000000'],
workdir='./benchmarks',
haltOnFailure=True))
From fijal at codespeak.net Sat Mar 6 00:11:12 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 00:11:12 +0100 (CET)
Subject: [pypy-svn] r71831 - in pypy/trunk/pypy/jit: backend/x86 metainterp
Message-ID: <20100305231112.5FF5F51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 00:11:09 2010
New Revision: 71831
Modified:
pypy/trunk/pypy/jit/backend/x86/assembler.py
pypy/trunk/pypy/jit/backend/x86/runner.py
pypy/trunk/pypy/jit/metainterp/history.py
pypy/trunk/pypy/jit/metainterp/optimizeopt.py
pypy/trunk/pypy/jit/metainterp/resume.py
Log:
(fijal, arigo reviewing)
Merge cleanup-warnings branch. This branch cleans up warnings that
show up during translation. There are still gc-related warnings left.
Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py Sat Mar 6 00:11:09 2010
@@ -100,6 +100,7 @@
mc2 = None
mc_size = MachineCodeBlockWrapper.MC_DEFAULT_SIZE
_float_constants = None
+ _regalloc = None
def __init__(self, cpu, translate_support_code=False,
failargs_limit=1000):
Modified: pypy/trunk/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/runner.py Sat Mar 6 00:11:09 2010
@@ -4,7 +4,7 @@
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
from pypy.rpython.llinterp import LLInterpreter
from pypy.rlib.objectmodel import we_are_translated
-from pypy.jit.metainterp import history
+from pypy.jit.metainterp import history, compile
from pypy.jit.backend.x86.assembler import Assembler386
from pypy.jit.backend.x86.regalloc import FORCE_INDEX_OFS
from pypy.jit.backend.x86.profagent import ProfileAgent
@@ -141,3 +141,19 @@
import pypy.jit.metainterp.executor
pypy.jit.metainterp.executor.make_execute_list(CPU)
+
+# silence warnings
+
+history.LoopToken._x86_param_depth = 0
+history.LoopToken._x86_arglocs = (None, None)
+history.LoopToken._x86_frame_depth = 0
+history.LoopToken._x86_bootstrap_code = 0
+history.LoopToken._x86_direct_bootstrap_code = 0
+history.LoopToken._x86_failure_recovery_bytecode = 0
+history.LoopToken._x86_adr_jump_offset = 0
+history.LoopToken._x86_loop_code = 0
+history.LoopToken._x86_current_depths = (0, 0)
+
+compile._DoneWithThisFrameDescr._x86_current_depths = (0, 0)
+compile._DoneWithThisFrameDescr._x86_failure_recovery_bytecode = 0
+compile._DoneWithThisFrameDescr._x86_adr_jump_offset = 0
Modified: pypy/trunk/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/history.py (original)
+++ pypy/trunk/pypy/jit/metainterp/history.py Sat Mar 6 00:11:09 2010
@@ -125,6 +125,31 @@
def _clone_if_mutable(self):
return self
+ def get_extra_info(self):
+ """ Implement in call descr
+ """
+ raise NotImplementedError
+
+ def is_array_of_pointers(self):
+ """ Implement for array descr
+ """
+ raise NotImplementedError
+
+ def is_array_of_floats(self):
+ """ Implement for array descr
+ """
+ raise NotImplementedError
+
+ def is_pointer_field(self):
+ """ Implement for field descr
+ """
+ raise NotImplementedError
+
+ def is_float_field(self):
+ """ Implement for field descr
+ """
+ raise NotImplementedError
+
class AbstractFailDescr(AbstractDescr):
index = -1
@@ -685,6 +710,7 @@
terminating = False # see TerminatingLoopToken in compile.py
# specnodes = ...
# and more data specified by the backend when the loop is compiled
+ number = 0
def __init__(self, number=0):
self.number = number
@@ -864,6 +890,7 @@
compiled_count = 0
enter_count = 0
aborted_count = 0
+ history = None
def __init__(self):
self.loops = []
Modified: pypy/trunk/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeopt.py Sat Mar 6 00:11:09 2010
@@ -47,6 +47,7 @@
last_guard_index = -1
level = LEVEL_UNKNOWN
+ known_class = None
def __init__(self, box):
self.box = box
@@ -123,6 +124,21 @@
# meaning it has been forced.
return self.box is None
+ def getfield(self, ofs, default):
+ raise NotImplementedError
+
+ def setfield(self, ofs, value):
+ raise NotImplementedError
+
+ def getitem(self, index):
+ raise NotImplementedError
+
+ def getlength(self):
+ raise NotImplementedError
+
+ def setitem(self, index, value):
+ raise NotImplementedError
+
class ConstantValue(OptValue):
level = LEVEL_CONSTANT
@@ -172,6 +188,8 @@
def _make_virtual(self, modifier):
raise NotImplementedError("abstract base")
+ def _really_force(self):
+ raise NotImplementedError("abstract base")
def get_fielddescrlist_cache(cpu):
if not hasattr(cpu, '_optimizeopt_fielddescrlist_cache'):
Modified: pypy/trunk/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/resume.py (original)
+++ pypy/trunk/pypy/jit/metainterp/resume.py Sat Mar 6 00:11:09 2010
@@ -397,6 +397,8 @@
def set_content(self, fieldnums):
self.fieldnums = fieldnums
+ def debug_prints(self):
+ raise NotImplementedError
class AbstractVirtualStructInfo(AbstractVirtualInfo):
def __init__(self, fielddescrs):
From fijal at codespeak.net Sat Mar 6 00:15:02 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 00:15:02 +0100 (CET)
Subject: [pypy-svn] r71832 - pypy/branch/cleanup-warnings
Message-ID: <20100305231502.5B02F51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 00:15:00 2010
New Revision: 71832
Removed:
pypy/branch/cleanup-warnings/
Log:
Remove merged branch
From fijal at codespeak.net Sat Mar 6 00:31:55 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 00:31:55 +0100 (CET)
Subject: [pypy-svn] r71833 - pypy/trunk/pypy/tool
Message-ID: <20100305233155.D1D0551058@codespeak.net>
Author: fijal
Date: Sat Mar 6 00:31:54 2010
New Revision: 71833
Added:
pypy/trunk/pypy/tool/progressbar.py (contents, props changed)
pypy/trunk/pypy/tool/terminal.py (contents, props changed)
Modified:
pypy/trunk/pypy/tool/logparser.py
Log:
Having fun with fancier progress bars. Comes from here:
http://nadiana.com/animated-terminal-progress-bar-in-python
I like it more than the previous one.
Also make sure we don't output png to stdout
Modified: pypy/trunk/pypy/tool/logparser.py
==============================================================================
--- pypy/trunk/pypy/tool/logparser.py (original)
+++ pypy/trunk/pypy/tool/logparser.py Sat Mar 6 00:31:54 2010
@@ -9,6 +9,7 @@
import autopath
import sys, re
from pypy.rlib.debug import DebugLog
+from pypy.tool import progressbar
def parse_log_file(filename, verbose=True):
r_start = re.compile(r"\[([0-9a-fA-F]+)\] \{([\w-]+)$")
@@ -29,14 +30,23 @@
lines = f.readlines()
f.close()
#
+ if sys.stdout.isatty():
+ progress = progressbar.ProgressBar(color='green')
+ single_percent = len(lines) / 100
if verbose:
- vnext = 0
+ vnext = single_percent
else:
vnext = len(lines)
+ counter = 0
for i, line in enumerate(lines):
if i == vnext:
- sys.stderr.write('%d%%..' % int(100.0*i/len(lines)))
- vnext += 500000
+ counter += 1
+ if sys.stdout.isatty():
+ progress.render(counter)
+ vnext += single_percent
+ else:
+ sys.stderr.write('%d%%..' % int(100.0*i/len(lines)))
+ vnext += 500000
line = line.rstrip()
match = r_start.match(line)
if match:
@@ -358,13 +368,13 @@
if __name__ == '__main__':
import getopt
- if len(sys.argv) < 2:
+ if len(sys.argv) < 3:
print __doc__
sys.exit(2)
action = sys.argv[1]
func, longopts = ACTIONS[action]
options, args = getopt.gnu_getopt(sys.argv[2:], '', longopts)
- if len(args) != 1:
+ if len(args) != 2:
print __doc__
sys.exit(2)
@@ -373,4 +383,4 @@
assert name.startswith('--')
kwds[name[2:]] = value
log = parse_log_file(args[0])
- func(log, **kwds)
+ func(log, args[1], **kwds)
Added: pypy/trunk/pypy/tool/progressbar.py
==============================================================================
--- (empty file)
+++ pypy/trunk/pypy/tool/progressbar.py Sat Mar 6 00:31:54 2010
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+# Copyright: 2009 Nadia Alramli
+# License: BSD
+"""Draws an animated terminal progress bar
+Usage:
+ p = ProgressBar("blue")
+ p.render(percentage, message)
+"""
+
+from pypy.tool import terminal
+import sys
+
+class ProgressBar(object):
+ """Terminal progress bar class"""
+ TEMPLATE = (
+ '%(percent)-2s%% %(color)s%(progress)s%(normal)s%(empty)s %(message)s\n'
+ )
+ PADDING = 7
+
+ def __init__(self, color=None, width=None, block='?', empty=' '):
+ """
+ color -- color name (BLUE GREEN CYAN RED MAGENTA YELLOW WHITE BLACK)
+ width -- bar width (optinal)
+ block -- progress display character (default '?')
+ empty -- bar display character (default ' ')
+ """
+ if color:
+ self.color = getattr(terminal, color.upper())
+ else:
+ self.color = ''
+ if width and width < terminal.COLUMNS - self.PADDING:
+ self.width = width
+ else:
+ # Adjust to the width of the terminal
+ self.width = terminal.COLUMNS - self.PADDING
+ self.block = block
+ self.empty = empty
+ self.progress = None
+ self.lines = 0
+
+ def render(self, percent, message = ''):
+ """Print the progress bar
+ percent -- the progress percentage %
+ message -- message string (optional)
+ """
+ inline_msg_len = 0
+ if message:
+ # The length of the first line in the message
+ inline_msg_len = len(message.splitlines()[0])
+ if inline_msg_len + self.width + self.PADDING > terminal.COLUMNS:
+ # The message is too long to fit in one line.
+ # Adjust the bar width to fit.
+ bar_width = terminal.COLUMNS - inline_msg_len -self.PADDING
+ else:
+ bar_width = self.width
+
+ # Check if render is called for the first time
+ if self.progress != None:
+ self.clear()
+ self.progress = (bar_width * percent) / 100
+ data = self.TEMPLATE % {
+ 'percent': percent,
+ 'color': self.color,
+ 'progress': self.block * self.progress,
+ 'normal': terminal.NORMAL,
+ 'empty': self.empty * (bar_width - self.progress),
+ 'message': message
+ }
+ sys.stdout.write(data)
+ sys.stdout.flush()
+ # The number of lines printed
+ self.lines = len(data.splitlines())
+
+ def clear(self):
+ """Clear all printed lines"""
+ sys.stdout.write(
+ self.lines * (terminal.UP + terminal.BOL + terminal.CLEAR_EOL)
+ )
Added: pypy/trunk/pypy/tool/terminal.py
==============================================================================
--- (empty file)
+++ pypy/trunk/pypy/tool/terminal.py Sat Mar 6 00:31:54 2010
@@ -0,0 +1,81 @@
+# Copyright: 2009 Nadia Alramli
+# License: BSD
+
+"""Terminal controller module
+Example of usage:
+ print BG_BLUE + 'Text on blue background' + NORMAL
+ print BLUE + UNDERLINE + 'Blue underlined text' + NORMAL
+ print BLUE + BG_YELLOW + BOLD + 'text' + NORMAL
+"""
+
+import sys
+
+# The current module
+MODULE = sys.modules[__name__]
+
+COLORS = "BLUE GREEN CYAN RED MAGENTA YELLOW WHITE BLACK".split()
+# List of terminal controls, you can add more to the list.
+CONTROLS = {
+ 'BOL':'cr', 'UP':'cuu1', 'DOWN':'cud1', 'LEFT':'cub1', 'RIGHT':'cuf1',
+ 'CLEAR_SCREEN':'clear', 'CLEAR_EOL':'el', 'CLEAR_BOL':'el1',
+ 'CLEAR_EOS':'ed', 'BOLD':'bold', 'BLINK':'blink', 'DIM':'dim',
+ 'REVERSE':'rev', 'UNDERLINE':'smul', 'NORMAL':'sgr0',
+ 'HIDE_CURSOR':'cinvis', 'SHOW_CURSOR':'cnorm'
+}
+
+# List of numeric capabilities
+VALUES = {
+ 'COLUMNS':'cols', # Width of the terminal (None for unknown)
+ 'LINES':'lines', # Height of the terminal (None for unknown)
+ 'MAX_COLORS': 'colors',
+}
+
+def default():
+ """Set the default attribute values"""
+ for color in COLORS:
+ setattr(MODULE, color, '')
+ setattr(MODULE, 'BG_%s' % color, '')
+ for control in CONTROLS:
+ setattr(MODULE, control, '')
+ for value in VALUES:
+ setattr(MODULE, value, None)
+
+def setup():
+ """Set the terminal control strings"""
+ # Initializing the terminal
+ curses.setupterm()
+ # Get the color escape sequence template or '' if not supported
+ # setab and setaf are for ANSI escape sequences
+ bgColorSeq = curses.tigetstr('setab') or curses.tigetstr('setb') or ''
+ fgColorSeq = curses.tigetstr('setaf') or curses.tigetstr('setf') or ''
+
+ for color in COLORS:
+ # Get the color index from curses
+ colorIndex = getattr(curses, 'COLOR_%s' % color)
+ # Set the color escape sequence after filling the template with index
+ setattr(MODULE, color, curses.tparm(fgColorSeq, colorIndex))
+ # Set background escape sequence
+ setattr(
+ MODULE, 'BG_%s' % color, curses.tparm(bgColorSeq, colorIndex)
+ )
+ for control in CONTROLS:
+ # Set the control escape sequence
+ setattr(MODULE, control, curses.tigetstr(CONTROLS[control]) or '')
+ for value in VALUES:
+ # Set terminal related values
+ setattr(MODULE, value, curses.tigetnum(VALUES[value]))
+
+def render(text):
+ """Helper function to apply controls easily
+ Example:
+ apply("%(GREEN)s%(BOLD)stext%(NORMAL)s") -> a bold green text
+ """
+ return text % MODULE.__dict__
+
+try:
+ import curses
+ setup()
+except Exception, e:
+ # There is a failure; set all attributes to default
+ print 'Warning: %s' % e
+ default()
From fijal at codespeak.net Sat Mar 6 01:53:35 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 01:53:35 +0100 (CET)
Subject: [pypy-svn] r71834 - pypy/benchmarks
Message-ID: <20100306005335.0397151058@codespeak.net>
Author: fijal
Date: Sat Mar 6 01:53:34 2010
New Revision: 71834
Modified:
pypy/benchmarks/benchmarks.py
Log:
resort back to original measurments scheme (100/number) request count
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Sat Mar 6 01:53:34 2010
@@ -21,7 +21,7 @@
def Measure(python, options):
def parser(line):
number = float(line.split(" ")[0])
- return 3000/number
+ return 100/number
bm_path = relative('own', 'twisted', name + '.py')
return MeasureGeneric(python, options, bm_path, parser=parser, **opts)
Measure.func_name = 'Measure' + name.capitalize()
From fijal at codespeak.net Sat Mar 6 01:56:35 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 01:56:35 +0100 (CET)
Subject: [pypy-svn] r71835 - pypy/benchmarks
Message-ID: <20100306005635.7260451058@codespeak.net>
Author: fijal
Date: Sat Mar 6 01:56:33 2010
New Revision: 71835
Modified:
pypy/benchmarks/benchmarks.py
Log:
Scale tcp, a bit by hand now
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Sat Mar 6 01:56:33 2010
@@ -21,7 +21,10 @@
def Measure(python, options):
def parser(line):
number = float(line.split(" ")[0])
- return 100/number
+ if name == 'tcp':
+ return 100*1024*1024/number
+ else:
+ return 100/number
bm_path = relative('own', 'twisted', name + '.py')
return MeasureGeneric(python, options, bm_path, parser=parser, **opts)
Measure.func_name = 'Measure' + name.capitalize()
From fijal at codespeak.net Sat Mar 6 03:31:16 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 03:31:16 +0100 (CET)
Subject: [pypy-svn] r71837 - pypy/branch/ctypes-configure-cache
Message-ID: <20100306023116.7F65251058@codespeak.net>
Author: fijal
Date: Sat Mar 6 03:31:09 2010
New Revision: 71837
Added:
pypy/branch/ctypes-configure-cache/
- copied from r71835, pypy/trunk/
Log:
A branch to introduce caching to ctypes_configure
From fijal at codespeak.net Sat Mar 6 03:33:07 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 03:33:07 +0100 (CET)
Subject: [pypy-svn] r71838 - in
pypy/branch/ctypes-configure-cache/ctypes_configure: . test
Message-ID: <20100306023307.6A57251058@codespeak.net>
Author: fijal
Date: Sat Mar 6 03:33:01 2010
New Revision: 71838
Modified:
pypy/branch/ctypes-configure-cache/ctypes_configure/cbuild.py
pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py
pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py
Log:
Introduce dumping of cache to ctypes configure. Cannot handle nested structs
now (test pending), also nobody uses it so far
Modified: pypy/branch/ctypes-configure-cache/ctypes_configure/cbuild.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/ctypes_configure/cbuild.py (original)
+++ pypy/branch/ctypes-configure-cache/ctypes_configure/cbuild.py Sat Mar 6 03:33:01 2010
@@ -5,7 +5,7 @@
debug = 0
-configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure')
+configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure-')
class ExternalCompilationInfo(object):
Modified: pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py (original)
+++ pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py Sat Mar 6 03:33:01 2010
@@ -151,11 +151,13 @@
return try_compile([self.path], eci)
-def configure(CConfig, noerr=False):
+def configure(CConfig, savecache=None, noerr=False):
"""Examine the local system by running the C compiler.
The CConfig class contains CConfigEntry attribues that describe
what should be inspected; configure() returns a dict mapping
names to the results.
+
+ savecache contains a path where to save (append) results of a call
"""
for attr in ['_includes_', '_libraries_', '_sources_', '_library_dirs_',
'_include_dirs_', '_header_']:
@@ -164,7 +166,7 @@
for key in dir(CConfig):
value = getattr(CConfig, key)
if isinstance(value, CConfigEntry):
- entries.append((key, value))
+ entries.append((key, value))
if entries: # can be empty if there are only CConfigSingleEntries
writer = _CWriter(CConfig)
@@ -202,15 +204,36 @@
writer.write_header()
res[key] = value.question(writer.ask_gcc)
+ if savecache is not None:
+ f = py.path.local(savecache).open("w")
+ f.write('import ctypes\n\n')
+ for key, val in res.items():
+ entry = getattr(CConfig, key)
+ if isinstance(val, int):
+ f.write("%s = %d\n" % (key, val))
+ elif isinstance(val, ctypes._SimpleCData.__class__):
+ # a simple type
+ f.write("%s = %s\n" % (key, ctypes_repr(val)))
+ elif isinstance(val, ctypes.Structure.__class__):
+ f.write("class %s(ctypes.Structure):\n" % key)
+ f.write(" _fields_ = [\n")
+ for k, v in val._fields_:
+ f.write(" ('%s', %s),\n" % (k, ctypes_repr(v)))
+ f.write(" ]\n")
+ else:
+ raise NotImplementedError("Saving of %r" % (val,))
+ f.close()
return res
+def ctypes_repr(cls):
+ return "ctypes." + cls.__name__
+
# ____________________________________________________________
class CConfigEntry(object):
"Abstract base class."
-
class Struct(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined structure.
@@ -313,7 +336,6 @@
S.__name__ = name
return S
-
class SimpleType(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined simple numeric type.
@@ -350,7 +372,6 @@
ctype = fixup_ctype(ctype, self.name, (size, sign))
return ctype
-
class ConstantInteger(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined integer constant.
Modified: pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py (original)
+++ pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py Sat Mar 6 03:33:01 2010
@@ -126,6 +126,32 @@
'ushort': ctypes.c_ushort,
'XYZZY': 42}
+def test_cache():
+ configdir = configure.configdir
+ test_h = configdir.join('test_ctypes_platform2.h')
+ test_h.write('#define XYZZY 42\n')
+
+ class CConfig:
+ _compilation_info_ = ExternalCompilationInfo(
+ pre_include_lines = ["/* a C comment */",
+ "#include ",
+ "#include "],
+ include_dirs = [str(configdir)]
+ )
+
+ FILE = configure.Struct('FILE', [])
+ ushort = configure.SimpleType('unsigned short')
+ XYZZY = configure.ConstantInteger('XYZZY')
+
+ cachefile = configdir.join('cache')
+ res = configure.configure(CConfig, savecache=configdir.join('cache'))
+ d = {}
+ execfile(str(cachefile), d)
+ assert d['XYZZY'] == res['XYZZY']
+ assert d['ushort'] == res['ushort']
+ assert d['FILE']._fields_ == res['FILE']._fields_
+ assert d['FILE'].__mro__[1:] == res['FILE'].__mro__[1:]
+
def test_ifdef():
class CConfig:
_compilation_info_ = ExternalCompilationInfo(
From fijal at codespeak.net Sat Mar 6 03:38:30 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 03:38:30 +0100 (CET)
Subject: [pypy-svn] r71839 -
pypy/branch/ctypes-configure-cache/ctypes_configure
Message-ID: <20100306023830.C728A51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 03:38:29 2010
New Revision: 71839
Modified:
pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py
Log:
a comment and an assert
Modified: pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py (original)
+++ pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py Sat Mar 6 03:38:29 2010
@@ -226,6 +226,9 @@
return res
def ctypes_repr(cls):
+ # ctypes_configure does not support nested structs so far
+ # so let's ignore it
+ assert isinstance(cls, ctypes._SimpleCData.__class__)
return "ctypes." + cls.__name__
# ____________________________________________________________
From fijal at codespeak.net Sat Mar 6 04:24:48 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 04:24:48 +0100 (CET)
Subject: [pypy-svn] r71840 -
pypy/branch/ctypes-configure-cache/pypy/lib/_ctypes/_cache
Message-ID: <20100306032448.068BE51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 04:24:45 2010
New Revision: 71840
Added:
pypy/branch/ctypes-configure-cache/pypy/lib/_ctypes/_cache/ (props changed)
Log:
Add a directory for storing ctypes_configure caches, with ignore on *
From fijal at codespeak.net Sat Mar 6 04:37:35 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 04:37:35 +0100 (CET)
Subject: [pypy-svn] r71841 - pypy/branch/ctypes-configure-cache/pypy/lib
Message-ID: <20100306033735.91DA851058@codespeak.net>
Author: fijal
Date: Sat Mar 6 04:37:32 2010
New Revision: 71841
Modified:
pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py
Log:
port _locale
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py Sat Mar 6 04:37:32 2010
@@ -7,8 +7,8 @@
c_ubyte, c_int, c_char_p, c_wchar_p)
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
-from ctypes_configure.configure import (configure, ExternalCompilationInfo,
- ConstantInteger, DefinedConstantInteger, SimpleType)
+
+import os.path
size_t = c_int
@@ -31,21 +31,33 @@
'LC_IDENTIFICATION',
)
-class LocaleConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
-for key in _CONSTANTS:
- setattr(LocaleConfigure, key, ConstantInteger(key))
+cache_dir = os.path.join(os.path.dirname(__file__), '_ctypes', '_cache')
+cache_file = os.path.join(cache_dir, '_locale')
try:
- locale_config = configure(LocaleConfigure, noerr=True)
-except Exception, e:
- # should probably be moved into configure()
- # as an optional feature
- raise ImportError("%s: %s" % (e.__class__, e))
+ locale_config = {}
+ execfile(cache_file, locale_config)
+except:
+ from ctypes_configure.configure import (configure, ExternalCompilationInfo,
+ ConstantInteger, DefinedConstantInteger, SimpleType)
+
+ class LocaleConfigure:
+ _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
+ for key in _CONSTANTS:
+ setattr(LocaleConfigure, key, ConstantInteger(key))
+
+ try:
+ locale_config = configure(LocaleConfigure, savecache=cache_file,
+ noerr=True)
+ except Exception, e:
+ # should probably be moved into configure()
+ # as an optional feature
+ raise ImportError("%s: %s" % (e.__class__, e))
+
+ del LocaleConfigure
for key in _CONSTANTS:
globals()[key] = locale_config[key]
-del LocaleConfigure
del locale_config
HAS_LANGINFO = True
@@ -297,18 +309,28 @@
for i in range(1, 13):
langinfo_names.append("MON_%d" % i)
langinfo_names.append("ABMON_%d" % i)
-
- class LanginfoConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
- nl_item = SimpleType('nl_item')
- for key in langinfo_names:
- setattr(LanginfoConfigure, key, ConstantInteger(key))
- config = configure(LanginfoConfigure)
+ try:
+ langinfo_cache = os.path.join(cache_dir, '_locale_langinfo')
+ config = {}
+ execfile(langinfo_cache, config)
+ except:
+ from ctypes_configure.configure import (configure,
+ ExternalCompilationInfo,
+ ConstantInteger, DefinedConstantInteger, SimpleType)
+
+ class LanginfoConfigure:
+ _compilation_info_ = ExternalCompilationInfo(
+ includes=['langinfo.h'])
+ nl_item = SimpleType('nl_item')
+ for key in langinfo_names:
+ setattr(LanginfoConfigure, key, ConstantInteger(key))
+
+ config = configure(LanginfoConfigure, savecache=langinfo_cache)
+ del LanginfoConfigure
nl_item = config['nl_item']
for key in langinfo_names:
globals()[key] = config[key]
- del LanginfoConfigure
del config
_nl_langinfo = libc.nl_langinfo
From dan at codespeak.net Sat Mar 6 05:03:35 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Sat, 6 Mar 2010 05:03:35 +0100 (CET)
Subject: [pypy-svn] r71842 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100306040335.6D20451058@codespeak.net>
Author: dan
Date: Sat Mar 6 05:03:32 2010
New Revision: 71842
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Added test for str, skipping for now, passes on CPython NumPy though.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py Sat Mar 6 05:03:32 2010
@@ -19,7 +19,6 @@
def coerce_float32(space, w_x):
return unwrap_float32(space, space.float(w_x))
-
def create_factory(result_factory):
def factory(t):
return result_factory[t]
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py Sat Mar 6 05:03:32 2010
@@ -254,13 +254,13 @@
def descr_getitem(self, w_index):
space = self.space
- validate_index(self, space, w_index)
try:
space.iter(w_index)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
w_index = space.newlist([w_index])
+ validate_index(self, space, w_index)
try:
indexes = self._unpack_indexes(space, w_index)
except OperationError, e:
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Sat Mar 6 05:03:32 2010
@@ -175,6 +175,22 @@
assert len(x) == 5
raises(ValueError, minimum, ar, zeros(3, dtype=int))
+ def test_str(self):
+ skip("Perfect string formatting is going to be tough.")
+ from numpy import zeros, array
+
+ z = zeros(shape=(3,))
+ assert str(z) == '[ 0. 0. 0.]'
+
+ ar = array([1.0, 2.0, 3.0])
+ assert str(ar) == '[ 1. 2. 3.]'
+
+ ar = array([1.5, 2.5, 3.5])
+ assert str(ar) == '[ 1.5 2.5 3.5]'
+
+ ar = array([1, 2, 3], dtype=int)
+ assert str(ar) == '[1 2 3]'
+
class AppTestMultiDim(object):
def setup_class(cls):
cls.space = gettestobjspace(usemodules=('micronumpy',))
From fijal at codespeak.net Sat Mar 6 05:10:10 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 05:10:10 +0100 (CET)
Subject: [pypy-svn] r71843 - pypy/branch/ctypes-configure-cache/pypy/lib
Message-ID: <20100306041010.B4A7451058@codespeak.net>
Author: fijal
Date: Sat Mar 6 05:10:08 2010
New Revision: 71843
Modified:
pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py
pypy/branch/ctypes-configure-cache/pypy/lib/ctypes_support.py
pypy/branch/ctypes-configure-cache/pypy/lib/resource.py
Log:
Use caching also in resource
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/_locale.py Sat Mar 6 05:10:08 2010
@@ -6,7 +6,7 @@
from ctypes import (Structure, POINTER, create_string_buffer,
c_ubyte, c_int, c_char_p, c_wchar_p)
from ctypes_support import standard_c_lib as libc
-from ctypes_support import get_errno
+from ctypes_support import get_errno, cache_dir
import os.path
@@ -31,13 +31,12 @@
'LC_IDENTIFICATION',
)
-cache_dir = os.path.join(os.path.dirname(__file__), '_ctypes', '_cache')
cache_file = os.path.join(cache_dir, '_locale')
try:
locale_config = {}
execfile(cache_file, locale_config)
-except:
+except (IOError, OSError):
from ctypes_configure.configure import (configure, ExternalCompilationInfo,
ConstantInteger, DefinedConstantInteger, SimpleType)
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/ctypes_support.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/ctypes_support.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/ctypes_support.py Sat Mar 6 05:10:08 2010
@@ -6,6 +6,9 @@
import ctypes
import ctypes.util
import sys
+import os.path
+
+cache_dir = os.path.join(os.path.dirname(__file__), '_ctypes', '_cache')
# __________ the standard C library __________
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/resource.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/resource.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/resource.py Sat Mar 6 05:10:08 2010
@@ -2,13 +2,11 @@
if sys.platform == 'win32':
raise ImportError('resource module not available for win32')
+import os.path
from ctypes_support import standard_c_lib as libc
-from ctypes_support import get_errno
+from ctypes_support import get_errno, cache_dir
from ctypes import Structure, c_int, c_long, byref, sizeof
from errno import EINVAL, EPERM
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger,
- SimpleType)
import _structseq
class error(Exception):
@@ -53,16 +51,28 @@
_getpagesize = None
# Setup our configure
-class ResourceConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/resource.h'])
- rlim_t = SimpleType('rlim_t')
-for key in _CONSTANTS:
- setattr(ResourceConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(ResourceConfigure, key, DefinedConstantInteger(key))
+
+cache_file = os.path.join(cache_dir, 'resource')
+try:
+ config = {}
+ execfile(cache_file, config)
+except (IOError, OSError):
+ from ctypes_configure.configure import (configure,
+ ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger,
+ SimpleType)
+
+ class ResourceConfigure:
+ _compilation_info_ = ExternalCompilationInfo(
+ includes=['sys/resource.h'])
+ rlim_t = SimpleType('rlim_t')
+ for key in _CONSTANTS:
+ setattr(ResourceConfigure, key, ConstantInteger(key))
+ for key in _OPTIONAL_CONSTANTS:
+ setattr(ResourceConfigure, key, DefinedConstantInteger(key))
+
+ config = configure(ResourceConfigure, savecache=cache_file)
# Configure constants and types
-config = configure(ResourceConfigure)
rlim_t = config['rlim_t']
sizeof_rlim_t = 1<<(sizeof(rlim_t) * 8)
for key in _CONSTANTS:
From dan at codespeak.net Sat Mar 6 05:14:16 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Sat, 6 Mar 2010 05:14:16 +0100 (CET)
Subject: [pypy-svn] r71844 - pypy/branch/micronumpy/pypy/module/micronumpy
Message-ID: <20100306041416.EC64C51058@codespeak.net>
Author: dan
Date: Sat Mar 6 05:14:15 2010
New Revision: 71844
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
Log:
Marginally improved sdarray str() and repr().
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Sat Mar 6 05:14:15 2010
@@ -232,21 +232,25 @@
descr_len.unwrap_spec = ['self']
def str(self):
- return ', '.join([str(x) for x in self.storage])
+ strings = [str(x) for x in self.storage]
+ maxlen = max([len(x) for x in strings])
+ return strings, maxlen
def descr_str(self):
space = self.space
#beautiful, as in numpy
- strs=[str(x) for x in self.storage]
- maxlen=max([len(x) for x in strs])
+ strings, maxlen = self.str()
return space.wrap(
- "[%s]" % ' '.join(["%-*s"%(maxlen, s) for s in strs])
+ "[%s]" % ' '.join(["%-*s"%(maxlen, s) for s in strings])
)
descr_str.unwrap_spec = ['self']
def descr_repr(self):
space = self.space
- return space.wrap("array([%s])" % self.str())
+ strings, maxlen = self.str()
+ return space.wrap(
+ "array([%s])" % ', '.join(["%-*s"%(maxlen, s) for s in strings])
+ )
descr_repr.unwrap_spec = ['self']
NumArray.typedef = TypeDef('ndarray', base_typedef,
From fijal at codespeak.net Sat Mar 6 05:14:21 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 05:14:21 +0100 (CET)
Subject: [pypy-svn] r71845 - in
pypy/branch/ctypes-configure-cache/ctypes_configure: . test
Message-ID: <20100306041421.DA6AE5105D@codespeak.net>
Author: fijal
Date: Sat Mar 6 05:14:19 2010
New Revision: 71845
Modified:
pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py
pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py
Log:
A test and a fix
Modified: pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py (original)
+++ pypy/branch/ctypes-configure-cache/ctypes_configure/configure.py Sat Mar 6 05:14:19 2010
@@ -209,8 +209,10 @@
f.write('import ctypes\n\n')
for key, val in res.items():
entry = getattr(CConfig, key)
- if isinstance(val, int):
+ if isinstance(val, (int, long)):
f.write("%s = %d\n" % (key, val))
+ elif val is None:
+ f.write("%s = None\n" % key)
elif isinstance(val, ctypes._SimpleCData.__class__):
# a simple type
f.write("%s = %s\n" % (key, ctypes_repr(val)))
Modified: pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py (original)
+++ pypy/branch/ctypes-configure-cache/ctypes_configure/test/test_configure.py Sat Mar 6 05:14:19 2010
@@ -129,7 +129,8 @@
def test_cache():
configdir = configure.configdir
test_h = configdir.join('test_ctypes_platform2.h')
- test_h.write('#define XYZZY 42\n')
+ test_h.write('#define XYZZY 42\n'
+ "#define large 2147483648L\n")
class CConfig:
_compilation_info_ = ExternalCompilationInfo(
@@ -142,6 +143,9 @@
FILE = configure.Struct('FILE', [])
ushort = configure.SimpleType('unsigned short')
XYZZY = configure.ConstantInteger('XYZZY')
+ XUZ = configure.Has('XUZ')
+ large = configure.DefinedConstantInteger('large')
+ undef = configure.Defined('really_undefined')
cachefile = configdir.join('cache')
res = configure.configure(CConfig, savecache=configdir.join('cache'))
@@ -151,6 +155,9 @@
assert d['ushort'] == res['ushort']
assert d['FILE']._fields_ == res['FILE']._fields_
assert d['FILE'].__mro__[1:] == res['FILE'].__mro__[1:]
+ assert d['undef'] == res['undef']
+ assert d['large'] == res['large']
+ assert d['XUZ'] == res['XUZ']
def test_ifdef():
class CConfig:
From fijal at codespeak.net Sat Mar 6 05:26:46 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 05:26:46 +0100 (CET)
Subject: [pypy-svn] r71846 - pypy/branch/ctypes-configure-cache/pypy/lib
Message-ID: <20100306042646.964CF51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 05:26:43 2010
New Revision: 71846
Modified:
pypy/branch/ctypes-configure-cache/pypy/lib/_hashlib.py
Log:
use caching in hashlib
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/_hashlib.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/_hashlib.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/_hashlib.py Sat Mar 6 05:26:43 2010
@@ -1,6 +1,8 @@
+import sys
from ctypes import *
import ctypes.util
-from ctypes_configure import configure
+from ctypes_support import cache_dir
+import os.path
# Note: OpenSSL on OS X only provides md5 and sha1
libpath = ctypes.util.find_library('ssl')
@@ -16,15 +18,25 @@
else:
return buffer(x)[:]
-class CConfig:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes=['openssl/evp.h'],
- )
- EVP_MD = configure.Struct('EVP_MD',
- [])
- EVP_MD_CTX = configure.Struct('EVP_MD_CTX',
- [('digest', c_void_p)])
-c = configure.configure(CConfig)
+cache_file = os.path.join(cache_dir, '_hashlib')
+
+try:
+ c = {}
+ execfile(cache_file, c)
+except (OSError, IOError):
+ from ctypes_configure import configure
+
+ class CConfig:
+ _compilation_info_ = configure.ExternalCompilationInfo(
+ includes=['openssl/evp.h'],
+ )
+ EVP_MD = configure.Struct('EVP_MD',
+ [])
+ EVP_MD_CTX = configure.Struct('EVP_MD_CTX',
+ [('digest', c_void_p)])
+ c = configure.configure(CConfig, savecache=cache_file)
+ del CConfig
+
EVP_MD_CTX = c['EVP_MD_CTX']
EVP_MD = c['EVP_MD']
From fijal at codespeak.net Sat Mar 6 05:31:09 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 05:31:09 +0100 (CET)
Subject: [pypy-svn] r71847 - pypy/branch/ctypes-configure-cache/pypy/lib
Message-ID: <20100306043109.2098F51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 05:31:06 2010
New Revision: 71847
Modified:
pypy/branch/ctypes-configure-cache/pypy/lib/syslog.py
Log:
use caching for syslog
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/syslog.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/syslog.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/syslog.py Sat Mar 6 05:31:06 2010
@@ -6,13 +6,12 @@
"""
import sys
+import os.path
if sys.platform == 'win32':
raise ImportError("No syslog on Windows")
-from ctypes_support import standard_c_lib as libc
+from ctypes_support import standard_c_lib as libc, cache_dir
from ctypes import c_int, c_char_p
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
_CONSTANTS = (
'LOG_EMERG',
@@ -61,14 +60,23 @@
('LOG_UUCP', 'LOG_MAIL'),
)
-class SyslogConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/syslog.h'])
-for key in _CONSTANTS:
- setattr(SyslogConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(SyslogConfigure, key, DefinedConstantInteger(key))
+cache_file = os.path.join(cache_dir, 'syslog')
+try:
+ config = {}
+ execfile(cache_file, config)
+except (IOError, OSError):
+ from ctypes_configure.configure import (configure,
+ ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
+
+ class SyslogConfigure:
+ _compilation_info_ = ExternalCompilationInfo(includes=['sys/syslog.h'])
+ for key in _CONSTANTS:
+ setattr(SyslogConfigure, key, ConstantInteger(key))
+ for key in _OPTIONAL_CONSTANTS:
+ setattr(SyslogConfigure, key, DefinedConstantInteger(key))
+
+ config = configure(SyslogConfigure, savecache=cache_file)
-config = configure(SyslogConfigure)
for key in _CONSTANTS:
globals()[key] = config[key]
optional_constants = []
From fijal at codespeak.net Sat Mar 6 05:34:16 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 05:34:16 +0100 (CET)
Subject: [pypy-svn] r71848 - pypy/branch/ctypes-configure-cache/pypy/lib
Message-ID: <20100306043416.C026C51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 05:34:14 2010
New Revision: 71848
Modified:
pypy/branch/ctypes-configure-cache/pypy/lib/pyexpat.py
Log:
Also use caching in pyexpat, although it's compiled as module these days
Modified: pypy/branch/ctypes-configure-cache/pypy/lib/pyexpat.py
==============================================================================
--- pypy/branch/ctypes-configure-cache/pypy/lib/pyexpat.py (original)
+++ pypy/branch/ctypes-configure-cache/pypy/lib/pyexpat.py Sat Mar 6 05:34:14 2010
@@ -1,44 +1,53 @@
import ctypes
import ctypes.util
-from ctypes_configure import configure
from ctypes import c_char_p, c_int, c_void_p, POINTER, c_char, c_wchar_p
+from ctypes_support import cache_dir
import sys
+import os.path
lib = ctypes.CDLL(ctypes.util.find_library('expat'))
-class CConfigure:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes = ['expat.h'],
- libraries = ['expat'],
- pre_include_lines = [
- '#define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION)'],
- )
-
- XML_Char = configure.SimpleType('XML_Char', ctypes.c_char)
- XML_COMBINED_VERSION = configure.ConstantInteger('XML_COMBINED_VERSION')
- for name in ['XML_PARAM_ENTITY_PARSING_NEVER',
- 'XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE',
- 'XML_PARAM_ENTITY_PARSING_ALWAYS']:
- locals()[name] = configure.ConstantInteger(name)
-
- XML_Encoding = configure.Struct('XML_Encoding',[
- ('data', c_void_p),
- ('convert', c_void_p),
- ('release', c_void_p),
- ('map', c_int * 256)])
- XML_Content = configure.Struct('XML_Content',[
- ('numchildren', c_int),
- ('children', c_void_p),
- ('name', c_char_p),
- ('type', c_int),
- ('quant', c_int),
- ])
- # this is insanely stupid
- XML_FALSE = configure.ConstantInteger('XML_FALSE')
- XML_TRUE = configure.ConstantInteger('XML_TRUE')
+cache_file = os.path.join(cache_dir, 'pyexpat')
+try:
+ info = {}
+ execfile(cache_file, info)
+except (IOError, OSError):
+ from ctypes_configure import configure
+ class CConfigure:
+ _compilation_info_ = configure.ExternalCompilationInfo(
+ includes = ['expat.h'],
+ libraries = ['expat'],
+ pre_include_lines = [
+ '#define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION)'],
+ )
+
+ XML_Char = configure.SimpleType('XML_Char', ctypes.c_char)
+ XML_COMBINED_VERSION = configure.ConstantInteger('XML_COMBINED_VERSION')
+ for name in ['XML_PARAM_ENTITY_PARSING_NEVER',
+ 'XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE',
+ 'XML_PARAM_ENTITY_PARSING_ALWAYS']:
+ locals()[name] = configure.ConstantInteger(name)
+
+ XML_Encoding = configure.Struct('XML_Encoding',[
+ ('data', c_void_p),
+ ('convert', c_void_p),
+ ('release', c_void_p),
+ ('map', c_int * 256)])
+ XML_Content = configure.Struct('XML_Content',[
+ ('numchildren', c_int),
+ ('children', c_void_p),
+ ('name', c_char_p),
+ ('type', c_int),
+ ('quant', c_int),
+ ])
+ # this is insanely stupid
+ XML_FALSE = configure.ConstantInteger('XML_FALSE')
+ XML_TRUE = configure.ConstantInteger('XML_TRUE')
+
+ info = configure.configure(CConfigure, savecache=cache_file)
+
-info = configure.configure(CConfigure)
for k, v in info.items():
globals()[k] = v
From arigo at codespeak.net Sat Mar 6 11:26:19 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 11:26:19 +0100 (CET)
Subject: [pypy-svn] r71849 - pypy/branch/ctypes-configure-cache-2
Message-ID: <20100306102619.0EA2551058@codespeak.net>
Author: arigo
Date: Sat Mar 6 11:26:17 2010
New Revision: 71849
Added:
pypy/branch/ctypes-configure-cache-2/
- copied from r71848, pypy/trunk/
Log:
Another branch (sorry) in order to try to implement it in a different way.
From arigo at codespeak.net Sat Mar 6 12:16:00 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 12:16:00 +0100 (CET)
Subject: [pypy-svn] r71850 - in pypy/branch/ctypes-configure-cache-2:
ctypes_configure pypy/lib pypy/lib/ctypes_config_cache
Message-ID: <20100306111600.170875105A@codespeak.net>
Author: arigo
Date: Sat Mar 6 12:15:59 2010
New Revision: 71850
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/ (props changed)
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/__init__.py (contents, props changed)
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/autopath.py
- copied unchanged from r71849, pypy/branch/ctypes-configure-cache-2/pypy/bin/autopath.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py (contents, props changed)
Removed:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_configure
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py
Log:
Write just enough to have the syslog version. Note that
'pypy/lib/ctypes_configure' is killed now. Also note that the cache is
not generated automatically; you have to call 'syslog.ctc.py'
explicitly. The idea is to call all .ctc.py files at the start of a
translation.
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py Sat Mar 6 12:15:59 2010
@@ -588,6 +588,19 @@
# ____________________________________________________________
+def dumpcache(referencefilename, filename, config):
+ dirname = os.path.dirname(referencefilename)
+ filename = os.path.join(dirname, filename)
+ f = open(filename, 'w')
+ names = config.keys()
+ names.sort()
+ for name in names:
+ print >> f, '%s = %r' % (name, config[name])
+ f.close()
+ print 'Wrote %s.' % (filename,)
+
+# ____________________________________________________________
+
def get_python_include_dir():
from distutils import sysconfig
gcv = sysconfig.get_config_vars()
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/__init__.py
==============================================================================
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py Sat Mar 6 12:15:59 2010
@@ -0,0 +1,79 @@
+"""
+'ctypes_configure' source for syslog.py.
+Run this to rebuild _syslog_cache.py.
+"""
+
+import autopath
+from ctypes_configure.configure import (configure, dumpcache,
+ ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
+
+
+_CONSTANTS = (
+ 'LOG_EMERG',
+ 'LOG_ALERT',
+ 'LOG_CRIT',
+ 'LOG_ERR',
+ 'LOG_WARNING',
+ 'LOG_NOTICE',
+ 'LOG_INFO',
+ 'LOG_DEBUG',
+
+ 'LOG_PID',
+ 'LOG_CONS',
+ 'LOG_NDELAY',
+
+ 'LOG_KERN',
+ 'LOG_USER',
+ 'LOG_MAIL',
+ 'LOG_DAEMON',
+ 'LOG_AUTH',
+ 'LOG_LPR',
+ 'LOG_LOCAL0',
+ 'LOG_LOCAL1',
+ 'LOG_LOCAL2',
+ 'LOG_LOCAL3',
+ 'LOG_LOCAL4',
+ 'LOG_LOCAL5',
+ 'LOG_LOCAL6',
+ 'LOG_LOCAL7',
+)
+_OPTIONAL_CONSTANTS = (
+ 'LOG_NOWAIT',
+ 'LOG_PERROR',
+
+ 'LOG_SYSLOG',
+ 'LOG_CRON',
+ 'LOG_UUCP',
+ 'LOG_NEWS',
+)
+
+# Constant aliases if there are not defined
+_ALIAS = (
+ ('LOG_SYSLOG', 'LOG_DAEMON'),
+ ('LOG_CRON', 'LOG_DAEMON'),
+ ('LOG_NEWS', 'LOG_MAIL'),
+ ('LOG_UUCP', 'LOG_MAIL'),
+)
+
+class SyslogConfigure:
+ _compilation_info_ = ExternalCompilationInfo(includes=['sys/syslog.h'])
+for key in _CONSTANTS:
+ setattr(SyslogConfigure, key, ConstantInteger(key))
+for key in _OPTIONAL_CONSTANTS:
+ setattr(SyslogConfigure, key, DefinedConstantInteger(key))
+
+config = configure(SyslogConfigure)
+optional_constants = []
+for key in _OPTIONAL_CONSTANTS:
+ if config[key] is not None:
+ optional_constants.append(key)
+ else:
+ del config[key]
+for alias, key in _ALIAS:
+ if alias in optional_constants:
+ continue
+ config[alias] = config[key]
+ optional_constants.append(alias)
+
+config['optional_constants'] = optional_constants
+dumpcache(__file__, '_syslog_cache.py', config)
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py Sat Mar 6 12:15:59 2010
@@ -9,79 +9,11 @@
if sys.platform == 'win32':
raise ImportError("No syslog on Windows")
+# load the platform-specific cache made by running syslog.ctc.py
+from ctypes_config_cache._syslog_cache import *
+
from ctypes_support import standard_c_lib as libc
from ctypes import c_int, c_char_p
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
-
-_CONSTANTS = (
- 'LOG_EMERG',
- 'LOG_ALERT',
- 'LOG_CRIT',
- 'LOG_ERR',
- 'LOG_WARNING',
- 'LOG_NOTICE',
- 'LOG_INFO',
- 'LOG_DEBUG',
-
- 'LOG_PID',
- 'LOG_CONS',
- 'LOG_NDELAY',
-
- 'LOG_KERN',
- 'LOG_USER',
- 'LOG_MAIL',
- 'LOG_DAEMON',
- 'LOG_AUTH',
- 'LOG_LPR',
- 'LOG_LOCAL0',
- 'LOG_LOCAL1',
- 'LOG_LOCAL2',
- 'LOG_LOCAL3',
- 'LOG_LOCAL4',
- 'LOG_LOCAL5',
- 'LOG_LOCAL6',
- 'LOG_LOCAL7',
-)
-_OPTIONAL_CONSTANTS = (
- 'LOG_NOWAIT',
- 'LOG_PERROR',
-
- 'LOG_SYSLOG',
- 'LOG_CRON',
- 'LOG_UUCP',
- 'LOG_NEWS',
-)
-
-# Constant aliases if there are not defined
-_ALIAS = (
- ('LOG_SYSLOG', 'LOG_DAEMON'),
- ('LOG_CRON', 'LOG_DAEMON'),
- ('LOG_NEWS', 'LOG_MAIL'),
- ('LOG_UUCP', 'LOG_MAIL'),
-)
-
-class SyslogConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/syslog.h'])
-for key in _CONSTANTS:
- setattr(SyslogConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(SyslogConfigure, key, DefinedConstantInteger(key))
-
-config = configure(SyslogConfigure)
-for key in _CONSTANTS:
- globals()[key] = config[key]
-optional_constants = []
-for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- globals()[key] = config[key]
- optional_constants.append(key)
-for alias, key in _ALIAS:
- if alias in optional_constants:
- continue
- globals()[alias] = globals()[key]
- optional_constants.append(alias)
-del config
# Real prototype is:
# void syslog(int priority, const char *format, ...);
From arigo at codespeak.net Sat Mar 6 12:30:22 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 12:30:22 +0100 (CET)
Subject: [pypy-svn] r71851 - in
pypy/branch/ctypes-configure-cache-2/ctypes_configure: . test
Message-ID: <20100306113022.662E55105B@codespeak.net>
Author: arigo
Date: Sat Mar 6 12:30:20 2010
New Revision: 71851
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/cbuild.py
pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py
Log:
Merge the content of branch/ctypes-configure-cache/ctypes_configure,
with minor edits and a different interface.
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/cbuild.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/cbuild.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/cbuild.py Sat Mar 6 12:30:20 2010
@@ -5,7 +5,7 @@
debug = 0
-configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure')
+configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure-')
class ExternalCompilationInfo(object):
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py Sat Mar 6 12:30:20 2010
@@ -164,7 +164,7 @@
for key in dir(CConfig):
value = getattr(CConfig, key)
if isinstance(value, CConfigEntry):
- entries.append((key, value))
+ entries.append((key, value))
if entries: # can be empty if there are only CConfigSingleEntries
writer = _CWriter(CConfig)
@@ -201,7 +201,6 @@
writer = _CWriter(CConfig)
writer.write_header()
res[key] = value.question(writer.ask_gcc)
-
return res
# ____________________________________________________________
@@ -210,7 +209,6 @@
class CConfigEntry(object):
"Abstract base class."
-
class Struct(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined structure.
@@ -313,7 +311,6 @@
S.__name__ = name
return S
-
class SimpleType(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined simple numeric type.
@@ -350,7 +347,6 @@
ctype = fixup_ctype(ctype, self.name, (size, sign))
return ctype
-
class ConstantInteger(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined integer constant.
@@ -588,14 +584,42 @@
# ____________________________________________________________
+def ctypes_repr(cls):
+ # ctypes_configure does not support nested structs so far
+ # so let's ignore it
+ assert isinstance(cls, ctypes._SimpleCData.__class__)
+ return "ctypes." + cls.__name__
+
def dumpcache(referencefilename, filename, config):
dirname = os.path.dirname(referencefilename)
filename = os.path.join(dirname, filename)
f = open(filename, 'w')
+ print >> f, 'import ctypes'
+ print >> f
names = config.keys()
names.sort()
- for name in names:
- print >> f, '%s = %r' % (name, config[name])
+ for key in names:
+ val = config[key]
+ if isinstance(val, (int, long)):
+ f.write("%s = %d\n" % (key, val))
+ elif val is None:
+ f.write("%s = None\n" % key)
+ elif isinstance(val, ctypes._SimpleCData.__class__):
+ # a simple type
+ f.write("%s = %s\n" % (key, ctypes_repr(val)))
+ elif isinstance(val, ctypes.Structure.__class__):
+ f.write("class %s(ctypes.Structure):\n" % key)
+ f.write(" _fields_ = [\n")
+ for k, v in val._fields_:
+ f.write(" ('%s', %s),\n" % (k, ctypes_repr(v)))
+ f.write(" ]\n")
+ elif isinstance(val, (tuple, list)):
+ for x in val:
+ assert isinstance(x, (int, long, str)), \
+ "lists of integers or strings only"
+ f.write("%s = %r\n" % (key, val))
+ else:
+ raise NotImplementedError("Saving of %r" % (val,))
f.close()
print 'Wrote %s.' % (filename,)
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py Sat Mar 6 12:30:20 2010
@@ -126,6 +126,39 @@
'ushort': ctypes.c_ushort,
'XYZZY': 42}
+def test_cache():
+ configdir = configure.configdir
+ test_h = configdir.join('test_ctypes_platform2.h')
+ test_h.write('#define XYZZY 42\n'
+ "#define large 2147483648L\n")
+
+ class CConfig:
+ _compilation_info_ = ExternalCompilationInfo(
+ pre_include_lines = ["/* a C comment */",
+ "#include ",
+ "#include "],
+ include_dirs = [str(configdir)]
+ )
+
+ FILE = configure.Struct('FILE', [])
+ ushort = configure.SimpleType('unsigned short')
+ XYZZY = configure.ConstantInteger('XYZZY')
+ XUZ = configure.Has('XUZ')
+ large = configure.DefinedConstantInteger('large')
+ undef = configure.Defined('really_undefined')
+
+ cachefile = configdir.join('cache')
+ res = configure.configure(CConfig, savecache=configdir.join('cache'))
+ d = {}
+ execfile(str(cachefile), d)
+ assert d['XYZZY'] == res['XYZZY']
+ assert d['ushort'] == res['ushort']
+ assert d['FILE']._fields_ == res['FILE']._fields_
+ assert d['FILE'].__mro__[1:] == res['FILE'].__mro__[1:]
+ assert d['undef'] == res['undef']
+ assert d['large'] == res['large']
+ assert d['XUZ'] == res['XUZ']
+
def test_ifdef():
class CConfig:
_compilation_info_ = ExternalCompilationInfo(
From arigo at codespeak.net Sat Mar 6 12:32:45 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 12:32:45 +0100 (CET)
Subject: [pypy-svn] r71852 -
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test
Message-ID: <20100306113245.BF73D5105C@codespeak.net>
Author: arigo
Date: Sat Mar 6 12:32:44 2010
New Revision: 71852
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py
Log:
Oups, fix the test too.
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py Sat Mar 6 12:32:44 2010
@@ -147,8 +147,11 @@
large = configure.DefinedConstantInteger('large')
undef = configure.Defined('really_undefined')
+ res = configure.configure(CConfig)
+
cachefile = configdir.join('cache')
- res = configure.configure(CConfig, savecache=configdir.join('cache'))
+ configure.dumpcache('', str(cachefile), res)
+
d = {}
execfile(str(cachefile), d)
assert d['XYZZY'] == res['XYZZY']
From arigo at codespeak.net Sat Mar 6 12:37:31 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 12:37:31 +0100 (CET)
Subject: [pypy-svn] r71853 - in
pypy/branch/ctypes-configure-cache-2/ctypes_configure: . test
Message-ID: <20100306113731.3F18F5105D@codespeak.net>
Author: arigo
Date: Sat Mar 6 12:37:29 2010
New Revision: 71853
Added:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py (contents, props changed)
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py
Log:
Move dumpcache() to its own module.
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/configure.py Sat Mar 6 12:37:29 2010
@@ -584,47 +584,6 @@
# ____________________________________________________________
-def ctypes_repr(cls):
- # ctypes_configure does not support nested structs so far
- # so let's ignore it
- assert isinstance(cls, ctypes._SimpleCData.__class__)
- return "ctypes." + cls.__name__
-
-def dumpcache(referencefilename, filename, config):
- dirname = os.path.dirname(referencefilename)
- filename = os.path.join(dirname, filename)
- f = open(filename, 'w')
- print >> f, 'import ctypes'
- print >> f
- names = config.keys()
- names.sort()
- for key in names:
- val = config[key]
- if isinstance(val, (int, long)):
- f.write("%s = %d\n" % (key, val))
- elif val is None:
- f.write("%s = None\n" % key)
- elif isinstance(val, ctypes._SimpleCData.__class__):
- # a simple type
- f.write("%s = %s\n" % (key, ctypes_repr(val)))
- elif isinstance(val, ctypes.Structure.__class__):
- f.write("class %s(ctypes.Structure):\n" % key)
- f.write(" _fields_ = [\n")
- for k, v in val._fields_:
- f.write(" ('%s', %s),\n" % (k, ctypes_repr(v)))
- f.write(" ]\n")
- elif isinstance(val, (tuple, list)):
- for x in val:
- assert isinstance(x, (int, long, str)), \
- "lists of integers or strings only"
- f.write("%s = %r\n" % (key, val))
- else:
- raise NotImplementedError("Saving of %r" % (val,))
- f.close()
- print 'Wrote %s.' % (filename,)
-
-# ____________________________________________________________
-
def get_python_include_dir():
from distutils import sysconfig
gcv = sysconfig.get_config_vars()
Added: pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py Sat Mar 6 12:37:29 2010
@@ -0,0 +1,42 @@
+import os
+import ctypes
+
+
+def dumpcache(referencefilename, filename, config):
+ dirname = os.path.dirname(referencefilename)
+ filename = os.path.join(dirname, filename)
+ f = open(filename, 'w')
+ print >> f, 'import ctypes'
+ print >> f
+ names = config.keys()
+ names.sort()
+ for key in names:
+ val = config[key]
+ if isinstance(val, (int, long)):
+ f.write("%s = %d\n" % (key, val))
+ elif val is None:
+ f.write("%s = None\n" % key)
+ elif isinstance(val, ctypes._SimpleCData.__class__):
+ # a simple type
+ f.write("%s = %s\n" % (key, ctypes_repr(val)))
+ elif isinstance(val, ctypes.Structure.__class__):
+ f.write("class %s(ctypes.Structure):\n" % key)
+ f.write(" _fields_ = [\n")
+ for k, v in val._fields_:
+ f.write(" ('%s', %s),\n" % (k, ctypes_repr(v)))
+ f.write(" ]\n")
+ elif isinstance(val, (tuple, list)):
+ for x in val:
+ assert isinstance(x, (int, long, str)), \
+ "lists of integers or strings only"
+ f.write("%s = %r\n" % (key, val))
+ else:
+ raise NotImplementedError("Saving of %r" % (val,))
+ f.close()
+ print 'Wrote %s.' % (filename,)
+
+def ctypes_repr(cls):
+ # ctypes_configure does not support nested structs so far
+ # so let's ignore it
+ assert isinstance(cls, ctypes._SimpleCData.__class__)
+ return "ctypes." + cls.__name__
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_configure.py Sat Mar 6 12:37:29 2010
@@ -126,42 +126,6 @@
'ushort': ctypes.c_ushort,
'XYZZY': 42}
-def test_cache():
- configdir = configure.configdir
- test_h = configdir.join('test_ctypes_platform2.h')
- test_h.write('#define XYZZY 42\n'
- "#define large 2147483648L\n")
-
- class CConfig:
- _compilation_info_ = ExternalCompilationInfo(
- pre_include_lines = ["/* a C comment */",
- "#include ",
- "#include "],
- include_dirs = [str(configdir)]
- )
-
- FILE = configure.Struct('FILE', [])
- ushort = configure.SimpleType('unsigned short')
- XYZZY = configure.ConstantInteger('XYZZY')
- XUZ = configure.Has('XUZ')
- large = configure.DefinedConstantInteger('large')
- undef = configure.Defined('really_undefined')
-
- res = configure.configure(CConfig)
-
- cachefile = configdir.join('cache')
- configure.dumpcache('', str(cachefile), res)
-
- d = {}
- execfile(str(cachefile), d)
- assert d['XYZZY'] == res['XYZZY']
- assert d['ushort'] == res['ushort']
- assert d['FILE']._fields_ == res['FILE']._fields_
- assert d['FILE'].__mro__[1:] == res['FILE'].__mro__[1:]
- assert d['undef'] == res['undef']
- assert d['large'] == res['large']
- assert d['XUZ'] == res['XUZ']
-
def test_ifdef():
class CConfig:
_compilation_info_ = ExternalCompilationInfo(
Added: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py Sat Mar 6 12:37:29 2010
@@ -0,0 +1,39 @@
+from ctypes_configure import configure, dumpcache
+from ctypes_configure.cbuild import ExternalCompilationInfo
+
+
+def test_cache():
+ configdir = configure.configdir
+ test_h = configdir.join('test_ctypes_platform2.h')
+ test_h.write('#define XYZZY 42\n'
+ "#define large 2147483648L\n")
+
+ class CConfig:
+ _compilation_info_ = ExternalCompilationInfo(
+ pre_include_lines = ["/* a C comment */",
+ "#include ",
+ "#include "],
+ include_dirs = [str(configdir)]
+ )
+
+ FILE = configure.Struct('FILE', [])
+ ushort = configure.SimpleType('unsigned short')
+ XYZZY = configure.ConstantInteger('XYZZY')
+ XUZ = configure.Has('XUZ')
+ large = configure.DefinedConstantInteger('large')
+ undef = configure.Defined('really_undefined')
+
+ res = configure.configure(CConfig)
+
+ cachefile = configdir.join('cache')
+ dumpcache.dumpcache('', str(cachefile), res)
+
+ d = {}
+ execfile(str(cachefile), d)
+ assert d['XYZZY'] == res['XYZZY']
+ assert d['ushort'] == res['ushort']
+ assert d['FILE']._fields_ == res['FILE']._fields_
+ assert d['FILE'].__mro__[1:] == res['FILE'].__mro__[1:]
+ assert d['undef'] == res['undef']
+ assert d['large'] == res['large']
+ assert d['XUZ'] == res['XUZ']
From arigo at codespeak.net Sat Mar 6 12:49:52 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 12:49:52 +0100 (CET)
Subject: [pypy-svn] r71854 - in
pypy/branch/ctypes-configure-cache-2/pypy/lib: .
ctypes_config_cache ctypes_config_cache/test
Message-ID: <20100306114952.7C5AD5105E@codespeak.net>
Author: arigo
Date: Sat Mar 6 12:49:51 2010
New Revision: 71854
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/hashlib.ctc.py (contents, props changed)
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/ (props changed)
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/_hashlib.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py
Log:
Add hashlib.ctc.py, and write tests for *.ctc.py.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/_hashlib.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/_hashlib.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/_hashlib.py Sat Mar 6 12:49:51 2010
@@ -1,6 +1,8 @@
from ctypes import *
import ctypes.util
-from ctypes_configure import configure
+
+# load the platform-specific cache made by running hashlib.ctc.py
+from ctypes_config_cache._hashlib_cache import *
# Note: OpenSSL on OS X only provides md5 and sha1
libpath = ctypes.util.find_library('ssl')
@@ -16,18 +18,6 @@
else:
return buffer(x)[:]
-class CConfig:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes=['openssl/evp.h'],
- )
- EVP_MD = configure.Struct('EVP_MD',
- [])
- EVP_MD_CTX = configure.Struct('EVP_MD_CTX',
- [('digest', c_void_p)])
-c = configure.configure(CConfig)
-EVP_MD_CTX = c['EVP_MD_CTX']
-EVP_MD = c['EVP_MD']
-
def patch_fields(fields):
res = []
for k, v in fields:
@@ -39,7 +29,6 @@
class EVP_MD_CTX(Structure):
_fields_ = patch_fields(EVP_MD_CTX._fields_)
-del c
# OpenSSL initialization
lib.OpenSSL_add_all_digests()
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/hashlib.ctc.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/hashlib.ctc.py Sat Mar 6 12:49:51 2010
@@ -0,0 +1,21 @@
+"""
+'ctypes_configure' source for _hashlib.py.
+Run this to rebuild _hashlib_cache.py.
+"""
+
+import autopath
+from ctypes import *
+from ctypes_configure import configure, dumpcache
+
+
+class CConfig:
+ _compilation_info_ = configure.ExternalCompilationInfo(
+ includes=['openssl/evp.h'],
+ )
+ EVP_MD = configure.Struct('EVP_MD',
+ [])
+ EVP_MD_CTX = configure.Struct('EVP_MD_CTX',
+ [('digest', c_void_p)])
+
+config = configure.configure(CConfig)
+dumpcache.dumpcache(__file__, '_hashlib_cache.py', config)
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py Sat Mar 6 12:49:51 2010
@@ -4,8 +4,9 @@
"""
import autopath
-from ctypes_configure.configure import (configure, dumpcache,
+from ctypes_configure.configure import (configure,
ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
+from ctypes_configure.dumpcache import dumpcache
_CONSTANTS = (
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py Sat Mar 6 12:49:51 2010
@@ -0,0 +1,32 @@
+import py
+import sys, os
+from pypy.tool.udir import udir
+
+dirpath = py.path.local(__file__).dirpath().dirpath()
+
+
+def run(filename, outputname):
+ filepath = dirpath.join(filename)
+ tmpdir = udir.ensure('testcache-' + filename, dir=True)
+ outputpath = tmpdir.join(outputname)
+ d = {'__file__': str(outputpath)}
+ path = sys.path[:]
+ try:
+ sys.path.insert(0, str(dirpath))
+ execfile(str(filepath), d)
+ finally:
+ sys.path[:] = path
+ #
+ assert outputpath.check(exists=1)
+ d = {}
+ execfile(str(outputpath), d)
+ return d
+
+
+def test_syslog():
+ d = run('syslog.ctc.py', '_syslog_cache.py')
+ assert 'LOG_NOTICE' in d
+
+def test_hashlib():
+ d = run('hashlib.ctc.py', '_hashlib_cache.py')
+ assert hasattr(d['EVP_MD_CTX'], 'digest')
From arigo at codespeak.net Sat Mar 6 13:01:31 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:01:31 +0100 (CET)
Subject: [pypy-svn] r71855 - in
pypy/branch/ctypes-configure-cache-2/pypy/lib: . ctypes_config_cache
Message-ID: <20100306120131.493855105F@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:01:29 2010
New Revision: 71855
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py
Log:
Split _locale.py.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py Sat Mar 6 13:01:29 2010
@@ -7,48 +7,16 @@
c_ubyte, c_int, c_char_p, c_wchar_p)
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
-from ctypes_configure.configure import (configure, ExternalCompilationInfo,
- ConstantInteger, DefinedConstantInteger, SimpleType)
+
+# load the platform-specific cache made by running locale.ctc.py
+from ctypes_config_cache._locale_cache import *
+
size_t = c_int
# XXX check where this comes from
CHAR_MAX = 127
-_CONSTANTS = (
- 'LC_CTYPE',
- 'LC_NUMERIC',
- 'LC_TIME',
- 'LC_COLLATE',
- 'LC_MONETARY',
- 'LC_MESSAGES',
- 'LC_ALL',
- 'LC_PAPER',
- 'LC_NAME',
- 'LC_ADDRESS',
- 'LC_TELEPHONE',
- 'LC_MEASUREMENT',
- 'LC_IDENTIFICATION',
-)
-
-class LocaleConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
-for key in _CONSTANTS:
- setattr(LocaleConfigure, key, ConstantInteger(key))
-
-try:
- locale_config = configure(LocaleConfigure, noerr=True)
-except Exception, e:
- # should probably be moved into configure()
- # as an optional feature
- raise ImportError("%s: %s" % (e.__class__, e))
-
-for key in _CONSTANTS:
- globals()[key] = locale_config[key]
-del LocaleConfigure
-del locale_config
-
-HAS_LANGINFO = True
# Ubuntu Gusty i386 structure
class lconv(Structure):
@@ -288,29 +256,6 @@
raise NotImplementedError()
if HAS_LANGINFO:
- # this is incomplete list
- langinfo_names = ('CODESET D_T_FMT D_FMT T_FMT RADIXCHAR THOUSEP '
- 'YESEXPR NOEXPR CRNCYSTR').split(" ")
- for i in range(1, 8):
- langinfo_names.append("DAY_%d" % i)
- langinfo_names.append("ABDAY_%d" % i)
- for i in range(1, 13):
- langinfo_names.append("MON_%d" % i)
- langinfo_names.append("ABMON_%d" % i)
-
- class LanginfoConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
- nl_item = SimpleType('nl_item')
- for key in langinfo_names:
- setattr(LanginfoConfigure, key, ConstantInteger(key))
-
- config = configure(LanginfoConfigure)
- nl_item = config['nl_item']
- for key in langinfo_names:
- globals()[key] = config[key]
- del LanginfoConfigure
- del config
-
_nl_langinfo = libc.nl_langinfo
_nl_langinfo.argtypes = (nl_item,)
_nl_langinfo.restype = c_char_p
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py Sat Mar 6 13:01:29 2010
@@ -0,0 +1,63 @@
+"""
+'ctypes_configure' source for _locale.py.
+Run this to rebuild _locale_cache.py.
+"""
+
+import autopath
+from ctypes_configure.configure import (configure, ExternalCompilationInfo,
+ ConstantInteger, DefinedConstantInteger, SimpleType)
+from ctypes_configure.dumpcache import dumpcache
+
+# ____________________________________________________________
+
+_CONSTANTS = [
+ 'LC_CTYPE',
+ 'LC_NUMERIC',
+ 'LC_TIME',
+ 'LC_COLLATE',
+ 'LC_MONETARY',
+ 'LC_MESSAGES',
+ 'LC_ALL',
+ 'LC_PAPER',
+ 'LC_NAME',
+ 'LC_ADDRESS',
+ 'LC_TELEPHONE',
+ 'LC_MEASUREMENT',
+ 'LC_IDENTIFICATION',
+]
+
+class LocaleConfigure:
+ _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
+for key in _CONSTANTS:
+ setattr(LocaleConfigure, key, ConstantInteger(key))
+
+config = configure(LocaleConfigure, noerr=True)
+
+# ____________________________________________________________
+
+HAS_LANGINFO = True # xxx hard-coded to True for now
+
+if HAS_LANGINFO:
+ # this is incomplete list
+ langinfo_names = ('CODESET D_T_FMT D_FMT T_FMT RADIXCHAR THOUSEP '
+ 'YESEXPR NOEXPR CRNCYSTR').split(" ")
+ for i in range(1, 8):
+ langinfo_names.append("DAY_%d" % i)
+ langinfo_names.append("ABDAY_%d" % i)
+ for i in range(1, 13):
+ langinfo_names.append("MON_%d" % i)
+ langinfo_names.append("ABMON_%d" % i)
+
+ class LanginfoConfigure:
+ _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
+ nl_item = SimpleType('nl_item')
+ for key in langinfo_names:
+ setattr(LanginfoConfigure, key, ConstantInteger(key))
+
+ config.update(configure(LanginfoConfigure))
+
+# ____________________________________________________________
+
+config['_CONSTANTS'] = _CONSTANTS
+config['HAS_LANGINFO'] = HAS_LANGINFO
+dumpcache(__file__, '_locale_cache.py', config)
From arigo at codespeak.net Sat Mar 6 13:10:03 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:10:03 +0100 (CET)
Subject: [pypy-svn] r71856 -
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test
Message-ID: <20100306121003.010F95105F@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:10:01 2010
New Revision: 71856
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py
Log:
Fix test_locale to actually test our implementation,
not CPython's.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py Sat Mar 6 13:10:01 2010
@@ -1,5 +1,5 @@
import py
-import locale
+from pypy.lib import _locale
import sys
def setup_module(mod):
@@ -8,7 +8,7 @@
class TestLocale:
def setup_class(cls):
- cls.oldlocale = locale.setlocale(locale.LC_NUMERIC)
+ cls.oldlocale = _locale.setlocale(_locale.LC_NUMERIC)
if sys.platform.startswith("win"):
cls.tloc = "en"
elif sys.platform.startswith("freebsd"):
@@ -16,14 +16,15 @@
else:
cls.tloc = "en_US.UTF8"
try:
- locale.setlocale(locale.LC_NUMERIC, cls.tloc)
- except locale.Error:
+ _locale.setlocale(_locale.LC_NUMERIC, cls.tloc)
+ except _locale.Error:
py.test.skip("test locale %s not supported" % cls.tloc)
def teardown_class(cls):
- locale.setlocale(locale.LC_NUMERIC, cls.oldlocale)
+ _locale.setlocale(_locale.LC_NUMERIC, cls.oldlocale)
def test_format(self):
+ py.test.skip("XXX fix or kill me")
def testformat(formatstr, value, grouping = 0, output=None):
if output:
@@ -41,8 +42,11 @@
testformat("%20.f", -42, grouping=1, output=' -42')
testformat("%+10.f", -4200, grouping=1, output=' -4,200')
testformat("%-10.f", 4200, grouping=1, output='4,200 ')
- # Invoke getpreferredencoding to make sure it does not cause exceptions,
- locale.getpreferredencoding()
+
+ def test_getpreferredencoding(self):
+ py.test.skip("XXX fix or kill me")
+ # Invoke getpreferredencoding to make sure it does not cause exceptions
+ _locale.getpreferredencoding()
# Test BSD Rune locale's bug for isctype functions.
def test_bsd_bug(self):
@@ -51,8 +55,8 @@
result = getattr(s, method)()
assert result == output
- oldlocale = locale.setlocale(locale.LC_CTYPE)
- locale.setlocale(locale.LC_CTYPE, self.tloc)
+ oldlocale = _locale.setlocale(_locale.LC_CTYPE)
+ _locale.setlocale(_locale.LC_CTYPE, self.tloc)
try:
teststrop('\x20', 'isspace', True)
teststrop('\xa0', 'isspace', False)
@@ -66,4 +70,4 @@
teststrop('\xcc\x85', 'lower', '\xcc\x85')
teststrop('\xed\x95\xa0', 'upper', '\xed\x95\xa0')
finally:
- locale.setlocale(locale.LC_CTYPE, oldlocale)
+ _locale.setlocale(_locale.LC_CTYPE, oldlocale)
From arigo at codespeak.net Sat Mar 6 13:10:33 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:10:33 +0100 (CET)
Subject: [pypy-svn] r71857 - in
pypy/branch/ctypes-configure-cache-2/pypy/lib: . ctypes_config_cache
Message-ID: <20100306121033.4DCE35105F@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:10:31 2010
New Revision: 71857
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py
Log:
Fixes found by the previous test fix.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/_locale.py Sat Mar 6 13:10:31 2010
@@ -314,9 +314,8 @@
'setlocale', 'localeconv', 'strxfrm', 'strcoll',
'gettext', 'dgettext', 'dcgettext', 'textdomain',
'bindtextdomain', 'CHAR_MAX',
-) + _CONSTANTS + tuple(langinfo_names)
+) + ALL_CONSTANTS
if _bind_textdomain_codeset:
__all__ += ('bind_textdomain_codeset',)
if HAS_LANGINFO:
__all__ += ('nl_langinfo',)
-
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/locale.ctc.py Sat Mar 6 13:10:31 2010
@@ -10,7 +10,7 @@
# ____________________________________________________________
-_CONSTANTS = [
+_CONSTANTS = (
'LC_CTYPE',
'LC_NUMERIC',
'LC_TIME',
@@ -24,7 +24,7 @@
'LC_TELEPHONE',
'LC_MEASUREMENT',
'LC_IDENTIFICATION',
-]
+)
class LocaleConfigure:
_compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
@@ -55,9 +55,10 @@
setattr(LanginfoConfigure, key, ConstantInteger(key))
config.update(configure(LanginfoConfigure))
+ _CONSTANTS = _CONSTANTS + tuple(langinfo_names)
# ____________________________________________________________
-config['_CONSTANTS'] = _CONSTANTS
+config['ALL_CONSTANTS'] = _CONSTANTS
config['HAS_LANGINFO'] = HAS_LANGINFO
dumpcache(__file__, '_locale_cache.py', config)
From arigo at codespeak.net Sat Mar 6 13:17:50 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:17:50 +0100 (CET)
Subject: [pypy-svn] r71858 - in
pypy/branch/ctypes-configure-cache-2/pypy/lib: . ctypes_config_cache
Message-ID: <20100306121750.B03275105A@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:17:49 2010
New Revision: 71858
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/resource.ctc.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/resource.py
Log:
Update resource.py.
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/resource.ctc.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/resource.ctc.py Sat Mar 6 13:17:49 2010
@@ -0,0 +1,63 @@
+"""
+'ctypes_configure' source for resource.py.
+Run this to rebuild _resource_cache.py.
+"""
+
+import autopath
+
+from ctypes import sizeof
+from ctypes_configure.dumpcache import dumpcache
+from ctypes_configure.configure import (configure,
+ ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger,
+ SimpleType)
+
+
+_CONSTANTS = (
+ 'RLIM_INFINITY',
+ 'RLIM_NLIMITS',
+)
+_OPTIONAL_CONSTANTS = (
+ 'RLIMIT_CPU',
+ 'RLIMIT_FSIZE',
+ 'RLIMIT_DATA',
+ 'RLIMIT_STACK',
+ 'RLIMIT_CORE',
+ 'RLIMIT_RSS',
+ 'RLIMIT_NPROC',
+ 'RLIMIT_NOFILE',
+ 'RLIMIT_OFILE',
+ 'RLIMIT_MEMLOCK',
+ 'RLIMIT_AS',
+ 'RLIMIT_LOCKS',
+ 'RLIMIT_SIGPENDING',
+ 'RLIMIT_MSGQUEUE',
+ 'RLIMIT_NICE',
+ 'RLIMIT_RTPRIO',
+ 'RLIMIT_VMEM',
+
+ 'RUSAGE_BOTH',
+ 'RUSAGE_SELF',
+ 'RUSAGE_CHILDREN',
+)
+
+# Setup our configure
+class ResourceConfigure:
+ _compilation_info_ = ExternalCompilationInfo(includes=['sys/resource.h'])
+ rlim_t = SimpleType('rlim_t')
+for key in _CONSTANTS:
+ setattr(ResourceConfigure, key, ConstantInteger(key))
+for key in _OPTIONAL_CONSTANTS:
+ setattr(ResourceConfigure, key, DefinedConstantInteger(key))
+
+# Configure constants and types
+config = configure(ResourceConfigure)
+config['rlim_t_max'] = (1<<(sizeof(config['rlim_t']) * 8)) - 1
+optional_constants = []
+for key in _OPTIONAL_CONSTANTS:
+ if config[key] is not None:
+ optional_constants.append(key)
+ else:
+ del config[key]
+
+config['ALL_CONSTANTS'] = _CONSTANTS + tuple(optional_constants)
+dumpcache(__file__, '_resource_cache.py', config)
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/resource.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/resource.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/resource.py Sat Mar 6 13:17:49 2010
@@ -2,45 +2,18 @@
if sys.platform == 'win32':
raise ImportError('resource module not available for win32')
+# load the platform-specific cache made by running resource.ctc.py
+from ctypes_config_cache._resource_cache import *
+
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
from ctypes import Structure, c_int, c_long, byref, sizeof
from errno import EINVAL, EPERM
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger,
- SimpleType)
import _structseq
class error(Exception):
pass
-_CONSTANTS = (
- 'RLIM_INFINITY',
- 'RLIM_NLIMITS',
-)
-_OPTIONAL_CONSTANTS = (
- 'RLIMIT_CPU',
- 'RLIMIT_FSIZE',
- 'RLIMIT_DATA',
- 'RLIMIT_STACK',
- 'RLIMIT_CORE',
- 'RLIMIT_RSS',
- 'RLIMIT_NPROC',
- 'RLIMIT_NOFILE',
- 'RLIMIT_OFILE',
- 'RLIMIT_MEMLOCK',
- 'RLIMIT_AS',
- 'RLIMIT_LOCKS',
- 'RLIMIT_SIGPENDING',
- 'RLIMIT_MSGQUEUE',
- 'RLIMIT_NICE',
- 'RLIMIT_RTPRIO',
- 'RLIMIT_VMEM',
-
- 'RUSAGE_BOTH',
- 'RUSAGE_SELF',
- 'RUSAGE_CHILDREN',
-)
# Read required libc functions
_getrusage = libc.getrusage
@@ -52,27 +25,6 @@
from os import sysconf
_getpagesize = None
-# Setup our configure
-class ResourceConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/resource.h'])
- rlim_t = SimpleType('rlim_t')
-for key in _CONSTANTS:
- setattr(ResourceConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(ResourceConfigure, key, DefinedConstantInteger(key))
-
-# Configure constants and types
-config = configure(ResourceConfigure)
-rlim_t = config['rlim_t']
-sizeof_rlim_t = 1<<(sizeof(rlim_t) * 8)
-for key in _CONSTANTS:
- globals()[key] = config[key]
-optional_constants = []
-for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- globals()[key] = config[key]
- optional_constants.append(key)
-del config
class timeval(Structure):
_fields_ = (
@@ -126,9 +78,9 @@
ru_nivcsw = _structseq.structseqfield(15)
def rlimit_check_bounds(rlim_cur, rlim_max):
- if rlim_cur > sizeof_rlim_t:
+ if rlim_cur > rlim_t_max:
raise ValueError("%d does not fit into rlim_t" % rlim_cur)
- if rlim_max > sizeof_rlim_t:
+ if rlim_max > rlim_t_max:
raise ValueError("%d does not fit into rlim_t" % rlim_max)
class rlimit(Structure):
@@ -202,10 +154,9 @@
# Irix 5.3 has _SC_PAGESIZE, but not _SC_PAGE_SIZE
return sysconf("SC_PAGESIZE")
-__all__ = _CONSTANTS + tuple(optional_constants) + (
+__all__ = ALL_CONSTANTS + (
'error', 'timeval', 'struct_rusage', 'rlimit',
'getrusage', 'getrlimit', 'setrlimit', 'getpagesize',
)
-del optional_constants
-
+del ALL_CONSTANTS
From arigo at codespeak.net Sat Mar 6 13:29:52 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:29:52 +0100 (CET)
Subject: [pypy-svn] r71859 - in pypy/branch/ctypes-configure-cache-2/pypy:
lib/app_test lib/ctypes_config_cache translator/goal
Message-ID: <20100306122952.77C3851058@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:29:50 2010
New Revision: 71859
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_hashlib.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_resource.py
pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py
Log:
A tool to call all .ctc.py files to force a rebuild.
Call it in the respective tests and at the start of a translation.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_hashlib.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_hashlib.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_hashlib.py Sat Mar 6 13:29:50 2010
@@ -1,3 +1,6 @@
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('hashlib.ctc.py')
+
from pypy.lib import hashlib, _hashlib
def test_unicode():
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_locale.py Sat Mar 6 13:29:50 2010
@@ -1,7 +1,12 @@
import py
-from pypy.lib import _locale
import sys
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('locale.ctc.py')
+
+from pypy.lib import _locale
+
+
def setup_module(mod):
if sys.platform == 'darwin':
py.test.skip("Locale support on MacOSX is minimal and cannot be tested")
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_resource.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_resource.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_resource.py Sat Mar 6 13:29:50 2010
@@ -1,3 +1,6 @@
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('resource.ctc.py')
+
from pypy.lib import resource
def test_resource():
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py Sat Mar 6 13:29:50 2010
@@ -0,0 +1,27 @@
+#! /usr/bin/env python
+# Run this script to rebuild all caches from the *.ctc.py files.
+
+import autopath
+import os, sys
+
+_dirpath = os.path.dirname(__file__)
+
+
+def rebuild_one(name):
+ filename = os.path.join(_dirpath, name)
+ d = {'__file__': filename}
+ path = sys.path[:]
+ try:
+ sys.path.insert(0, _dirpath)
+ execfile(filename, d)
+ finally:
+ sys.path[:] = path
+
+def rebuild():
+ for p in os.listdir(_dirpath):
+ if p.endswith('.ctc.py'):
+ rebuild_one(p)
+
+
+if __name__ == '__main__':
+ rebuild()
Modified: pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py Sat Mar 6 13:29:50 2010
@@ -216,6 +216,9 @@
return PyPyJitPolicy()
def get_entry_point(self, config):
+ from pypy.lib.ctypes_config_cache import rebuild
+ rebuild.rebuild()
+
space = make_objspace(config)
# manually imports app_main.py
From arigo at codespeak.net Sat Mar 6 13:43:11 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:43:11 +0100 (CET)
Subject: [pypy-svn] r71860 - in
pypy/branch/ctypes-configure-cache-2/ctypes_configure: . test
Message-ID: <20100306124311.EA3B551058@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:43:10 2010
New Revision: 71860
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
Log:
Support simple arrays, like "c_int*5".
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py Sat Mar 6 13:43:10 2010
@@ -16,9 +16,6 @@
f.write("%s = %d\n" % (key, val))
elif val is None:
f.write("%s = None\n" % key)
- elif isinstance(val, ctypes._SimpleCData.__class__):
- # a simple type
- f.write("%s = %s\n" % (key, ctypes_repr(val)))
elif isinstance(val, ctypes.Structure.__class__):
f.write("class %s(ctypes.Structure):\n" % key)
f.write(" _fields_ = [\n")
@@ -31,12 +28,16 @@
"lists of integers or strings only"
f.write("%s = %r\n" % (key, val))
else:
- raise NotImplementedError("Saving of %r" % (val,))
+ # a simple type, hopefully
+ f.write("%s = %s\n" % (key, ctypes_repr(val)))
f.close()
print 'Wrote %s.' % (filename,)
def ctypes_repr(cls):
# ctypes_configure does not support nested structs so far
# so let's ignore it
- assert isinstance(cls, ctypes._SimpleCData.__class__)
- return "ctypes." + cls.__name__
+ if isinstance(cls, ctypes._SimpleCData.__class__):
+ return "ctypes." + cls.__name__
+ if hasattr(cls, '_length_') and hasattr(cls, '_type_'): # assume an array
+ return '%d * %s' % (cls._length_, ctypes_repr(cls._type_))
+ raise NotImplementedError("saving of object with type %r" % type(cls))
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py Sat Mar 6 13:43:10 2010
@@ -1,3 +1,4 @@
+import ctypes
from ctypes_configure import configure, dumpcache
from ctypes_configure.cbuild import ExternalCompilationInfo
@@ -37,3 +38,14 @@
assert d['undef'] == res['undef']
assert d['large'] == res['large']
assert d['XUZ'] == res['XUZ']
+
+
+def test_cache_array():
+ configdir = configure.configdir
+ res = {'foo': ctypes.c_short * 27}
+ cachefile = configdir.join('cache_array')
+ dumpcache.dumpcache('', str(cachefile), res)
+ #
+ d = {}
+ execfile(str(cachefile), d)
+ assert d['foo'] == res['foo']
From arigo at codespeak.net Sat Mar 6 13:44:43 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:44:43 +0100 (CET)
Subject: [pypy-svn] r71861 - in
pypy/branch/ctypes-configure-cache-2/pypy/lib: . app_test
ctypes_config_cache ctypes_config_cache/test
Message-ID: <20100306124443.9B60F51058@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:44:41 2010
New Revision: 71861
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/pyexpat.ctc.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_pyexpat.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/pyexpat.py
Log:
Update pyexpat.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_pyexpat.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_pyexpat.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_pyexpat.py Sat Mar 6 13:44:41 2010
@@ -4,6 +4,9 @@
import StringIO, sys
import unittest, py
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('pyexpat.ctc.py')
+
from pypy.lib import pyexpat
#from xml.parsers import expat
expat = pyexpat
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/pyexpat.ctc.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/pyexpat.ctc.py Sat Mar 6 13:44:41 2010
@@ -0,0 +1,45 @@
+"""
+'ctypes_configure' source for pyexpat.py.
+Run this to rebuild _pyexpat_cache.py.
+"""
+
+import autopath
+import ctypes
+from ctypes import c_char_p, c_int, c_void_p, c_char
+from ctypes_configure import configure, dumpcache
+
+
+class CConfigure:
+ _compilation_info_ = configure.ExternalCompilationInfo(
+ includes = ['expat.h'],
+ libraries = ['expat'],
+ pre_include_lines = [
+ '#define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION)'],
+ )
+
+ XML_Char = configure.SimpleType('XML_Char', c_char)
+ XML_COMBINED_VERSION = configure.ConstantInteger('XML_COMBINED_VERSION')
+ for name in ['XML_PARAM_ENTITY_PARSING_NEVER',
+ 'XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE',
+ 'XML_PARAM_ENTITY_PARSING_ALWAYS']:
+ locals()[name] = configure.ConstantInteger(name)
+
+ XML_Encoding = configure.Struct('XML_Encoding',[
+ ('data', c_void_p),
+ ('convert', c_void_p),
+ ('release', c_void_p),
+ ('map', c_int * 256)])
+ XML_Content = configure.Struct('XML_Content',[
+ ('numchildren', c_int),
+ ('children', c_void_p),
+ ('name', c_char_p),
+ ('type', c_int),
+ ('quant', c_int),
+ ])
+ # this is insanely stupid
+ XML_FALSE = configure.ConstantInteger('XML_FALSE')
+ XML_TRUE = configure.ConstantInteger('XML_TRUE')
+
+config = configure.configure(CConfigure)
+
+dumpcache.dumpcache(__file__, '_pyexpat_cache.py', config)
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/test/test_cache.py Sat Mar 6 13:44:41 2010
@@ -30,3 +30,11 @@
def test_hashlib():
d = run('hashlib.ctc.py', '_hashlib_cache.py')
assert hasattr(d['EVP_MD_CTX'], 'digest')
+
+def test_resource():
+ d = run('resource.ctc.py', '_resource_cache.py')
+ assert 'RLIM_NLIMITS' in d
+
+def test_pyexpat():
+ d = run('pyexpat.ctc.py', '_pyexpat_cache.py')
+ assert 'XML_COMBINED_VERSION' in d
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/pyexpat.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/pyexpat.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/pyexpat.py Sat Mar 6 13:44:41 2010
@@ -1,46 +1,15 @@
import ctypes
import ctypes.util
-from ctypes_configure import configure
from ctypes import c_char_p, c_int, c_void_p, POINTER, c_char, c_wchar_p
import sys
+# load the platform-specific cache made by running pyexpat.ctc.py
+from ctypes_config_cache._pyexpat_cache import *
+
+
lib = ctypes.CDLL(ctypes.util.find_library('expat'))
-class CConfigure:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes = ['expat.h'],
- libraries = ['expat'],
- pre_include_lines = [
- '#define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION)'],
- )
-
- XML_Char = configure.SimpleType('XML_Char', ctypes.c_char)
- XML_COMBINED_VERSION = configure.ConstantInteger('XML_COMBINED_VERSION')
- for name in ['XML_PARAM_ENTITY_PARSING_NEVER',
- 'XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE',
- 'XML_PARAM_ENTITY_PARSING_ALWAYS']:
- locals()[name] = configure.ConstantInteger(name)
-
- XML_Encoding = configure.Struct('XML_Encoding',[
- ('data', c_void_p),
- ('convert', c_void_p),
- ('release', c_void_p),
- ('map', c_int * 256)])
- XML_Content = configure.Struct('XML_Content',[
- ('numchildren', c_int),
- ('children', c_void_p),
- ('name', c_char_p),
- ('type', c_int),
- ('quant', c_int),
- ])
- # this is insanely stupid
- XML_FALSE = configure.ConstantInteger('XML_FALSE')
- XML_TRUE = configure.ConstantInteger('XML_TRUE')
-
-info = configure.configure(CConfigure)
-for k, v in info.items():
- globals()[k] = v
XML_Content.children = POINTER(XML_Content)
XML_Parser = ctypes.c_void_p # an opaque pointer
From arigo at codespeak.net Sat Mar 6 13:58:33 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 13:58:33 +0100 (CET)
Subject: [pypy-svn] r71862 - in
pypy/branch/ctypes-configure-cache-2/ctypes_configure: . test
Message-ID: <20100306125833.1ED6051058@codespeak.net>
Author: arigo
Date: Sat Mar 6 13:58:27 2010
New Revision: 71862
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
Log:
Write the multiplication in the other order.
Fixes an obscure test (it would be ok for this test
to fail, but not give a wrong result).
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py Sat Mar 6 13:58:27 2010
@@ -39,5 +39,5 @@
if isinstance(cls, ctypes._SimpleCData.__class__):
return "ctypes." + cls.__name__
if hasattr(cls, '_length_') and hasattr(cls, '_type_'): # assume an array
- return '%d * %s' % (cls._length_, ctypes_repr(cls._type_))
+ return '%s*%d' % (ctypes_repr(cls._type_), cls._length_)
raise NotImplementedError("saving of object with type %r" % type(cls))
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py Sat Mar 6 13:58:27 2010
@@ -49,3 +49,13 @@
d = {}
execfile(str(cachefile), d)
assert d['foo'] == res['foo']
+
+def test_cache_array_array():
+ configdir = configure.configdir
+ res = {'foo': (ctypes.c_int * 2) * 3}
+ cachefile = configdir.join('cache_array_array')
+ dumpcache.dumpcache('', str(cachefile), res)
+ #
+ d = {}
+ execfile(str(cachefile), d)
+ assert d['foo'] == res['foo']
From arigo at codespeak.net Sat Mar 6 14:10:40 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 14:10:40 +0100 (CET)
Subject: [pypy-svn] r71863 - in pypy/branch/ctypes-configure-cache-2/pypy:
lib/ctypes_config_cache translator/goal
Message-ID: <20100306131040.28A8A51058@codespeak.net>
Author: arigo
Date: Sat Mar 6 14:10:38 2010
New Revision: 71863
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py
Log:
Pass a log file in which to report errors, but don't stop.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py Sat Mar 6 14:10:38 2010
@@ -17,10 +17,18 @@
finally:
sys.path[:] = path
-def rebuild():
+def rebuild(log=None):
for p in os.listdir(_dirpath):
if p.endswith('.ctc.py'):
- rebuild_one(p)
+ try:
+ rebuild_one(p)
+ except Exception, e:
+ if log is None:
+ raise
+ else:
+ log.ERROR("Running %s:\n %s: %s" % (
+ os.path.join(_dirpath, p),
+ e.__class__.__name__, e))
if __name__ == '__main__':
Modified: pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py Sat Mar 6 14:10:38 2010
@@ -217,7 +217,8 @@
def get_entry_point(self, config):
from pypy.lib.ctypes_config_cache import rebuild
- rebuild.rebuild()
+ import translate
+ rebuild.rebuild(translate.log)
space = make_objspace(config)
From arigo at codespeak.net Sat Mar 6 14:16:28 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 14:16:28 +0100 (CET)
Subject: [pypy-svn] r71864 - in pypy/branch/ctypes-configure-cache-2/pypy:
lib/ctypes_config_cache translator/goal
Message-ID: <20100306131628.215C451058@codespeak.net>
Author: arigo
Date: Sat Mar 6 14:16:27 2010
New Revision: 71864
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py
Log:
Tweaks.
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py Sat Mar 6 14:16:27 2010
@@ -3,9 +3,14 @@
import autopath
import os, sys
+import py
_dirpath = os.path.dirname(__file__)
+from pypy.tool.ansi_print import ansi_log
+log = py.log.Producer("ctypes_config_cache")
+py.log.setconsumer("ctypes_config_cache", ansi_log)
+
def rebuild_one(name):
filename = os.path.join(_dirpath, name)
@@ -17,19 +22,20 @@
finally:
sys.path[:] = path
-def rebuild(log=None):
+def try_rebuild():
+ for p in os.listdir(_dirpath):
+ if p.startswith('_') and (p.endswith('_cache.py') or
+ p.endswith('_cache.pyc')):
+ os.unlink(os.path.join(_dirpath, p))
for p in os.listdir(_dirpath):
if p.endswith('.ctc.py'):
try:
rebuild_one(p)
except Exception, e:
- if log is None:
- raise
- else:
- log.ERROR("Running %s:\n %s: %s" % (
- os.path.join(_dirpath, p),
- e.__class__.__name__, e))
+ log.ERROR("Running %s:\n %s: %s" % (
+ os.path.join(_dirpath, p),
+ e.__class__.__name__, e))
if __name__ == '__main__':
- rebuild()
+ try_rebuild()
Modified: pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/translator/goal/targetpypystandalone.py Sat Mar 6 14:16:27 2010
@@ -217,8 +217,7 @@
def get_entry_point(self, config):
from pypy.lib.ctypes_config_cache import rebuild
- import translate
- rebuild.rebuild(translate.log)
+ rebuild.try_rebuild()
space = make_objspace(config)
From arigo at codespeak.net Sat Mar 6 14:22:28 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Sat, 6 Mar 2010 14:22:28 +0100 (CET)
Subject: [pypy-svn] r71865 - in
pypy/branch/ctypes-configure-cache-2/pypy/lib: . app_test
ctypes_config_cache
Message-ID: <20100306132228.1ACCE51058@codespeak.net>
Author: arigo
Date: Sat Mar 6 14:22:27 2010
New Revision: 71865
Added:
pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_syslog.py (contents, props changed)
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py
pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py
Log:
Test and fix.
Added: pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_syslog.py
==============================================================================
--- (empty file)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_syslog.py Sat Mar 6 14:22:27 2010
@@ -0,0 +1,11 @@
+
+# XXX very minimal test
+
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('syslog.ctc.py')
+
+from pypy.lib import syslog
+
+
+def test_syslog():
+ assert hasattr(syslog, 'LOG_ALERT')
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/syslog.ctc.py Sat Mar 6 14:22:27 2010
@@ -64,17 +64,13 @@
setattr(SyslogConfigure, key, DefinedConstantInteger(key))
config = configure(SyslogConfigure)
-optional_constants = []
for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- optional_constants.append(key)
- else:
+ if config[key] is None:
del config[key]
for alias, key in _ALIAS:
- if alias in optional_constants:
- continue
- config[alias] = config[key]
- optional_constants.append(alias)
+ config.setdefault(alias, config[key])
-config['optional_constants'] = optional_constants
+all_constants = config.keys()
+all_constants.sort()
+config['ALL_CONSTANTS'] = tuple(all_constants)
dumpcache(__file__, '_syslog_cache.py', config)
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/syslog.py Sat Mar 6 14:22:27 2010
@@ -56,9 +56,8 @@
def LOG_UPTO(pri):
return (1 << (pri + 1)) - 1
-__all__ = _CONSTANTS + tuple(optional_constants) + (
+__all__ = ALL_CONSTANTS + (
'openlog', 'syslog', 'closelog', 'setlogmask',
'LOG_MASK', 'LOG_UPTO')
-del optional_constants
-
+del ALL_CONSTANTS
From fijal at codespeak.net Sat Mar 6 18:13:39 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Sat, 6 Mar 2010 18:13:39 +0100 (CET)
Subject: [pypy-svn] r71867 - pypy/benchmarks
Message-ID: <20100306171339.C38EC51058@codespeak.net>
Author: fijal
Date: Sat Mar 6 18:13:37 2010
New Revision: 71867
Modified:
pypy/benchmarks/benchmarks.py
Log:
Fix the scaling of iterations to previous number
Modified: pypy/benchmarks/benchmarks.py
==============================================================================
--- pypy/benchmarks/benchmarks.py (original)
+++ pypy/benchmarks/benchmarks.py Sat Mar 6 18:13:37 2010
@@ -23,6 +23,8 @@
number = float(line.split(" ")[0])
if name == 'tcp':
return 100*1024*1024/number
+ elif name == 'iteration':
+ return 10000/number
else:
return 100/number
bm_path = relative('own', 'twisted', name + '.py')
From dan at codespeak.net Sat Mar 6 21:03:17 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Sat, 6 Mar 2010 21:03:17 +0100 (CET)
Subject: [pypy-svn] r71868 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100306200317.AB98A5105A@codespeak.net>
Author: dan
Date: Sat Mar 6 21:02:19 2010
New Revision: 71868
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Added basic sdarray setitem testing, fixed an obvious error in implementation.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Sat Mar 6 21:02:19 2010
@@ -4,6 +4,8 @@
from pypy.interpreter.gateway import interp2app
from pypy.rlib.debug import make_sure_not_resized
+from pypy.objspace.std.sliceobject import W_SliceObject
+
from pypy.module.micronumpy.array import BaseNumArray
from pypy.module.micronumpy.array import base_typedef
from pypy.module.micronumpy.array import \
@@ -156,8 +158,9 @@
def descr_getitem(self, w_index):
space = self.space
if space.is_true(space.isinstance(w_index, space.w_slice)):
+ assert isinstance(w_index, W_SliceObject)
start, stop, step, slen = w_index.indices4(space, self.len())
- res = sdresult(self.dtype.code)(space, slen, self.dtype)
+ res = NumArray(space, slen, self.dtype)
if step == 1:
res.storage[:] = self.storage[start:stop]
else:
@@ -170,7 +173,7 @@
index = space.int_w(w_index)
except TypeError, e:
raise OperationError(space.w_IndexError,
- space.wrap('Wrong index'))
+ space.wrap("index must either be an int or a sequence"))
try:
return space.wrap(self.storage[index])
except IndexError:
@@ -181,6 +184,7 @@
def descr_setitem(self, w_index, w_value):
space = self.space
if space.is_true(space.isinstance(w_index, space.w_slice)):
+ assert isinstance(w_index, W_SliceObject)
start, stop, step, slen = w_index.indices4(space, self.len())
try:
space.iter(w_value)
@@ -196,8 +200,8 @@
for i in range(start, stop, step):
self.storage[i] = value
return
- lop = space.int_w(space.len(w_value))
- if lop != slen:
+ operand_length = space.int_w(space.len(w_value))
+ if operand_length != slen:
raise OperationError(space.w_TypeError,
space.wrap('shape mismatch'))
value = space.fixedview(w_value)
@@ -212,11 +216,16 @@
else:
try:
index = space.int_w(w_index)
- except TypeError, e:
- raise OperationError(space.w_IndexError,
- space.wrap('Wrong index'))
+ except OperationError, e:
+ if e.match(space, space.w_TypeError):
+ raise OperationError(space.w_ValueError,
+ space.wrap("can't understand index")) #FIXME: more meaningful message based on type
try:
self.storage[index] = coerce(space, w_value)
+ except OperationError, e:
+ if e.match(space, space.w_TypeError):
+ raise OperationError(space.w_ValueError,
+ space.wrap("can't understand value")) #FIXME: more meaningful message based on type
except IndexError:
raise OperationError(space.w_IndexError,
space.wrap("list index out of range"))
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Sat Mar 6 21:02:19 2010
@@ -139,11 +139,13 @@
def test_setitem_getitem(self):
from numpy import zeros
+ compare = self.compare
+
ar = zeros(8, dtype=int)
assert ar[0] == 0
ar[1] = 3
assert ar[1] == 3
- raises((TypeError, ValueError), ar.__getitem__, 'xyz')
+ raises((TypeError, ValueError), ar.__getitem__, 'xyz') #FIXME: why TypeError?
raises(IndexError, ar.__getitem__, 38)
assert ar[-2] == 0
assert ar[-7] == 3
@@ -151,11 +153,17 @@
ar[2:3] = [5]
assert ar[2] == 5
- compare = self.compare
assert compare(ar[1:3], [3, 5])
assert compare(ar[-6:-4], [5, 0])
assert compare(ar[-6:-8:-1], [5, 3])
+ #setitem
+ ar[3] = 2
+ assert ar[3] == 2
+ ar[5] = 3.5
+ assert ar[5] == 3
+ raises(ValueError, ar.__setitem__, 0, [99])
+ raises(ValueError, ar.__setitem__, 0, 'f')
def test_minimum(self):
from numpy import zeros, minimum
From arigo at codespeak.net Mon Mar 8 10:32:08 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 10:32:08 +0100 (CET)
Subject: [pypy-svn] r71869 - in pypy/trunk/pypy/module/imp: . test
Message-ID: <20100308093208.D0D4E51054@codespeak.net>
Author: arigo
Date: Mon Mar 8 10:32:07 2010
New Revision: 71869
Modified:
pypy/trunk/pypy/module/imp/importing.py
pypy/trunk/pypy/module/imp/test/test_import.py
Log:
Remove the special-casing of mtime=0, which was bogus anyway
because the stream's position would not be advanced past the
modification time stored in the .pyc.
Modified: pypy/trunk/pypy/module/imp/importing.py
==============================================================================
--- pypy/trunk/pypy/module/imp/importing.py (original)
+++ pypy/trunk/pypy/module/imp/importing.py Mon Mar 8 10:32:07 2010
@@ -647,9 +647,9 @@
d = x & 0xff
stream.write(chr(a) + chr(b) + chr(c) + chr(d))
-def check_compiled_module(space, pycfilename, expected_mtime=0):
+def check_compiled_module(space, pycfilename, expected_mtime):
"""
- Check if a pyc file's magic number and (optionally) mtime match.
+ Check if a pyc file's magic number and mtime match.
"""
stream = None
try:
@@ -658,11 +658,10 @@
if magic != get_pyc_magic(space):
stream.close()
return None
- if expected_mtime != 0:
- pyc_mtime = _r_long(stream)
- if pyc_mtime != expected_mtime:
- stream.close()
- return None
+ pyc_mtime = _r_long(stream)
+ if pyc_mtime != expected_mtime:
+ stream.close()
+ return None
return stream
except StreamErrors:
if stream:
Modified: pypy/trunk/pypy/module/imp/test/test_import.py
==============================================================================
--- pypy/trunk/pypy/module/imp/test/test_import.py (original)
+++ pypy/trunk/pypy/module/imp/test/test_import.py Mon Mar 8 10:32:07 2010
@@ -496,6 +496,12 @@
cpathname,
mtime+1)
assert ret is None
+
+ # also check with expected mtime==0 (nothing special any more about 0)
+ ret = importing.check_compiled_module(space,
+ cpathname,
+ 0)
+ assert ret is None
os.remove(cpathname)
# check for wrong version
From arigo at codespeak.net Mon Mar 8 10:32:31 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 10:32:31 +0100 (CET)
Subject: [pypy-svn] r71870 - in pypy/trunk/pypy/translator/sandbox: . test
Message-ID: <20100308093231.68AE451054@codespeak.net>
Author: arigo
Date: Mon Mar 8 10:32:29 2010
New Revision: 71870
Modified:
pypy/trunk/pypy/translator/sandbox/pypy_interact.py
pypy/trunk/pypy/translator/sandbox/test/test_pypy_interact.py
pypy/trunk/pypy/translator/sandbox/test/test_vfs.py
pypy/trunk/pypy/translator/sandbox/vfs.py
Log:
In sandboxing mode, don't deliver .pyc files.
The .py files only are enough, and the .pyc files
were not considered anyway because the .py files
had a mtime of 0. (Which caused troubles because
of the bug fixed in r71869.)
Modified: pypy/trunk/pypy/translator/sandbox/pypy_interact.py
==============================================================================
--- pypy/trunk/pypy/translator/sandbox/pypy_interact.py (original)
+++ pypy/trunk/pypy/translator/sandbox/pypy_interact.py Mon Mar 8 10:32:29 2010
@@ -45,18 +45,21 @@
# * can access its own executable
# * can access the pure Python libraries
# * can access the temporary usession directory as /tmp
+ exclude = ['.pyc', '.pyo']
if self.tmpdir is None:
tmpdirnode = Dir({})
else:
- tmpdirnode = RealDir(self.tmpdir)
+ tmpdirnode = RealDir(self.tmpdir, exclude=exclude)
pypydist = os.path.dirname(os.path.abspath(autopath.pypydir))
return Dir({
'bin': Dir({
'pypy-c': RealFile(self.executable),
- 'lib-python': RealDir(os.path.join(pypydist, 'lib-python')),
+ 'lib-python': RealDir(os.path.join(pypydist, 'lib-python'),
+ exclude=exclude),
'pypy': Dir({
- 'lib': RealDir(os.path.join(pypydist, 'pypy', 'lib')),
+ 'lib': RealDir(os.path.join(pypydist, 'pypy', 'lib'),
+ exclude=exclude),
}),
}),
'tmp': tmpdirnode,
Modified: pypy/trunk/pypy/translator/sandbox/test/test_pypy_interact.py
==============================================================================
--- pypy/trunk/pypy/translator/sandbox/test/test_pypy_interact.py (original)
+++ pypy/trunk/pypy/translator/sandbox/test/test_pypy_interact.py Mon Mar 8 10:32:29 2010
@@ -36,6 +36,12 @@
assert_(False, "os.stat('site') should have failed")
st = os.stat('/bin/lib-python/modified-2.5.2/site.py')
assert_(stat.S_ISREG(st.st_mode), "bad st_mode for .../site.py")
+ try:
+ os.stat('/bin/lib-python/modified-2.5.2/site.pyc')
+ except OSError:
+ pass
+ else:
+ assert_(False, "os.stat('....pyc') should have failed")
fd = os.open('/bin/lib-python/modified-2.5.2/site.py', os.O_RDONLY, 0666)
length = 8192
ofs = 0
Modified: pypy/trunk/pypy/translator/sandbox/test/test_vfs.py
==============================================================================
--- pypy/trunk/pypy/translator/sandbox/test/test_vfs.py (original)
+++ pypy/trunk/pypy/translator/sandbox/test/test_vfs.py Mon Mar 8 10:32:29 2010
@@ -90,3 +90,19 @@
else:
py.test.raises(OSError, v_test_vfs.join, '.hidden')
py.test.raises(OSError, v_test_vfs.join, '.subdir2')
+
+def test_realdir_exclude():
+ xdir = udir.ensure('test_realdir_exclude', dir=1)
+ xdir.ensure('test_realdir_exclude.yes')
+ xdir.ensure('test_realdir_exclude.no')
+ v_udir = RealDir(str(udir), exclude=['.no'])
+ v_xdir = v_udir.join('test_realdir_exclude')
+ assert 'test_realdir_exclude.yes' in v_xdir.keys()
+ assert 'test_realdir_exclude.no' not in v_xdir.keys()
+ v_xdir.join('test_realdir_exclude.yes') # works
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.no')
+ # Windows and Mac tests, for the case
+ py.test.raises(OSError, v_xdir.join, 'Test_RealDir_Exclude.no')
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.No')
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.nO')
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.NO')
Modified: pypy/trunk/pypy/translator/sandbox/vfs.py
==============================================================================
--- pypy/trunk/pypy/translator/sandbox/vfs.py (original)
+++ pypy/trunk/pypy/translator/sandbox/vfs.py Mon Mar 8 10:32:29 2010
@@ -64,21 +64,30 @@
# with '.' simply don't exist. If follow_links=True, then symlinks are
# transparently followed (they look like a regular file or directory to
# the sandboxed process). If follow_links=False, the subprocess is
- # not allowed to access them at all.
- def __init__(self, path, show_dotfiles=False, follow_links=False):
+ # not allowed to access them at all. Finally, exclude is a list of
+ # file endings that we filter out (note that we also filter out files
+ # with the same ending but a different case, to be safe).
+ def __init__(self, path, show_dotfiles=False, follow_links=False,
+ exclude=[]):
self.path = path
self.show_dotfiles = show_dotfiles
self.follow_links = follow_links
+ self.exclude = [excl.lower() for excl in exclude]
def __repr__(self):
return '' % (self.path,)
def keys(self):
names = os.listdir(self.path)
if not self.show_dotfiles:
names = [name for name in names if not name.startswith('.')]
+ for excl in self.exclude:
+ names = [name for name in names if not name.lower().endswith(excl)]
return names
def join(self, name):
if name.startswith('.') and not self.show_dotfiles:
raise OSError(errno.ENOENT, name)
+ for excl in self.exclude:
+ if name.lower().endswith(excl):
+ raise OSError(errno.ENOENT, name)
path = os.path.join(self.path, name)
if self.follow_links:
st = os.stat(path)
@@ -86,7 +95,8 @@
st = os.lstat(path)
if stat.S_ISDIR(st.st_mode):
return RealDir(path, show_dotfiles = self.show_dotfiles,
- follow_links = self.follow_links)
+ follow_links = self.follow_links,
+ exclude = self.exclude)
elif stat.S_ISREG(st.st_mode):
return RealFile(path)
else:
From arigo at codespeak.net Mon Mar 8 10:57:11 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 10:57:11 +0100 (CET)
Subject: [pypy-svn] r71871 - pypy/trunk/pypy/translator/goal
Message-ID: <20100308095711.1C0F251054@codespeak.net>
Author: arigo
Date: Mon Mar 8 10:57:09 2010
New Revision: 71871
Modified:
pypy/trunk/pypy/translator/goal/targetpypystandalone.py
Log:
Following cfbolz's suggestion, disable pyc files handling
altogether in pypy-c-sandbox translations.
Modified: pypy/trunk/pypy/translator/goal/targetpypystandalone.py
==============================================================================
--- pypy/trunk/pypy/translator/goal/targetpypystandalone.py (original)
+++ pypy/trunk/pypy/translator/goal/targetpypystandalone.py Mon Mar 8 10:57:09 2010
@@ -186,6 +186,10 @@
#elif config.objspace.usemodules.clr:
# config.translation.backend == "cli"
+ if config.translation.sandbox:
+ config.objspace.lonepycfiles = False
+ config.objspace.usepycfiles = False
+
config.objspace.nofaking = True
config.objspace.compiler = "ast"
config.translating = True
From arigo at codespeak.net Mon Mar 8 10:58:40 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 10:58:40 +0100 (CET)
Subject: [pypy-svn] r71872 -
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache
Message-ID: <20100308095840.C8DC351054@codespeak.net>
Author: arigo
Date: Mon Mar 8 10:58:39 2010
New Revision: 71872
Modified:
pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
Log:
Fix when running "python rebuild.py".
Modified: pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py (original)
+++ pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/rebuild.py Mon Mar 8 10:58:39 2010
@@ -5,7 +5,7 @@
import os, sys
import py
-_dirpath = os.path.dirname(__file__)
+_dirpath = os.path.dirname(__file__) or os.curdir
from pypy.tool.ansi_print import ansi_log
log = py.log.Producer("ctypes_config_cache")
From arigo at codespeak.net Mon Mar 8 11:03:08 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 11:03:08 +0100 (CET)
Subject: [pypy-svn] r71873 - in pypy/trunk: ctypes_configure
ctypes_configure/test pypy/lib pypy/lib/app_test
pypy/lib/ctypes_config_cache
pypy/lib/ctypes_config_cache/test pypy/translator/goal
Message-ID: <20100308100308.909A551054@codespeak.net>
Author: arigo
Date: Mon Mar 8 11:03:06 2010
New Revision: 71873
Added:
pypy/trunk/ctypes_configure/dumpcache.py
- copied unchanged from r71872, pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
pypy/trunk/ctypes_configure/test/test_dumpcache.py
- copied unchanged from r71872, pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
pypy/trunk/pypy/lib/app_test/test_syslog.py
- copied unchanged from r71872, pypy/branch/ctypes-configure-cache-2/pypy/lib/app_test/test_syslog.py
pypy/trunk/pypy/lib/ctypes_config_cache/ (props changed)
- copied from r71872, pypy/branch/ctypes-configure-cache-2/pypy/lib/ctypes_config_cache/
Removed:
pypy/trunk/pypy/lib/ctypes_configure
Modified:
pypy/trunk/ctypes_configure/cbuild.py
pypy/trunk/ctypes_configure/configure.py
pypy/trunk/pypy/lib/_hashlib.py
pypy/trunk/pypy/lib/_locale.py
pypy/trunk/pypy/lib/app_test/test_hashlib.py
pypy/trunk/pypy/lib/app_test/test_locale.py
pypy/trunk/pypy/lib/app_test/test_pyexpat.py
pypy/trunk/pypy/lib/app_test/test_resource.py
pypy/trunk/pypy/lib/ctypes_config_cache/test/ (props changed)
pypy/trunk/pypy/lib/pyexpat.py
pypy/trunk/pypy/lib/resource.py
pypy/trunk/pypy/lib/syslog.py
pypy/trunk/pypy/translator/goal/targetpypystandalone.py
Log:
Merge branch/ctypes-configure-cache-2.
Remove the app-level usage of ctypes_configure, and replace it with
precomputing and caching the dependency information. It should remove
the need for a C compiler to exist at pypy-c run-time.
Modified: pypy/trunk/ctypes_configure/cbuild.py
==============================================================================
--- pypy/trunk/ctypes_configure/cbuild.py (original)
+++ pypy/trunk/ctypes_configure/cbuild.py Mon Mar 8 11:03:06 2010
@@ -5,7 +5,7 @@
debug = 0
-configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure')
+configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure-')
class ExternalCompilationInfo(object):
Modified: pypy/trunk/ctypes_configure/configure.py
==============================================================================
--- pypy/trunk/ctypes_configure/configure.py (original)
+++ pypy/trunk/ctypes_configure/configure.py Mon Mar 8 11:03:06 2010
@@ -164,7 +164,7 @@
for key in dir(CConfig):
value = getattr(CConfig, key)
if isinstance(value, CConfigEntry):
- entries.append((key, value))
+ entries.append((key, value))
if entries: # can be empty if there are only CConfigSingleEntries
writer = _CWriter(CConfig)
@@ -201,7 +201,6 @@
writer = _CWriter(CConfig)
writer.write_header()
res[key] = value.question(writer.ask_gcc)
-
return res
# ____________________________________________________________
@@ -210,7 +209,6 @@
class CConfigEntry(object):
"Abstract base class."
-
class Struct(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined structure.
@@ -313,7 +311,6 @@
S.__name__ = name
return S
-
class SimpleType(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined simple numeric type.
@@ -350,7 +347,6 @@
ctype = fixup_ctype(ctype, self.name, (size, sign))
return ctype
-
class ConstantInteger(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined integer constant.
Modified: pypy/trunk/pypy/lib/_hashlib.py
==============================================================================
--- pypy/trunk/pypy/lib/_hashlib.py (original)
+++ pypy/trunk/pypy/lib/_hashlib.py Mon Mar 8 11:03:06 2010
@@ -1,6 +1,8 @@
from ctypes import *
import ctypes.util
-from ctypes_configure import configure
+
+# load the platform-specific cache made by running hashlib.ctc.py
+from ctypes_config_cache._hashlib_cache import *
# Note: OpenSSL on OS X only provides md5 and sha1
libpath = ctypes.util.find_library('ssl')
@@ -16,18 +18,6 @@
else:
return buffer(x)[:]
-class CConfig:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes=['openssl/evp.h'],
- )
- EVP_MD = configure.Struct('EVP_MD',
- [])
- EVP_MD_CTX = configure.Struct('EVP_MD_CTX',
- [('digest', c_void_p)])
-c = configure.configure(CConfig)
-EVP_MD_CTX = c['EVP_MD_CTX']
-EVP_MD = c['EVP_MD']
-
def patch_fields(fields):
res = []
for k, v in fields:
@@ -39,7 +29,6 @@
class EVP_MD_CTX(Structure):
_fields_ = patch_fields(EVP_MD_CTX._fields_)
-del c
# OpenSSL initialization
lib.OpenSSL_add_all_digests()
Modified: pypy/trunk/pypy/lib/_locale.py
==============================================================================
--- pypy/trunk/pypy/lib/_locale.py (original)
+++ pypy/trunk/pypy/lib/_locale.py Mon Mar 8 11:03:06 2010
@@ -7,48 +7,16 @@
c_ubyte, c_int, c_char_p, c_wchar_p)
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
-from ctypes_configure.configure import (configure, ExternalCompilationInfo,
- ConstantInteger, DefinedConstantInteger, SimpleType)
+
+# load the platform-specific cache made by running locale.ctc.py
+from ctypes_config_cache._locale_cache import *
+
size_t = c_int
# XXX check where this comes from
CHAR_MAX = 127
-_CONSTANTS = (
- 'LC_CTYPE',
- 'LC_NUMERIC',
- 'LC_TIME',
- 'LC_COLLATE',
- 'LC_MONETARY',
- 'LC_MESSAGES',
- 'LC_ALL',
- 'LC_PAPER',
- 'LC_NAME',
- 'LC_ADDRESS',
- 'LC_TELEPHONE',
- 'LC_MEASUREMENT',
- 'LC_IDENTIFICATION',
-)
-
-class LocaleConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
-for key in _CONSTANTS:
- setattr(LocaleConfigure, key, ConstantInteger(key))
-
-try:
- locale_config = configure(LocaleConfigure, noerr=True)
-except Exception, e:
- # should probably be moved into configure()
- # as an optional feature
- raise ImportError("%s: %s" % (e.__class__, e))
-
-for key in _CONSTANTS:
- globals()[key] = locale_config[key]
-del LocaleConfigure
-del locale_config
-
-HAS_LANGINFO = True
# Ubuntu Gusty i386 structure
class lconv(Structure):
@@ -288,29 +256,6 @@
raise NotImplementedError()
if HAS_LANGINFO:
- # this is incomplete list
- langinfo_names = ('CODESET D_T_FMT D_FMT T_FMT RADIXCHAR THOUSEP '
- 'YESEXPR NOEXPR CRNCYSTR').split(" ")
- for i in range(1, 8):
- langinfo_names.append("DAY_%d" % i)
- langinfo_names.append("ABDAY_%d" % i)
- for i in range(1, 13):
- langinfo_names.append("MON_%d" % i)
- langinfo_names.append("ABMON_%d" % i)
-
- class LanginfoConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
- nl_item = SimpleType('nl_item')
- for key in langinfo_names:
- setattr(LanginfoConfigure, key, ConstantInteger(key))
-
- config = configure(LanginfoConfigure)
- nl_item = config['nl_item']
- for key in langinfo_names:
- globals()[key] = config[key]
- del LanginfoConfigure
- del config
-
_nl_langinfo = libc.nl_langinfo
_nl_langinfo.argtypes = (nl_item,)
_nl_langinfo.restype = c_char_p
@@ -369,9 +314,8 @@
'setlocale', 'localeconv', 'strxfrm', 'strcoll',
'gettext', 'dgettext', 'dcgettext', 'textdomain',
'bindtextdomain', 'CHAR_MAX',
-) + _CONSTANTS + tuple(langinfo_names)
+) + ALL_CONSTANTS
if _bind_textdomain_codeset:
__all__ += ('bind_textdomain_codeset',)
if HAS_LANGINFO:
__all__ += ('nl_langinfo',)
-
Modified: pypy/trunk/pypy/lib/app_test/test_hashlib.py
==============================================================================
--- pypy/trunk/pypy/lib/app_test/test_hashlib.py (original)
+++ pypy/trunk/pypy/lib/app_test/test_hashlib.py Mon Mar 8 11:03:06 2010
@@ -1,3 +1,6 @@
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('hashlib.ctc.py')
+
from pypy.lib import hashlib, _hashlib
def test_unicode():
Modified: pypy/trunk/pypy/lib/app_test/test_locale.py
==============================================================================
--- pypy/trunk/pypy/lib/app_test/test_locale.py (original)
+++ pypy/trunk/pypy/lib/app_test/test_locale.py Mon Mar 8 11:03:06 2010
@@ -1,14 +1,19 @@
import py
-import locale
import sys
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('locale.ctc.py')
+
+from pypy.lib import _locale
+
+
def setup_module(mod):
if sys.platform == 'darwin':
py.test.skip("Locale support on MacOSX is minimal and cannot be tested")
class TestLocale:
def setup_class(cls):
- cls.oldlocale = locale.setlocale(locale.LC_NUMERIC)
+ cls.oldlocale = _locale.setlocale(_locale.LC_NUMERIC)
if sys.platform.startswith("win"):
cls.tloc = "en"
elif sys.platform.startswith("freebsd"):
@@ -16,14 +21,15 @@
else:
cls.tloc = "en_US.UTF8"
try:
- locale.setlocale(locale.LC_NUMERIC, cls.tloc)
- except locale.Error:
+ _locale.setlocale(_locale.LC_NUMERIC, cls.tloc)
+ except _locale.Error:
py.test.skip("test locale %s not supported" % cls.tloc)
def teardown_class(cls):
- locale.setlocale(locale.LC_NUMERIC, cls.oldlocale)
+ _locale.setlocale(_locale.LC_NUMERIC, cls.oldlocale)
def test_format(self):
+ py.test.skip("XXX fix or kill me")
def testformat(formatstr, value, grouping = 0, output=None):
if output:
@@ -41,8 +47,11 @@
testformat("%20.f", -42, grouping=1, output=' -42')
testformat("%+10.f", -4200, grouping=1, output=' -4,200')
testformat("%-10.f", 4200, grouping=1, output='4,200 ')
- # Invoke getpreferredencoding to make sure it does not cause exceptions,
- locale.getpreferredencoding()
+
+ def test_getpreferredencoding(self):
+ py.test.skip("XXX fix or kill me")
+ # Invoke getpreferredencoding to make sure it does not cause exceptions
+ _locale.getpreferredencoding()
# Test BSD Rune locale's bug for isctype functions.
def test_bsd_bug(self):
@@ -51,8 +60,8 @@
result = getattr(s, method)()
assert result == output
- oldlocale = locale.setlocale(locale.LC_CTYPE)
- locale.setlocale(locale.LC_CTYPE, self.tloc)
+ oldlocale = _locale.setlocale(_locale.LC_CTYPE)
+ _locale.setlocale(_locale.LC_CTYPE, self.tloc)
try:
teststrop('\x20', 'isspace', True)
teststrop('\xa0', 'isspace', False)
@@ -66,4 +75,4 @@
teststrop('\xcc\x85', 'lower', '\xcc\x85')
teststrop('\xed\x95\xa0', 'upper', '\xed\x95\xa0')
finally:
- locale.setlocale(locale.LC_CTYPE, oldlocale)
+ _locale.setlocale(_locale.LC_CTYPE, oldlocale)
Modified: pypy/trunk/pypy/lib/app_test/test_pyexpat.py
==============================================================================
--- pypy/trunk/pypy/lib/app_test/test_pyexpat.py (original)
+++ pypy/trunk/pypy/lib/app_test/test_pyexpat.py Mon Mar 8 11:03:06 2010
@@ -4,6 +4,9 @@
import StringIO, sys
import unittest, py
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('pyexpat.ctc.py')
+
from pypy.lib import pyexpat
#from xml.parsers import expat
expat = pyexpat
Modified: pypy/trunk/pypy/lib/app_test/test_resource.py
==============================================================================
--- pypy/trunk/pypy/lib/app_test/test_resource.py (original)
+++ pypy/trunk/pypy/lib/app_test/test_resource.py Mon Mar 8 11:03:06 2010
@@ -1,3 +1,6 @@
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('resource.ctc.py')
+
from pypy.lib import resource
def test_resource():
Modified: pypy/trunk/pypy/lib/pyexpat.py
==============================================================================
--- pypy/trunk/pypy/lib/pyexpat.py (original)
+++ pypy/trunk/pypy/lib/pyexpat.py Mon Mar 8 11:03:06 2010
@@ -1,46 +1,15 @@
import ctypes
import ctypes.util
-from ctypes_configure import configure
from ctypes import c_char_p, c_int, c_void_p, POINTER, c_char, c_wchar_p
import sys
+# load the platform-specific cache made by running pyexpat.ctc.py
+from ctypes_config_cache._pyexpat_cache import *
+
+
lib = ctypes.CDLL(ctypes.util.find_library('expat'))
-class CConfigure:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes = ['expat.h'],
- libraries = ['expat'],
- pre_include_lines = [
- '#define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION)'],
- )
-
- XML_Char = configure.SimpleType('XML_Char', ctypes.c_char)
- XML_COMBINED_VERSION = configure.ConstantInteger('XML_COMBINED_VERSION')
- for name in ['XML_PARAM_ENTITY_PARSING_NEVER',
- 'XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE',
- 'XML_PARAM_ENTITY_PARSING_ALWAYS']:
- locals()[name] = configure.ConstantInteger(name)
-
- XML_Encoding = configure.Struct('XML_Encoding',[
- ('data', c_void_p),
- ('convert', c_void_p),
- ('release', c_void_p),
- ('map', c_int * 256)])
- XML_Content = configure.Struct('XML_Content',[
- ('numchildren', c_int),
- ('children', c_void_p),
- ('name', c_char_p),
- ('type', c_int),
- ('quant', c_int),
- ])
- # this is insanely stupid
- XML_FALSE = configure.ConstantInteger('XML_FALSE')
- XML_TRUE = configure.ConstantInteger('XML_TRUE')
-
-info = configure.configure(CConfigure)
-for k, v in info.items():
- globals()[k] = v
XML_Content.children = POINTER(XML_Content)
XML_Parser = ctypes.c_void_p # an opaque pointer
Modified: pypy/trunk/pypy/lib/resource.py
==============================================================================
--- pypy/trunk/pypy/lib/resource.py (original)
+++ pypy/trunk/pypy/lib/resource.py Mon Mar 8 11:03:06 2010
@@ -2,45 +2,18 @@
if sys.platform == 'win32':
raise ImportError('resource module not available for win32')
+# load the platform-specific cache made by running resource.ctc.py
+from ctypes_config_cache._resource_cache import *
+
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
from ctypes import Structure, c_int, c_long, byref, sizeof
from errno import EINVAL, EPERM
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger,
- SimpleType)
import _structseq
class error(Exception):
pass
-_CONSTANTS = (
- 'RLIM_INFINITY',
- 'RLIM_NLIMITS',
-)
-_OPTIONAL_CONSTANTS = (
- 'RLIMIT_CPU',
- 'RLIMIT_FSIZE',
- 'RLIMIT_DATA',
- 'RLIMIT_STACK',
- 'RLIMIT_CORE',
- 'RLIMIT_RSS',
- 'RLIMIT_NPROC',
- 'RLIMIT_NOFILE',
- 'RLIMIT_OFILE',
- 'RLIMIT_MEMLOCK',
- 'RLIMIT_AS',
- 'RLIMIT_LOCKS',
- 'RLIMIT_SIGPENDING',
- 'RLIMIT_MSGQUEUE',
- 'RLIMIT_NICE',
- 'RLIMIT_RTPRIO',
- 'RLIMIT_VMEM',
-
- 'RUSAGE_BOTH',
- 'RUSAGE_SELF',
- 'RUSAGE_CHILDREN',
-)
# Read required libc functions
_getrusage = libc.getrusage
@@ -52,27 +25,6 @@
from os import sysconf
_getpagesize = None
-# Setup our configure
-class ResourceConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/resource.h'])
- rlim_t = SimpleType('rlim_t')
-for key in _CONSTANTS:
- setattr(ResourceConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(ResourceConfigure, key, DefinedConstantInteger(key))
-
-# Configure constants and types
-config = configure(ResourceConfigure)
-rlim_t = config['rlim_t']
-sizeof_rlim_t = 1<<(sizeof(rlim_t) * 8)
-for key in _CONSTANTS:
- globals()[key] = config[key]
-optional_constants = []
-for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- globals()[key] = config[key]
- optional_constants.append(key)
-del config
class timeval(Structure):
_fields_ = (
@@ -126,9 +78,9 @@
ru_nivcsw = _structseq.structseqfield(15)
def rlimit_check_bounds(rlim_cur, rlim_max):
- if rlim_cur > sizeof_rlim_t:
+ if rlim_cur > rlim_t_max:
raise ValueError("%d does not fit into rlim_t" % rlim_cur)
- if rlim_max > sizeof_rlim_t:
+ if rlim_max > rlim_t_max:
raise ValueError("%d does not fit into rlim_t" % rlim_max)
class rlimit(Structure):
@@ -202,10 +154,9 @@
# Irix 5.3 has _SC_PAGESIZE, but not _SC_PAGE_SIZE
return sysconf("SC_PAGESIZE")
-__all__ = _CONSTANTS + tuple(optional_constants) + (
+__all__ = ALL_CONSTANTS + (
'error', 'timeval', 'struct_rusage', 'rlimit',
'getrusage', 'getrlimit', 'setrlimit', 'getpagesize',
)
-del optional_constants
-
+del ALL_CONSTANTS
Modified: pypy/trunk/pypy/lib/syslog.py
==============================================================================
--- pypy/trunk/pypy/lib/syslog.py (original)
+++ pypy/trunk/pypy/lib/syslog.py Mon Mar 8 11:03:06 2010
@@ -9,79 +9,11 @@
if sys.platform == 'win32':
raise ImportError("No syslog on Windows")
+# load the platform-specific cache made by running syslog.ctc.py
+from ctypes_config_cache._syslog_cache import *
+
from ctypes_support import standard_c_lib as libc
from ctypes import c_int, c_char_p
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
-
-_CONSTANTS = (
- 'LOG_EMERG',
- 'LOG_ALERT',
- 'LOG_CRIT',
- 'LOG_ERR',
- 'LOG_WARNING',
- 'LOG_NOTICE',
- 'LOG_INFO',
- 'LOG_DEBUG',
-
- 'LOG_PID',
- 'LOG_CONS',
- 'LOG_NDELAY',
-
- 'LOG_KERN',
- 'LOG_USER',
- 'LOG_MAIL',
- 'LOG_DAEMON',
- 'LOG_AUTH',
- 'LOG_LPR',
- 'LOG_LOCAL0',
- 'LOG_LOCAL1',
- 'LOG_LOCAL2',
- 'LOG_LOCAL3',
- 'LOG_LOCAL4',
- 'LOG_LOCAL5',
- 'LOG_LOCAL6',
- 'LOG_LOCAL7',
-)
-_OPTIONAL_CONSTANTS = (
- 'LOG_NOWAIT',
- 'LOG_PERROR',
-
- 'LOG_SYSLOG',
- 'LOG_CRON',
- 'LOG_UUCP',
- 'LOG_NEWS',
-)
-
-# Constant aliases if there are not defined
-_ALIAS = (
- ('LOG_SYSLOG', 'LOG_DAEMON'),
- ('LOG_CRON', 'LOG_DAEMON'),
- ('LOG_NEWS', 'LOG_MAIL'),
- ('LOG_UUCP', 'LOG_MAIL'),
-)
-
-class SyslogConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/syslog.h'])
-for key in _CONSTANTS:
- setattr(SyslogConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(SyslogConfigure, key, DefinedConstantInteger(key))
-
-config = configure(SyslogConfigure)
-for key in _CONSTANTS:
- globals()[key] = config[key]
-optional_constants = []
-for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- globals()[key] = config[key]
- optional_constants.append(key)
-for alias, key in _ALIAS:
- if alias in optional_constants:
- continue
- globals()[alias] = globals()[key]
- optional_constants.append(alias)
-del config
# Real prototype is:
# void syslog(int priority, const char *format, ...);
@@ -124,9 +56,8 @@
def LOG_UPTO(pri):
return (1 << (pri + 1)) - 1
-__all__ = _CONSTANTS + tuple(optional_constants) + (
+__all__ = ALL_CONSTANTS + (
'openlog', 'syslog', 'closelog', 'setlogmask',
'LOG_MASK', 'LOG_UPTO')
-del optional_constants
-
+del ALL_CONSTANTS
Modified: pypy/trunk/pypy/translator/goal/targetpypystandalone.py
==============================================================================
--- pypy/trunk/pypy/translator/goal/targetpypystandalone.py (original)
+++ pypy/trunk/pypy/translator/goal/targetpypystandalone.py Mon Mar 8 11:03:06 2010
@@ -220,6 +220,9 @@
return PyPyJitPolicy()
def get_entry_point(self, config):
+ from pypy.lib.ctypes_config_cache import rebuild
+ rebuild.try_rebuild()
+
space = make_objspace(config)
# manually imports app_main.py
From antocuni at codespeak.net Mon Mar 8 12:01:31 2010
From: antocuni at codespeak.net (antocuni at codespeak.net)
Date: Mon, 8 Mar 2010 12:01:31 +0100 (CET)
Subject: [pypy-svn] r71874 - pypy/extradoc/talk/pycon-italy-2010
Message-ID: <20100308110131.4BC9051056@codespeak.net>
Author: antocuni
Date: Mon Mar 8 12:01:30 2010
New Revision: 71874
Added:
pypy/extradoc/talk/pycon-italy-2010/
pypy/extradoc/talk/pycon-italy-2010/abstract.txt (contents, props changed)
Log:
abstract for my talk at pycon italy
Added: pypy/extradoc/talk/pycon-italy-2010/abstract.txt
==============================================================================
--- (empty file)
+++ pypy/extradoc/talk/pycon-italy-2010/abstract.txt Mon Mar 8 12:01:30 2010
@@ -0,0 +1,14 @@
+PyPy 1.2: snakes never crawled so fast
+======================================
+
+PyPy 1.2 has been recently released: the highlight of the new version is on
+the new JIT compiler, which can hugely increase the performances of Python
+programs.
+
+In this talk we explain how the JIT compiler is implemented, and most
+importantly how it works from the point of view of the user: in particular, we
+see which kind of programs can benefit most from the presence of the JIT.
+
+Finally, we present a way to integrate PyPy into existing applications based
+on CPython, to gradually make the performance critical parts to be executed by
+PyPy and get its benefits already now.
From antocuni at codespeak.net Mon Mar 8 12:16:10 2010
From: antocuni at codespeak.net (antocuni at codespeak.net)
Date: Mon, 8 Mar 2010 12:16:10 +0100 (CET)
Subject: [pypy-svn] r71875 - pypy/extradoc/talk/pycon-italy-2010
Message-ID: <20100308111610.6AE5A5105A@codespeak.net>
Author: antocuni
Date: Mon Mar 8 12:16:09 2010
New Revision: 71875
Modified:
pypy/extradoc/talk/pycon-italy-2010/abstract.txt
Log:
add the italian translation
Modified: pypy/extradoc/talk/pycon-italy-2010/abstract.txt
==============================================================================
--- pypy/extradoc/talk/pycon-italy-2010/abstract.txt (original)
+++ pypy/extradoc/talk/pycon-italy-2010/abstract.txt Mon Mar 8 12:16:09 2010
@@ -12,3 +12,22 @@
Finally, we present a way to integrate PyPy into existing applications based
on CPython, to gradually make the performance critical parts to be executed by
PyPy and get its benefits already now.
+
+
+
+Italian translation
+-------------------
+
+PyPy 1.2 ? stato da poco rilasciato: la caratteristica saliente dalla nuova
+versione ? il nuovo compilatore JIT, che pu? incrementare notevolmente le
+prestazione dei programmi in Python.
+
+In questo talk, spiegheremo come il compilatore JIT ? implementato e, aspetto
+pi? importante, come funziona dal punto di vista dell'utente: in particolare,
+vedremo quali tipi di programma possono trarre i maggiori benefici dalla
+presenza del JIT.
+
+Infine, presenteremo un modo per integrare PyPy all'interno applicazioni gi?
+esistenti basate su CPython, per far s? che gradualmente le parti pi? critiche
+per le prestazioni siano eseguite da PyPy, in modo da poter godere dei suoi
+benefici fin da subito.
From arigo at codespeak.net Mon Mar 8 12:38:11 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 12:38:11 +0100 (CET)
Subject: [pypy-svn] r71876 - pypy/branch/jit-constptr
Message-ID: <20100308113811.2099B51054@codespeak.net>
Author: arigo
Date: Mon Mar 8 12:38:09 2010
New Revision: 71876
Added:
pypy/branch/jit-constptr/
- copied from r71875, pypy/trunk/
Log:
A branch in which to support the x86 backend using directly ConstPtrs.
Requires a bit of support from the GC to be able to fix the addresses
written in the assembler when the objects move.
From arigo at codespeak.net Mon Mar 8 14:07:34 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 14:07:34 +0100 (CET)
Subject: [pypy-svn] r71877 - pypy/branch/ctypes-configure-cache-2
Message-ID: <20100308130734.3BB7351054@codespeak.net>
Author: arigo
Date: Mon Mar 8 14:07:33 2010
New Revision: 71877
Removed:
pypy/branch/ctypes-configure-cache-2/
Log:
Remove merged branch.
From arigo at codespeak.net Mon Mar 8 14:07:48 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 14:07:48 +0100 (CET)
Subject: [pypy-svn] r71878 - pypy/branch/ctypes-configure-cache
Message-ID: <20100308130748.EC39E51054@codespeak.net>
Author: arigo
Date: Mon Mar 8 14:07:47 2010
New Revision: 71878
Removed:
pypy/branch/ctypes-configure-cache/
Log:
Remove branch merged in the branch that was merged in trunk
From arigo at codespeak.net Mon Mar 8 16:22:16 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 16:22:16 +0100 (CET)
Subject: [pypy-svn] r71885 - in pypy/branch/jit-constptr/pypy:
jit/backend/llsupport jit/backend/llsupport/test
jit/backend/x86 jit/backend/x86/test rpython/memory/gc
rpython/memory/gctransform
Message-ID: <20100308152216.7354951054@codespeak.net>
Author: arigo
Date: Mon Mar 8 16:22:14 2010
New Revision: 71885
Added:
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py
- copied, changed from r71876, pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py
Modified:
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py
pypy/branch/jit-constptr/pypy/jit/backend/x86/runner.py
pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py
pypy/branch/jit-constptr/pypy/rpython/memory/gc/base.py
pypy/branch/jit-constptr/pypy/rpython/memory/gctransform/framework.py
Log:
In-progress. Adds a hook in the GC, called before and after tracing of
some kinds of objects (more precisely, the arrays with GcRefs in the
varsized part, and which are not just GcArrays).
Start using the hook from the JIT. See test_GcRefHandler.
The goal is to correct the addresses of objects, or of individual
fields inside these objects, that are hard-coded in assembler.
Modified: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py Mon Mar 8 16:22:14 2010
@@ -1,20 +1,8 @@
-from pypy.rlib import rgc
-from pypy.rlib.objectmodel import we_are_translated
-from pypy.rlib.debug import fatalerror
-from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rclass, rstr
-from pypy.rpython.lltypesystem.lloperation import llop
-from pypy.rpython.annlowlevel import llhelper
-from pypy.translator.tool.cbuild import ExternalCompilationInfo
-from pypy.jit.metainterp.history import BoxInt, BoxPtr, ConstInt, ConstPtr
-from pypy.jit.metainterp.history import AbstractDescr
-from pypy.jit.metainterp.resoperation import ResOperation, rop
+from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rstr
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.backend.llsupport.symbolic import WORD
from pypy.jit.backend.llsupport.descr import BaseSizeDescr, BaseArrayDescr
-from pypy.jit.backend.llsupport.descr import GcCache, get_field_descr
-from pypy.jit.backend.llsupport.descr import GcPtrFieldDescr
-from pypy.jit.backend.llsupport.descr import get_call_descr
-from pypy.rlib.rarithmetic import r_ulonglong, r_uint
+from pypy.jit.backend.llsupport.descr import GcCache
# ____________________________________________________________
@@ -121,480 +109,11 @@
get_funcptr_for_newstr = None
get_funcptr_for_newunicode = None
-
# ____________________________________________________________
-# All code below is for the hybrid GC
-
-
-class GcRefList:
- """Handles all references from the generated assembler to GC objects.
- This is implemented as a nonmovable, but GC, list; the assembler contains
- code that will (for now) always read from this list."""
-
- GCREF_LIST = lltype.GcArray(llmemory.GCREF) # followed by the GC
-
- HASHTABLE = rffi.CArray(llmemory.Address) # ignored by the GC
- HASHTABLE_BITS = 10
- HASHTABLE_SIZE = 1 << HASHTABLE_BITS
-
- def initialize(self):
- if we_are_translated(): n = 2000
- else: n = 10 # tests only
- self.list = self.alloc_gcref_list(n)
- self.nextindex = 0
- self.oldlists = []
- # A pseudo dictionary: it is fixed size, and it may contain
- # random nonsense after a collection moved the objects. It is only
- # used to avoid too many duplications in the GCREF_LISTs.
- self.hashtable = lltype.malloc(self.HASHTABLE,
- self.HASHTABLE_SIZE+1,
- flavor='raw')
- dummy = lltype.direct_ptradd(lltype.direct_arrayitems(self.hashtable),
- self.HASHTABLE_SIZE)
- dummy = llmemory.cast_ptr_to_adr(dummy)
- for i in range(self.HASHTABLE_SIZE+1):
- self.hashtable[i] = dummy
-
- def alloc_gcref_list(self, n):
- # Important: the GRREF_LISTs allocated are *non-movable*. This
- # requires support in the gc (only the hybrid GC supports it so far).
- if we_are_translated():
- list = rgc.malloc_nonmovable(self.GCREF_LIST, n)
- assert list, "malloc_nonmovable failed!"
- else:
- list = lltype.malloc(self.GCREF_LIST, n) # for tests only
- return list
-
- def get_address_of_gcref(self, gcref):
- assert lltype.typeOf(gcref) == llmemory.GCREF
- # first look in the hashtable, using an inexact hash (fails after
- # the object moves)
- addr = llmemory.cast_ptr_to_adr(gcref)
- hash = llmemory.cast_adr_to_int(addr)
- hash -= hash >> self.HASHTABLE_BITS
- hash &= self.HASHTABLE_SIZE - 1
- addr_ref = self.hashtable[hash]
- # the following test is safe anyway, because the addresses found
- # in the hashtable are always the addresses of nonmovable stuff
- # ('addr_ref' is an address inside self.list, not directly the
- # address of a real moving GC object -- that's 'addr_ref.address[0]'.)
- if addr_ref.address[0] == addr:
- return addr_ref
- # if it fails, add an entry to the list
- if self.nextindex == len(self.list):
- # reallocate first, increasing a bit the size every time
- self.oldlists.append(self.list)
- self.list = self.alloc_gcref_list(len(self.list) // 4 * 5)
- self.nextindex = 0
- # add it
- index = self.nextindex
- self.list[index] = gcref
- addr_ref = lltype.direct_ptradd(lltype.direct_arrayitems(self.list),
- index)
- addr_ref = llmemory.cast_ptr_to_adr(addr_ref)
- self.nextindex = index + 1
- # record it in the hashtable
- self.hashtable[hash] = addr_ref
- return addr_ref
-
-
-class GcRootMap_asmgcc:
- """Handles locating the stack roots in the assembler.
- This is the class supporting --gcrootfinder=asmgcc.
- """
- LOC_REG = 0
- LOC_ESP_PLUS = 1
- LOC_EBP_PLUS = 2
- LOC_EBP_MINUS = 3
-
- GCMAP_ARRAY = rffi.CArray(llmemory.Address)
- CALLSHAPE_ARRAY = rffi.CArray(rffi.UCHAR)
-
- def __init__(self):
- self._gcmap = lltype.nullptr(self.GCMAP_ARRAY)
- self._gcmap_curlength = 0
- self._gcmap_maxlength = 0
-
- def initialize(self):
- # hack hack hack. Remove these lines and see MissingRTypeAttribute
- # when the rtyper tries to annotate these methods only when GC-ing...
- self.gcmapstart()
- self.gcmapend()
-
- def gcmapstart(self):
- return llmemory.cast_ptr_to_adr(self._gcmap)
-
- def gcmapend(self):
- addr = self.gcmapstart()
- if self._gcmap_curlength:
- addr += llmemory.sizeof(llmemory.Address)*self._gcmap_curlength
- return addr
-
- def put(self, retaddr, callshapeaddr):
- """'retaddr' is the address just after the CALL.
- 'callshapeaddr' is the address returned by encode_callshape()."""
- index = self._gcmap_curlength
- if index + 2 > self._gcmap_maxlength:
- self._enlarge_gcmap()
- self._gcmap[index] = retaddr
- self._gcmap[index+1] = callshapeaddr
- self._gcmap_curlength = index + 2
-
- def _enlarge_gcmap(self):
- newlength = 250 + self._gcmap_maxlength * 2
- newgcmap = lltype.malloc(self.GCMAP_ARRAY, newlength, flavor='raw')
- oldgcmap = self._gcmap
- for i in range(self._gcmap_curlength):
- newgcmap[i] = oldgcmap[i]
- self._gcmap = newgcmap
- self._gcmap_maxlength = newlength
- if oldgcmap:
- lltype.free(oldgcmap, flavor='raw')
-
- def get_basic_shape(self):
- return [chr(self.LOC_EBP_PLUS | 4), # return addr: at 4(%ebp)
- chr(self.LOC_EBP_MINUS | 4), # saved %ebx: at -4(%ebp)
- chr(self.LOC_EBP_MINUS | 8), # saved %esi: at -8(%ebp)
- chr(self.LOC_EBP_MINUS | 12), # saved %edi: at -12(%ebp)
- chr(self.LOC_EBP_PLUS | 0), # saved %ebp: at (%ebp)
- chr(0)]
-
- def _encode_num(self, shape, number):
- assert number >= 0
- flag = 0
- while number >= 0x80:
- shape.append(chr((number & 0x7F) | flag))
- flag = 0x80
- number >>= 7
- shape.append(chr(number | flag))
-
- def add_ebp_offset(self, shape, offset):
- assert (offset & 3) == 0
- if offset >= 0:
- num = self.LOC_EBP_PLUS | offset
- else:
- num = self.LOC_EBP_MINUS | (-offset)
- self._encode_num(shape, num)
-
- def add_ebx(self, shape):
- shape.append(chr(self.LOC_REG | 4))
- def add_esi(self, shape):
- shape.append(chr(self.LOC_REG | 8))
-
- def add_edi(self, shape):
- shape.append(chr(self.LOC_REG | 12))
-
- def add_ebp(self, shape):
- shape.append(chr(self.LOC_REG | 16))
-
- def compress_callshape(self, shape):
- # Similar to compress_callshape() in trackgcroot.py.
- # XXX so far, we always allocate a new small array (we could regroup
- # them inside bigger arrays) and we never try to share them.
- length = len(shape)
- compressed = lltype.malloc(self.CALLSHAPE_ARRAY, length,
- flavor='raw')
- for i in range(length):
- compressed[length-1-i] = rffi.cast(rffi.UCHAR, shape[i])
- return llmemory.cast_ptr_to_adr(compressed)
-
-
-class WriteBarrierDescr(AbstractDescr):
- def __init__(self, gc_ll_descr):
- self.llop1 = gc_ll_descr.llop1
- self.WB_FUNCPTR = gc_ll_descr.WB_FUNCPTR
- self.fielddescr_tid = get_field_descr(gc_ll_descr,
- gc_ll_descr.GCClass.HDR, 'tid')
- self.jit_wb_if_flag = gc_ll_descr.GCClass.JIT_WB_IF_FLAG
- # if convenient for the backend, we also compute the info about
- # the flag as (byte-offset, single-byte-flag).
- import struct
- value = struct.pack("i", self.jit_wb_if_flag)
- assert value.count('\x00') == len(value) - 1 # only one byte is != 0
- i = 0
- while value[i] == '\x00': i += 1
- self.jit_wb_if_flag_byteofs = i
- self.jit_wb_if_flag_singlebyte = struct.unpack('b', value[i])[0]
-
- def get_write_barrier_fn(self, cpu):
- llop1 = self.llop1
- funcptr = llop1.get_write_barrier_failing_case(self.WB_FUNCPTR)
- funcaddr = llmemory.cast_ptr_to_adr(funcptr)
- return cpu.cast_adr_to_int(funcaddr)
-
-
-class GcLLDescr_framework(GcLLDescription):
-
- def __init__(self, gcdescr, translator, llop1=llop):
- from pypy.rpython.memory.gctypelayout import _check_typeid
- from pypy.rpython.memory.gcheader import GCHeaderBuilder
- from pypy.rpython.memory.gctransform import framework
- GcLLDescription.__init__(self, gcdescr, translator)
- assert self.translate_support_code, "required with the framework GC"
- self.translator = translator
- self.llop1 = llop1
-
- # we need the hybrid GC for GcRefList.alloc_gcref_list() to work
- if gcdescr.config.translation.gc != 'hybrid':
- raise NotImplementedError("--gc=%s not implemented with the JIT" %
- (gcdescr.config.translation.gc,))
-
- # to find roots in the assembler, make a GcRootMap
- name = gcdescr.config.translation.gcrootfinder
- try:
- cls = globals()['GcRootMap_' + name]
- except KeyError:
- raise NotImplementedError("--gcrootfinder=%s not implemented"
- " with the JIT" % (name,))
- gcrootmap = cls()
- self.gcrootmap = gcrootmap
- self.gcrefs = GcRefList()
- self.single_gcref_descr = GcPtrFieldDescr(0)
-
- # make a TransformerLayoutBuilder and save it on the translator
- # where it can be fished and reused by the FrameworkGCTransformer
- self.layoutbuilder = framework.TransformerLayoutBuilder(translator)
- self.layoutbuilder.delay_encoding()
- self.translator._jit2gc = {
- 'layoutbuilder': self.layoutbuilder,
- 'gcmapstart': lambda: gcrootmap.gcmapstart(),
- 'gcmapend': lambda: gcrootmap.gcmapend(),
- }
- self.GCClass = self.layoutbuilder.GCClass
- self.moving_gc = self.GCClass.moving_gc
- self.HDRPTR = lltype.Ptr(self.GCClass.HDR)
- self.gcheaderbuilder = GCHeaderBuilder(self.HDRPTR.TO)
- (self.array_basesize, _, self.array_length_ofs) = \
- symbolic.get_array_token(lltype.GcArray(lltype.Signed), True)
- min_ns = self.GCClass.TRANSLATION_PARAMS['min_nursery_size']
- self.max_size_of_young_obj = self.GCClass.get_young_fixedsize(min_ns)
-
- # make a malloc function, with three arguments
- def malloc_basic(size, tid):
- type_id = llop.extract_ushort(rffi.USHORT, tid)
- has_finalizer = bool(tid & (1<<16))
- _check_typeid(type_id)
- try:
- res = llop1.do_malloc_fixedsize_clear(llmemory.GCREF,
- type_id, size, True,
- has_finalizer, False)
- except MemoryError:
- fatalerror("out of memory (from JITted code)")
- res = lltype.nullptr(llmemory.GCREF.TO)
- #llop.debug_print(lltype.Void, "\tmalloc_basic", size, type_id,
- # "-->", res)
- return res
- self.malloc_basic = malloc_basic
- self.GC_MALLOC_BASIC = lltype.Ptr(lltype.FuncType(
- [lltype.Signed, lltype.Signed], llmemory.GCREF))
- self.WB_FUNCPTR = lltype.Ptr(lltype.FuncType(
- [llmemory.Address, llmemory.Address], lltype.Void))
- self.write_barrier_descr = WriteBarrierDescr(self)
- #
- def malloc_array(itemsize, tid, num_elem):
- type_id = llop.extract_ushort(rffi.USHORT, tid)
- _check_typeid(type_id)
- try:
- return llop1.do_malloc_varsize_clear(
- llmemory.GCREF,
- type_id, num_elem, self.array_basesize, itemsize,
- self.array_length_ofs, True)
- except MemoryError:
- fatalerror("out of memory (from JITted code)")
- return lltype.nullptr(llmemory.GCREF.TO)
- self.malloc_array = malloc_array
- self.GC_MALLOC_ARRAY = lltype.Ptr(lltype.FuncType(
- [lltype.Signed] * 3, llmemory.GCREF))
- #
- (str_basesize, str_itemsize, str_ofs_length
- ) = symbolic.get_array_token(rstr.STR, True)
- (unicode_basesize, unicode_itemsize, unicode_ofs_length
- ) = symbolic.get_array_token(rstr.UNICODE, True)
- str_type_id = self.layoutbuilder.get_type_id(rstr.STR)
- unicode_type_id = self.layoutbuilder.get_type_id(rstr.UNICODE)
- #
- def malloc_str(length):
- try:
- return llop1.do_malloc_varsize_clear(
- llmemory.GCREF,
- str_type_id, length, str_basesize, str_itemsize,
- str_ofs_length, True)
- except MemoryError:
- fatalerror("out of memory (from JITted code)")
- return lltype.nullptr(llmemory.GCREF.TO)
- def malloc_unicode(length):
- try:
- return llop1.do_malloc_varsize_clear(
- llmemory.GCREF,
- unicode_type_id, length, unicode_basesize,unicode_itemsize,
- unicode_ofs_length, True)
- except MemoryError:
- fatalerror("out of memory (from JITted code)")
- return lltype.nullptr(llmemory.GCREF.TO)
- self.malloc_str = malloc_str
- self.malloc_unicode = malloc_unicode
- self.GC_MALLOC_STR_UNICODE = lltype.Ptr(lltype.FuncType(
- [lltype.Signed], llmemory.GCREF))
- def malloc_fixedsize_slowpath(size):
- try:
- gcref = llop1.do_malloc_fixedsize_clear(llmemory.GCREF,
- 0, size, True, False, False)
- except MemoryError:
- fatalerror("out of memory (from JITted code)")
- return r_ulonglong(0)
- res = rffi.cast(lltype.Signed, gcref)
- nurs_free = llop1.gc_adr_of_nursery_free(llmemory.Address).signed[0]
- return r_ulonglong(nurs_free) << 32 | r_ulonglong(r_uint(res))
- self.malloc_fixedsize_slowpath = malloc_fixedsize_slowpath
- self.MALLOC_FIXEDSIZE_SLOWPATH = lltype.FuncType([lltype.Signed],
- lltype.UnsignedLongLong)
-
- def get_nursery_free_addr(self):
- nurs_addr = llop.gc_adr_of_nursery_free(llmemory.Address)
- return rffi.cast(lltype.Signed, nurs_addr)
-
- def get_nursery_top_addr(self):
- nurs_top_addr = llop.gc_adr_of_nursery_top(llmemory.Address)
- return rffi.cast(lltype.Signed, nurs_top_addr)
-
- def get_malloc_fixedsize_slowpath_addr(self):
- fptr = llhelper(lltype.Ptr(self.MALLOC_FIXEDSIZE_SLOWPATH),
- self.malloc_fixedsize_slowpath)
- return rffi.cast(lltype.Signed, fptr)
-
- def initialize(self):
- self.gcrefs.initialize()
- self.gcrootmap.initialize()
-
- def init_size_descr(self, S, descr):
- type_id = self.layoutbuilder.get_type_id(S)
- assert not self.layoutbuilder.is_weakref(type_id)
- has_finalizer = bool(self.layoutbuilder.has_finalizer(S))
- flags = int(has_finalizer) << 16
- descr.tid = llop.combine_ushort(lltype.Signed, type_id, flags)
-
- def init_array_descr(self, A, descr):
- type_id = self.layoutbuilder.get_type_id(A)
- descr.tid = llop.combine_ushort(lltype.Signed, type_id, 0)
-
- def gc_malloc(self, sizedescr):
- assert isinstance(sizedescr, BaseSizeDescr)
- return self.malloc_basic(sizedescr.size, sizedescr.tid)
-
- def gc_malloc_array(self, arraydescr, num_elem):
- assert isinstance(arraydescr, BaseArrayDescr)
- itemsize = arraydescr.get_item_size(self.translate_support_code)
- return self.malloc_array(itemsize, arraydescr.tid, num_elem)
-
- def gc_malloc_str(self, num_elem):
- return self.malloc_str(num_elem)
-
- def gc_malloc_unicode(self, num_elem):
- return self.malloc_unicode(num_elem)
-
- def args_for_new(self, sizedescr):
- assert isinstance(sizedescr, BaseSizeDescr)
- return [sizedescr.size, sizedescr.tid]
-
- def args_for_new_array(self, arraydescr):
- assert isinstance(arraydescr, BaseArrayDescr)
- itemsize = arraydescr.get_item_size(self.translate_support_code)
- return [itemsize, arraydescr.tid]
-
- def get_funcptr_for_new(self):
- return llhelper(self.GC_MALLOC_BASIC, self.malloc_basic)
-
- def get_funcptr_for_newarray(self):
- return llhelper(self.GC_MALLOC_ARRAY, self.malloc_array)
-
- def get_funcptr_for_newstr(self):
- return llhelper(self.GC_MALLOC_STR_UNICODE, self.malloc_str)
-
- def get_funcptr_for_newunicode(self):
- return llhelper(self.GC_MALLOC_STR_UNICODE, self.malloc_unicode)
-
- def do_write_barrier(self, gcref_struct, gcref_newptr):
- hdr_addr = llmemory.cast_ptr_to_adr(gcref_struct)
- hdr_addr -= self.gcheaderbuilder.size_gc_header
- hdr = llmemory.cast_adr_to_ptr(hdr_addr, self.HDRPTR)
- if hdr.tid & self.GCClass.JIT_WB_IF_FLAG:
- # get a pointer to the 'remember_young_pointer' function from
- # the GC, and call it immediately
- llop1 = self.llop1
- funcptr = llop1.get_write_barrier_failing_case(self.WB_FUNCPTR)
- funcptr(llmemory.cast_ptr_to_adr(gcref_struct),
- llmemory.cast_ptr_to_adr(gcref_newptr))
-
- def rewrite_assembler(self, cpu, operations):
- # Perform two kinds of rewrites in parallel:
- #
- # - Add COND_CALLs to the write barrier before SETFIELD_GC and
- # SETARRAYITEM_GC operations.
- #
- # - Remove all uses of ConstPtrs away from the assembler.
- # Idea: when running on a moving GC, we can't (easily) encode
- # the ConstPtrs in the assembler, because they can move at any
- # point in time. Instead, we store them in 'gcrefs.list', a GC
- # but nonmovable list; and here, we modify 'operations' to
- # replace direct usage of ConstPtr with a BoxPtr loaded by a
- # GETFIELD_RAW from the array 'gcrefs.list'.
- #
- newops = []
- for op in operations:
- if op.opnum == rop.DEBUG_MERGE_POINT:
- continue
- # ---------- replace ConstPtrs with GETFIELD_RAW ----------
- # xxx some performance issue here
- for i in range(len(op.args)):
- v = op.args[i]
- if isinstance(v, ConstPtr) and bool(v.value):
- addr = self.gcrefs.get_address_of_gcref(v.value)
- # ^^^even for non-movable objects, to record their presence
- if rgc.can_move(v.value):
- box = BoxPtr(v.value)
- addr = cpu.cast_adr_to_int(addr)
- newops.append(ResOperation(rop.GETFIELD_RAW,
- [ConstInt(addr)], box,
- self.single_gcref_descr))
- op.args[i] = box
- # ---------- write barrier for SETFIELD_GC ----------
- if op.opnum == rop.SETFIELD_GC:
- v = op.args[1]
- if isinstance(v, BoxPtr) or (isinstance(v, ConstPtr) and
- bool(v.value)): # store a non-NULL
- self._gen_write_barrier(newops, op.args[0], v)
- op = ResOperation(rop.SETFIELD_RAW, op.args, None,
- descr=op.descr)
- # ---------- write barrier for SETARRAYITEM_GC ----------
- if op.opnum == rop.SETARRAYITEM_GC:
- v = op.args[2]
- if isinstance(v, BoxPtr) or (isinstance(v, ConstPtr) and
- bool(v.value)): # store a non-NULL
- self._gen_write_barrier(newops, op.args[0], v)
- op = ResOperation(rop.SETARRAYITEM_RAW, op.args, None,
- descr=op.descr)
- # ----------
- newops.append(op)
- del operations[:]
- operations.extend(newops)
-
- def _gen_write_barrier(self, newops, v_base, v_value):
- args = [v_base, v_value]
- newops.append(ResOperation(rop.COND_CALL_GC_WB, args, None,
- descr=self.write_barrier_descr))
-
- def can_inline_malloc(self, descr):
- assert isinstance(descr, BaseSizeDescr)
- if descr.size < self.max_size_of_young_obj:
- has_finalizer = bool(descr.tid & (1<<16))
- if has_finalizer:
- return False
- return True
- return False
-
- def has_write_barrier_class(self):
- return WriteBarrierDescr
+def GcLLDescr_framework(*args):
+ from pypy.jit.backend.llsupport import gcframework
+ return gcframework.GcLLDescr_framework(*args)
# ____________________________________________________________
Copied: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py (from r71876, pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py)
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py Mon Mar 8 16:22:14 2010
@@ -1,201 +1,82 @@
-from pypy.rlib import rgc
-from pypy.rlib.objectmodel import we_are_translated
+from pypy.jit.backend.llsupport.gc import GcLLDescription
from pypy.rlib.debug import fatalerror
-from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rclass, rstr
+from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rstr
from pypy.rpython.lltypesystem.lloperation import llop
from pypy.rpython.annlowlevel import llhelper
-from pypy.translator.tool.cbuild import ExternalCompilationInfo
-from pypy.jit.metainterp.history import BoxInt, BoxPtr, ConstInt, ConstPtr
+from pypy.jit.metainterp.history import BoxPtr, ConstPtr
from pypy.jit.metainterp.history import AbstractDescr
from pypy.jit.metainterp.resoperation import ResOperation, rop
from pypy.jit.backend.llsupport import symbolic
-from pypy.jit.backend.llsupport.symbolic import WORD
from pypy.jit.backend.llsupport.descr import BaseSizeDescr, BaseArrayDescr
-from pypy.jit.backend.llsupport.descr import GcCache, get_field_descr
+from pypy.jit.backend.llsupport.descr import get_field_descr
from pypy.jit.backend.llsupport.descr import GcPtrFieldDescr
from pypy.jit.backend.llsupport.descr import get_call_descr
from pypy.rlib.rarithmetic import r_ulonglong, r_uint
-# ____________________________________________________________
-
-class GcLLDescription(GcCache):
- def __init__(self, gcdescr, translator=None):
- GcCache.__init__(self, translator is not None)
- self.gcdescr = gcdescr
- def _freeze_(self):
- return True
- def initialize(self):
- pass
- def do_write_barrier(self, gcref_struct, gcref_newptr):
- pass
- def rewrite_assembler(self, cpu, operations):
- pass
- def can_inline_malloc(self, descr):
- return False
- def has_write_barrier_class(self):
- return None
-
-# ____________________________________________________________
-
-class GcLLDescr_boehm(GcLLDescription):
- moving_gc = False
- gcrootmap = None
-
- def __init__(self, gcdescr, translator):
- GcLLDescription.__init__(self, gcdescr, translator)
- # grab a pointer to the Boehm 'malloc' function
- from pypy.rpython.tool import rffi_platform
- compilation_info = rffi_platform.configure_boehm()
-
- # Versions 6.x of libgc needs to use GC_local_malloc().
- # Versions 7.x of libgc removed this function; GC_malloc() has
- # the same behavior if libgc was compiled with
- # THREAD_LOCAL_ALLOC.
- class CConfig:
- _compilation_info_ = compilation_info
- HAS_LOCAL_MALLOC = rffi_platform.Has("GC_local_malloc")
- config = rffi_platform.configure(CConfig)
- if config['HAS_LOCAL_MALLOC']:
- GC_MALLOC = "GC_local_malloc"
- else:
- GC_MALLOC = "GC_malloc"
-
- malloc_fn_ptr = rffi.llexternal(GC_MALLOC,
- [lltype.Signed], # size_t, but good enough
- llmemory.GCREF,
- compilation_info=compilation_info,
- sandboxsafe=True,
- _nowrapper=True)
- self.funcptr_for_new = malloc_fn_ptr
-
- # on some platform GC_init is required before any other
- # GC_* functions, call it here for the benefit of tests
- # XXX move this to tests
- init_fn_ptr = rffi.llexternal("GC_init",
- [], lltype.Void,
- compilation_info=compilation_info,
- sandboxsafe=True,
- _nowrapper=True)
-
- init_fn_ptr()
-
- def gc_malloc(self, sizedescr):
- assert isinstance(sizedescr, BaseSizeDescr)
- return self.funcptr_for_new(sizedescr.size)
-
- def gc_malloc_array(self, arraydescr, num_elem):
- assert isinstance(arraydescr, BaseArrayDescr)
- ofs_length = arraydescr.get_ofs_length(self.translate_support_code)
- basesize = arraydescr.get_base_size(self.translate_support_code)
- itemsize = arraydescr.get_item_size(self.translate_support_code)
- size = basesize + itemsize * num_elem
- res = self.funcptr_for_new(size)
- rffi.cast(rffi.CArrayPtr(lltype.Signed), res)[ofs_length/WORD] = num_elem
- return res
-
- def gc_malloc_str(self, num_elem):
- basesize, itemsize, ofs_length = symbolic.get_array_token(rstr.STR,
- self.translate_support_code)
- assert itemsize == 1
- size = basesize + num_elem
- res = self.funcptr_for_new(size)
- rffi.cast(rffi.CArrayPtr(lltype.Signed), res)[ofs_length/WORD] = num_elem
- return res
-
- def gc_malloc_unicode(self, num_elem):
- basesize, itemsize, ofs_length = symbolic.get_array_token(rstr.UNICODE,
- self.translate_support_code)
- size = basesize + num_elem * itemsize
- res = self.funcptr_for_new(size)
- rffi.cast(rffi.CArrayPtr(lltype.Signed), res)[ofs_length/WORD] = num_elem
- return res
-
- def args_for_new(self, sizedescr):
- assert isinstance(sizedescr, BaseSizeDescr)
- return [sizedescr.size]
-
- def get_funcptr_for_new(self):
- return self.funcptr_for_new
-
- get_funcptr_for_newarray = None
- get_funcptr_for_newstr = None
- get_funcptr_for_newunicode = None
+from pypy.rpython.memory import gctypelayout
+from pypy.rpython.memory.gctypelayout import _check_typeid
+from pypy.rpython.memory.gcheader import GCHeaderBuilder
+from pypy.rpython.memory.gctransform import framework
# ____________________________________________________________
-# All code below is for the hybrid GC
+# All code below is for our framework GCs
-class GcRefList:
- """Handles all references from the generated assembler to GC objects.
- This is implemented as a nonmovable, but GC, list; the assembler contains
- code that will (for now) always read from this list."""
-
- GCREF_LIST = lltype.GcArray(llmemory.GCREF) # followed by the GC
-
- HASHTABLE = rffi.CArray(llmemory.Address) # ignored by the GC
- HASHTABLE_BITS = 10
- HASHTABLE_SIZE = 1 << HASHTABLE_BITS
+class GcRefHandler:
+ """Handles all constant GCREFs stored in the assembler.
+ This includes the fact that some of these constants may end up stored
+ with an extra offset, e.g. as the address out of which a GETFIELD_GC
+ on them should fetch data.
+ """
+ CONSTGCREF_ARRAY = lltype.GcArray(("gcref", llmemory.GCREF),
+ ("addr", llmemory.Address))
+ gcrefarray_lengthoffset = llmemory.ArrayLengthOffset(CONSTGCREF_ARRAY)
+ gcrefarray_itemsoffset = llmemory.ArrayItemsOffset(CONSTGCREF_ARRAY)
+ gcrefarray_singleitemoffset = llmemory.ItemOffset(CONSTGCREF_ARRAY.OF)
+ gcrefarrayitem_gcref = llmemory.offsetof(CONSTGCREF_ARRAY.OF, "gcref")
+ gcrefarrayitem_addr = llmemory.offsetof(CONSTGCREF_ARRAY.OF, "addr")
+
+ def __init__(self, layoutbuilder):
+ self.constgcref_array_type_id = layoutbuilder.get_type_id(
+ self.CONSTGCREF_ARRAY)
- def initialize(self):
- if we_are_translated(): n = 2000
- else: n = 10 # tests only
- self.list = self.alloc_gcref_list(n)
- self.nextindex = 0
- self.oldlists = []
- # A pseudo dictionary: it is fixed size, and it may contain
- # random nonsense after a collection moved the objects. It is only
- # used to avoid too many duplications in the GCREF_LISTs.
- self.hashtable = lltype.malloc(self.HASHTABLE,
- self.HASHTABLE_SIZE+1,
- flavor='raw')
- dummy = lltype.direct_ptradd(lltype.direct_arrayitems(self.hashtable),
- self.HASHTABLE_SIZE)
- dummy = llmemory.cast_ptr_to_adr(dummy)
- for i in range(self.HASHTABLE_SIZE+1):
- self.hashtable[i] = dummy
-
- def alloc_gcref_list(self, n):
- # Important: the GRREF_LISTs allocated are *non-movable*. This
- # requires support in the gc (only the hybrid GC supports it so far).
- if we_are_translated():
- list = rgc.malloc_nonmovable(self.GCREF_LIST, n)
- assert list, "malloc_nonmovable failed!"
- else:
- list = lltype.malloc(self.GCREF_LIST, n) # for tests only
- return list
+ def _freeze_(self):
+ return True
- def get_address_of_gcref(self, gcref):
- assert lltype.typeOf(gcref) == llmemory.GCREF
- # first look in the hashtable, using an inexact hash (fails after
- # the object moves)
- addr = llmemory.cast_ptr_to_adr(gcref)
- hash = llmemory.cast_adr_to_int(addr)
- hash -= hash >> self.HASHTABLE_BITS
- hash &= self.HASHTABLE_SIZE - 1
- addr_ref = self.hashtable[hash]
- # the following test is safe anyway, because the addresses found
- # in the hashtable are always the addresses of nonmovable stuff
- # ('addr_ref' is an address inside self.list, not directly the
- # address of a real moving GC object -- that's 'addr_ref.address[0]'.)
- if addr_ref.address[0] == addr:
- return addr_ref
- # if it fails, add an entry to the list
- if self.nextindex == len(self.list):
- # reallocate first, increasing a bit the size every time
- self.oldlists.append(self.list)
- self.list = self.alloc_gcref_list(len(self.list) // 4 * 5)
- self.nextindex = 0
- # add it
- index = self.nextindex
- self.list[index] = gcref
- addr_ref = lltype.direct_ptradd(lltype.direct_arrayitems(self.list),
- index)
- addr_ref = llmemory.cast_ptr_to_adr(addr_ref)
- self.nextindex = index + 1
- # record it in the hashtable
- self.hashtable[hash] = addr_ref
- return addr_ref
+ def start_tracing_varsized_part(self, obj, typeid):
+ """Called by the GC just before tracing the object 'obj'."""
+ if typeid == self.constgcref_array_type_id:
+ self.do_start_stop_tracing(obj, False)
+
+ def stop_tracing_varsized_part(self, obj, typeid):
+ """Called by the GC just after tracing the object 'obj'."""
+ if typeid == self.constgcref_array_type_id:
+ self.do_start_stop_tracing(obj, True)
+
+ def do_start_stop_tracing(self, obj, done):
+ # Before tracing an object of type CONSTGCREF_ARRAY
+ # (done=False), we take all addresses in the assembler and
+ # subtract the gcref from them. This leaves the assembler in a
+ # broken state which is fixed by do_stop_tracing(). The numbers
+ # in the assembler now are just the offsets from the start of
+ # the objects. After tracing (done=True), we add again the
+ # gcrefs to the addresses in the assembler, fixing up the
+ # numbers.
+ length = (obj + self.gcrefarray_lengthoffset).signed[0]
+ item = obj + self.gcrefarray_itemsoffset
+ while length > 0:
+ gcref = (item + self.gcrefarrayitem_gcref).address[0]
+ addr = (item + self.gcrefarrayitem_addr).address[0]
+ gcref = llmemory.cast_adr_to_int(gcref)
+ if done:
+ addr.signed[0] += gcref
+ else:
+ addr.signed[0] -= gcref
+ item += self.gcrefarray_singleitemoffset
+ length -= 1
+ do_start_stop_tracing._dont_inline_ = True
+ do_start_stop_tracing._annspecialcase_ = 'specialize:arg(2)'
class GcRootMap_asmgcc:
@@ -327,19 +208,11 @@
class GcLLDescr_framework(GcLLDescription):
def __init__(self, gcdescr, translator, llop1=llop):
- from pypy.rpython.memory.gctypelayout import _check_typeid
- from pypy.rpython.memory.gcheader import GCHeaderBuilder
- from pypy.rpython.memory.gctransform import framework
GcLLDescription.__init__(self, gcdescr, translator)
assert self.translate_support_code, "required with the framework GC"
self.translator = translator
self.llop1 = llop1
- # we need the hybrid GC for GcRefList.alloc_gcref_list() to work
- if gcdescr.config.translation.gc != 'hybrid':
- raise NotImplementedError("--gc=%s not implemented with the JIT" %
- (gcdescr.config.translation.gc,))
-
# to find roots in the assembler, make a GcRootMap
name = gcdescr.config.translation.gcrootfinder
try:
@@ -349,17 +222,20 @@
" with the JIT" % (name,))
gcrootmap = cls()
self.gcrootmap = gcrootmap
- self.gcrefs = GcRefList()
- self.single_gcref_descr = GcPtrFieldDescr(0)
# make a TransformerLayoutBuilder and save it on the translator
# where it can be fished and reused by the FrameworkGCTransformer
self.layoutbuilder = framework.TransformerLayoutBuilder(translator)
self.layoutbuilder.delay_encoding()
+ self.gcrefhandler = GcRefHandler(self.layoutbuilder)
self.translator._jit2gc = {
'layoutbuilder': self.layoutbuilder,
'gcmapstart': lambda: gcrootmap.gcmapstart(),
'gcmapend': lambda: gcrootmap.gcmapend(),
+ 'start_tracing_varsized_part':
+ self.gcrefhandler.start_tracing_varsized_part,
+ 'stop_tracing_varsized_part':
+ self.gcrefhandler.stop_tracing_varsized_part,
}
self.GCClass = self.layoutbuilder.GCClass
self.moving_gc = self.GCClass.moving_gc
@@ -464,7 +340,6 @@
return rffi.cast(lltype.Signed, fptr)
def initialize(self):
- self.gcrefs.initialize()
self.gcrootmap.initialize()
def init_size_descr(self, S, descr):
@@ -532,31 +407,26 @@
# - Add COND_CALLs to the write barrier before SETFIELD_GC and
# SETARRAYITEM_GC operations.
#
- # - Remove all uses of ConstPtrs away from the assembler.
- # Idea: when running on a moving GC, we can't (easily) encode
- # the ConstPtrs in the assembler, because they can move at any
- # point in time. Instead, we store them in 'gcrefs.list', a GC
- # but nonmovable list; and here, we modify 'operations' to
- # replace direct usage of ConstPtr with a BoxPtr loaded by a
- # GETFIELD_RAW from the array 'gcrefs.list'.
+ # - Remove "unsupported" uses of ConstPtrs away from the assembler.
+ # The backend must support at least 'p = SAME_AS(ConstPtr(..))'
+ # and might support more operations, like GETFIELD_GC. It should
+ # set GC_SUPPORTED_CONSTPTR to a dict of supported opnums.
+ # Or, as in the x86 backend, it can directly support all usages of
+ # ConstPtr and not need any rewrite at all (and then it should
+ # set GC_SUPPORTED_CONSTPTR to True).
#
newops = []
for op in operations:
if op.opnum == rop.DEBUG_MERGE_POINT:
continue
- # ---------- replace ConstPtrs with GETFIELD_RAW ----------
- # xxx some performance issue here
- for i in range(len(op.args)):
- v = op.args[i]
- if isinstance(v, ConstPtr) and bool(v.value):
- addr = self.gcrefs.get_address_of_gcref(v.value)
- # ^^^even for non-movable objects, to record their presence
- if rgc.can_move(v.value):
+ # ---------- replace ConstPtrs with SAME_AS ----------
+ if (cpu.GC_SUPPORTED_CONSTPTR is not True and
+ op.opnum not in cpu.GC_SUPPORTED_CONSTPTR):
+ for i in range(len(op.args)):
+ v = op.args[i]
+ if isinstance(v, ConstPtr) and bool(v.value):
box = BoxPtr(v.value)
- addr = cpu.cast_adr_to_int(addr)
- newops.append(ResOperation(rop.GETFIELD_RAW,
- [ConstInt(addr)], box,
- self.single_gcref_descr))
+ newops.append(ResOperation(rop.SAME_AS, [v], box))
op.args[i] = box
# ---------- write barrier for SETFIELD_GC ----------
if op.opnum == rop.SETFIELD_GC:
@@ -595,18 +465,3 @@
def has_write_barrier_class(self):
return WriteBarrierDescr
-
-# ____________________________________________________________
-
-def get_ll_description(gcdescr, translator=None):
- # translator is None if translate_support_code is False.
- if gcdescr is not None:
- name = gcdescr.config.translation.gctransformer
- else:
- name = "boehm"
- try:
- cls = globals()['GcLLDescr_' + name]
- except KeyError:
- raise NotImplementedError("GC transformer %r not supported by "
- "the JIT backend" % (name,))
- return cls(gcdescr, translator)
Modified: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py Mon Mar 8 16:22:14 2010
@@ -4,6 +4,7 @@
from pypy.rpython.annlowlevel import llhelper
from pypy.jit.backend.llsupport.descr import *
from pypy.jit.backend.llsupport.gc import *
+from pypy.jit.backend.llsupport.gcframework import *
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.metainterp.gc import get_description
@@ -46,19 +47,44 @@
# ____________________________________________________________
-def test_GcRefList():
+def test_GcRefHandler():
+ class FakeLayoutBuilder:
+ def get_type_id(self, TYPE):
+ return 42
+ gcrefhandler = GcRefHandler(FakeLayoutBuilder())
+ gcrefhandler.start_tracing_varsized_part(None, 27) # no effect
+ gcrefhandler.stop_tracing_varsized_part(None, 27) # no effect
+ #
S = lltype.GcStruct('S')
- order = range(50) * 4
- random.shuffle(order)
- allocs = [lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
- for i in range(50)]
- allocs = [allocs[i] for i in order]
+ p0 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
+ p1 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
+ p = lltype.malloc(GcRefHandler.CONSTGCREF_ARRAY, 3)
+ #
+ ARRAY_SIGNED = lltype.Array(lltype.Signed)
+ test = lltype.malloc(ARRAY_SIGNED, 5, immortal=True)
+ test[2] = 123
+ test[3] = 456
+ test[4] = 789
+ #
+ p[0].gcref = p0
+ p[0].addr = (llmemory.cast_ptr_to_adr(test) +
+ llmemory.itemoffsetof(ARRAY_SIGNED, 2))
+ p[1].gcref = p0
+ p[1].addr = (llmemory.cast_ptr_to_adr(test) +
+ llmemory.itemoffsetof(ARRAY_SIGNED, 4))
+ p[2].gcref = p1
+ p[2].addr = (llmemory.cast_ptr_to_adr(test) +
+ llmemory.itemoffsetof(ARRAY_SIGNED, 3))
+ #
+ gcrefhandler.start_tracing_varsized_part(llmemory.cast_ptr_to_adr(p), 42)
+ assert test[2] == 123 - llmemory.cast_adr_to_int(p0)
+ assert test[3] == 456 - llmemory.cast_adr_to_int(p1)
+ assert test[4] == 789 - llmemory.cast_adr_to_int(p0)
#
- gcrefs = GcRefList()
- gcrefs.initialize()
- addrs = [gcrefs.get_address_of_gcref(ptr) for ptr in allocs]
- for i in range(len(allocs)):
- assert addrs[i].address[0] == llmemory.cast_ptr_to_adr(allocs[i])
+ gcrefhandler.stop_tracing_varsized_part(llmemory.cast_ptr_to_adr(p), 42)
+ assert test[2] == 123
+ assert test[3] == 456
+ assert test[4] == 789
def test_GcRootMap_asmgcc():
def frame_pos(n):
@@ -160,10 +186,7 @@
class FakeTranslator:
config = config_
class FakeCPU:
- def cast_adr_to_int(self, adr):
- ptr = llmemory.cast_adr_to_ptr(adr, gc_ll_descr.WB_FUNCPTR)
- assert ptr._obj._callable == llop1._write_barrier_failing_case
- return 42
+ GC_SUPPORTED_CONSTPTR = {rop.SAME_AS: None}
gcdescr = get_description(config_)
translator = FakeTranslator()
llop1 = FakeLLOp()
@@ -277,46 +300,40 @@
def test_rewrite_assembler_1(self):
# check rewriting of ConstPtrs
class MyFakeCPU:
- def cast_adr_to_int(self, adr):
- assert adr == "some fake address"
- return 43
- class MyFakeGCRefList:
- def get_address_of_gcref(self, s_gcref1):
- assert s_gcref1 == s_gcref
- return "some fake address"
+ GC_SUPPORTED_CONSTPTR = {rop.SAME_AS: None,
+ rop.OOISNOT: None}
S = lltype.GcStruct('S')
s = lltype.malloc(S)
s_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
+ s2 = lltype.malloc(S)
+ s_gcref2 = lltype.cast_opaque_ptr(llmemory.GCREF, s2)
v_random_box = BoxPtr()
v_result = BoxInt()
+ v_result2 = BoxInt()
operations = [
ResOperation(rop.OOIS, [v_random_box, ConstPtr(s_gcref)],
v_result),
+ ResOperation(rop.OOISNOT, [v_random_box, ConstPtr(s_gcref2)],
+ v_result2),
]
gc_ll_descr = self.gc_ll_descr
- gc_ll_descr.gcrefs = MyFakeGCRefList()
gc_ll_descr.rewrite_assembler(MyFakeCPU(), operations)
- assert len(operations) == 2
- assert operations[0].opnum == rop.GETFIELD_RAW
- assert operations[0].args == [ConstInt(43)]
- assert operations[0].descr == gc_ll_descr.single_gcref_descr
+ assert len(operations) == 3
+ assert operations[0].opnum == rop.SAME_AS
+ assert operations[0].args == [ConstPtr(s_gcref)]
v_box = operations[0].result
assert isinstance(v_box, BoxPtr)
assert operations[1].opnum == rop.OOIS
assert operations[1].args == [v_random_box, v_box]
assert operations[1].result == v_result
+ assert operations[2].opnum == rop.OOISNOT
+ assert operations[2].args == [v_random_box, ConstPtr(s_gcref2)]
+ assert operations[2].result == v_result2
- def test_rewrite_assembler_1_cannot_move(self):
- # check rewriting of ConstPtrs
+ def test_rewrite_assembler_1_all_supported(self):
+ # check no rewriting of ConstPtrs if the cpu supports it fully
class MyFakeCPU:
- def cast_adr_to_int(self, adr):
- xxx # should not be called
- class MyFakeGCRefList:
- def get_address_of_gcref(self, s_gcref1):
- seen.append(s_gcref1)
- assert s_gcref1 == s_gcref
- return "some fake address"
- seen = []
+ GC_SUPPORTED_CONSTPTR = True
S = lltype.GcStruct('S')
s = lltype.malloc(S)
s_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
@@ -327,20 +344,11 @@
v_result),
]
gc_ll_descr = self.gc_ll_descr
- gc_ll_descr.gcrefs = MyFakeGCRefList()
- old_can_move = rgc.can_move
- try:
- rgc.can_move = lambda s: False
- gc_ll_descr.rewrite_assembler(MyFakeCPU(), operations)
- finally:
- rgc.can_move = old_can_move
+ gc_ll_descr.rewrite_assembler(MyFakeCPU(), operations)
assert len(operations) == 1
assert operations[0].opnum == rop.OOIS
assert operations[0].args == [v_random_box, ConstPtr(s_gcref)]
assert operations[0].result == v_result
- # check that s_gcref gets added to the list anyway, to make sure
- # that the GC sees it
- assert seen == [s_gcref]
def test_rewrite_assembler_2(self):
# check write barriers before SETFIELD_GC
Modified: pypy/branch/jit-constptr/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/x86/runner.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/x86/runner.py Mon Mar 8 16:22:14 2010
@@ -13,6 +13,7 @@
class CPU386(AbstractLLCPU):
debug = True
supports_floats = True
+ GC_SUPPORTED_CONSTPTR = True
BOOTSTRAP_TP = lltype.FuncType([], lltype.Signed)
dont_keepalive_stuff = False # for tests
Modified: pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py Mon Mar 8 16:22:14 2010
@@ -14,7 +14,6 @@
from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE, dont_look_inside
from pypy.rlib.jit import purefunction
from pypy.jit.backend.x86.runner import CPU386
-from pypy.jit.backend.llsupport.gc import GcRefList, GcRootMap_asmgcc
from pypy.tool.udir import udir
class X(object):
Modified: pypy/branch/jit-constptr/pypy/rpython/memory/gc/base.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/rpython/memory/gc/base.py (original)
+++ pypy/branch/jit-constptr/pypy/rpython/memory/gc/base.py Mon Mar 8 16:22:14 2010
@@ -25,6 +25,9 @@
self.AddressDeque = get_address_deque(chunk_size)
self.AddressDict = AddressDict
self.config = config
+ # hooks used by the JIT:
+ self.start_tracing_varsized_part = lambda obj, typeid: None
+ self.stop_tracing_varsized_part = lambda obj, typeid: None
def setup(self):
# all runtime mutable values' setup should happen here
@@ -177,6 +180,7 @@
callback(item, arg)
i += 1
if self.has_gcptr_in_varsize(typeid):
+ self.start_tracing_varsized_part(obj, typeid)
item = obj + self.varsize_offset_to_variable_part(typeid)
length = (obj + self.varsize_offset_to_length(typeid)).signed[0]
offsets = self.varsize_offsets_to_gcpointers_in_var_part(typeid)
@@ -190,6 +194,7 @@
j += 1
item += itemlength
length -= 1
+ self.stop_tracing_varsized_part(obj, typeid)
trace._annspecialcase_ = 'specialize:arg(2)'
def points_to_valid_gc_object(self, addr):
Modified: pypy/branch/jit-constptr/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/rpython/memory/gctransform/framework.py (original)
+++ pypy/branch/jit-constptr/pypy/rpython/memory/gctransform/framework.py Mon Mar 8 16:22:14 2010
@@ -181,6 +181,12 @@
self.num_pushs = 0
self.write_barrier_calls = 0
+ if hasattr(translator, '_jit2gc'):
+ fn = translator._jit2gc['start_tracing_varsized_part']
+ gcdata.gc.start_tracing_varsized_part = fn
+ fn = translator._jit2gc['stop_tracing_varsized_part']
+ gcdata.gc.stop_tracing_varsized_part = fn
+
def frameworkgc_setup():
# run-time initialization code
root_walker.setup_root_walker()
From arigo at codespeak.net Mon Mar 8 16:43:51 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 16:43:51 +0100 (CET)
Subject: [pypy-svn] r71886 - in
pypy/branch/jit-constptr/pypy/jit/backend/llsupport: . test
Message-ID: <20100308154351.E124851056@codespeak.net>
Author: arigo
Date: Mon Mar 8 16:43:50 2010
New Revision: 71886
Modified:
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py
Log:
Tweaks, documentation, and kill unused code.
Modified: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py Mon Mar 8 16:43:50 2010
@@ -29,6 +29,14 @@
with an extra offset, e.g. as the address out of which a GETFIELD_GC
on them should fetch data.
"""
+ # The idea is to store in an array of type CONSTGCREF_ARRAY a list
+ # of pairs (gcref, addr), where 'gcref' is some GC-tracked object,
+ # and 'addr' is the address in the assembler where 'gcref' was used.
+ # This usually means that 'gcref' is currently stored at 'addr', but
+ # it may also be the case that there is a small offset; e.g. a
+ # GETFIELD_GC(ConstPtr(0x123450), descr=) will end up as
+ # an assembler instruction like MOV EAX, [0x123458].
+ #
CONSTGCREF_ARRAY = lltype.GcArray(("gcref", llmemory.GCREF),
("addr", llmemory.Address))
gcrefarray_lengthoffset = llmemory.ArrayLengthOffset(CONSTGCREF_ARRAY)
@@ -40,39 +48,46 @@
def __init__(self, layoutbuilder):
self.constgcref_array_type_id = layoutbuilder.get_type_id(
self.CONSTGCREF_ARRAY)
+ self.full_constgcref_array_type_id = llop.combine_ushort(
+ lltype.Signed,
+ self.constgcref_array_type_id,
+ 0)
def _freeze_(self):
return True
def start_tracing_varsized_part(self, obj, typeid):
"""Called by the GC just before tracing the object 'obj'."""
- if typeid == self.constgcref_array_type_id:
+ fulltypeid = llop.combine_ushort(lltype.Signed, typeid, 0)
+ if fulltypeid == self.full_constgcref_array_type_id:
self.do_start_stop_tracing(obj, False)
def stop_tracing_varsized_part(self, obj, typeid):
"""Called by the GC just after tracing the object 'obj'."""
- if typeid == self.constgcref_array_type_id:
+ fulltypeid = llop.combine_ushort(lltype.Signed, typeid, 0)
+ if fulltypeid == self.full_constgcref_array_type_id:
self.do_start_stop_tracing(obj, True)
def do_start_stop_tracing(self, obj, done):
# Before tracing an object of type CONSTGCREF_ARRAY
# (done=False), we take all addresses in the assembler and
- # subtract the gcref from them. This leaves the assembler in a
- # broken state which is fixed by do_stop_tracing(). The numbers
- # in the assembler now are just the offsets from the start of
- # the objects. After tracing (done=True), we add again the
- # gcrefs to the addresses in the assembler, fixing up the
- # numbers.
+ # subtract the gcrefs from them. This leaves the assembler in a
+ # broken state: the numbers in the assembler now are just the
+ # offsets from the start of the objects. After tracing
+ # (done=True), we add again the gcrefs to the addresses in the
+ # assembler, fixing up the numbers. For any object that moved,
+ # that object's address in the assembler is now fixed.
length = (obj + self.gcrefarray_lengthoffset).signed[0]
item = obj + self.gcrefarray_itemsoffset
while length > 0:
gcref = (item + self.gcrefarrayitem_gcref).address[0]
- addr = (item + self.gcrefarrayitem_addr).address[0]
- gcref = llmemory.cast_adr_to_int(gcref)
- if done:
- addr.signed[0] += gcref
- else:
- addr.signed[0] -= gcref
+ if gcref:
+ gcref = llmemory.cast_adr_to_int(gcref)
+ addr = (item + self.gcrefarrayitem_addr).address[0]
+ if done:
+ addr.signed[0] += gcref
+ else:
+ addr.signed[0] -= gcref
item += self.gcrefarray_singleitemoffset
length -= 1
do_start_stop_tracing._dont_inline_ = True
@@ -402,32 +417,12 @@
llmemory.cast_ptr_to_adr(gcref_newptr))
def rewrite_assembler(self, cpu, operations):
- # Perform two kinds of rewrites in parallel:
- #
- # - Add COND_CALLs to the write barrier before SETFIELD_GC and
- # SETARRAYITEM_GC operations.
- #
- # - Remove "unsupported" uses of ConstPtrs away from the assembler.
- # The backend must support at least 'p = SAME_AS(ConstPtr(..))'
- # and might support more operations, like GETFIELD_GC. It should
- # set GC_SUPPORTED_CONSTPTR to a dict of supported opnums.
- # Or, as in the x86 backend, it can directly support all usages of
- # ConstPtr and not need any rewrite at all (and then it should
- # set GC_SUPPORTED_CONSTPTR to True).
- #
+ # Add COND_CALLs to the write barrier before SETFIELD_GC and
+ # SETARRAYITEM_GC operations.
newops = []
for op in operations:
if op.opnum == rop.DEBUG_MERGE_POINT:
continue
- # ---------- replace ConstPtrs with SAME_AS ----------
- if (cpu.GC_SUPPORTED_CONSTPTR is not True and
- op.opnum not in cpu.GC_SUPPORTED_CONSTPTR):
- for i in range(len(op.args)):
- v = op.args[i]
- if isinstance(v, ConstPtr) and bool(v.value):
- box = BoxPtr(v.value)
- newops.append(ResOperation(rop.SAME_AS, [v], box))
- op.args[i] = box
# ---------- write barrier for SETFIELD_GC ----------
if op.opnum == rop.SETFIELD_GC:
v = op.args[1]
Modified: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py Mon Mar 8 16:43:50 2010
@@ -58,7 +58,7 @@
S = lltype.GcStruct('S')
p0 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
p1 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
- p = lltype.malloc(GcRefHandler.CONSTGCREF_ARRAY, 3)
+ p = lltype.malloc(GcRefHandler.CONSTGCREF_ARRAY, 4, zero=True)
#
ARRAY_SIGNED = lltype.Array(lltype.Signed)
test = lltype.malloc(ARRAY_SIGNED, 5, immortal=True)
@@ -69,11 +69,11 @@
p[0].gcref = p0
p[0].addr = (llmemory.cast_ptr_to_adr(test) +
llmemory.itemoffsetof(ARRAY_SIGNED, 2))
- p[1].gcref = p0
- p[1].addr = (llmemory.cast_ptr_to_adr(test) +
- llmemory.itemoffsetof(ARRAY_SIGNED, 4))
- p[2].gcref = p1
+ p[2].gcref = p0
p[2].addr = (llmemory.cast_ptr_to_adr(test) +
+ llmemory.itemoffsetof(ARRAY_SIGNED, 4))
+ p[3].gcref = p1
+ p[3].addr = (llmemory.cast_ptr_to_adr(test) +
llmemory.itemoffsetof(ARRAY_SIGNED, 3))
#
gcrefhandler.start_tracing_varsized_part(llmemory.cast_ptr_to_adr(p), 42)
@@ -297,59 +297,6 @@
gc_ll_descr.rewrite_assembler(None, operations)
assert len(operations) == 0
- def test_rewrite_assembler_1(self):
- # check rewriting of ConstPtrs
- class MyFakeCPU:
- GC_SUPPORTED_CONSTPTR = {rop.SAME_AS: None,
- rop.OOISNOT: None}
- S = lltype.GcStruct('S')
- s = lltype.malloc(S)
- s_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
- s2 = lltype.malloc(S)
- s_gcref2 = lltype.cast_opaque_ptr(llmemory.GCREF, s2)
- v_random_box = BoxPtr()
- v_result = BoxInt()
- v_result2 = BoxInt()
- operations = [
- ResOperation(rop.OOIS, [v_random_box, ConstPtr(s_gcref)],
- v_result),
- ResOperation(rop.OOISNOT, [v_random_box, ConstPtr(s_gcref2)],
- v_result2),
- ]
- gc_ll_descr = self.gc_ll_descr
- gc_ll_descr.rewrite_assembler(MyFakeCPU(), operations)
- assert len(operations) == 3
- assert operations[0].opnum == rop.SAME_AS
- assert operations[0].args == [ConstPtr(s_gcref)]
- v_box = operations[0].result
- assert isinstance(v_box, BoxPtr)
- assert operations[1].opnum == rop.OOIS
- assert operations[1].args == [v_random_box, v_box]
- assert operations[1].result == v_result
- assert operations[2].opnum == rop.OOISNOT
- assert operations[2].args == [v_random_box, ConstPtr(s_gcref2)]
- assert operations[2].result == v_result2
-
- def test_rewrite_assembler_1_all_supported(self):
- # check no rewriting of ConstPtrs if the cpu supports it fully
- class MyFakeCPU:
- GC_SUPPORTED_CONSTPTR = True
- S = lltype.GcStruct('S')
- s = lltype.malloc(S)
- s_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
- v_random_box = BoxPtr()
- v_result = BoxInt()
- operations = [
- ResOperation(rop.OOIS, [v_random_box, ConstPtr(s_gcref)],
- v_result),
- ]
- gc_ll_descr = self.gc_ll_descr
- gc_ll_descr.rewrite_assembler(MyFakeCPU(), operations)
- assert len(operations) == 1
- assert operations[0].opnum == rop.OOIS
- assert operations[0].args == [v_random_box, ConstPtr(s_gcref)]
- assert operations[0].result == v_result
-
def test_rewrite_assembler_2(self):
# check write barriers before SETFIELD_GC
v_base = BoxPtr()
From arigo at codespeak.net Mon Mar 8 17:10:58 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 17:10:58 +0100 (CET)
Subject: [pypy-svn] r71891 - in pypy/release/1.2.x:
lib-python/modified-2.5.2/ctypes pypy/module/mmap
pypy/objspace/flow pypy/objspace/flow/test pypy/rlib
pypy/rpython/lltypesystem/module
pypy/rpython/lltypesystem/module/test pypy/translator/c/test
Message-ID: <20100308161058.DDAEC51054@codespeak.net>
Author: arigo
Date: Mon Mar 8 17:10:56 2010
New Revision: 71891
Modified:
pypy/release/1.2.x/lib-python/modified-2.5.2/ctypes/__init__.py
pypy/release/1.2.x/pypy/module/mmap/interp_mmap.py
pypy/release/1.2.x/pypy/objspace/flow/objspace.py
pypy/release/1.2.x/pypy/objspace/flow/test/test_objspace.py
pypy/release/1.2.x/pypy/rlib/runicode.py
pypy/release/1.2.x/pypy/rpython/lltypesystem/module/ll_math.py
pypy/release/1.2.x/pypy/rpython/lltypesystem/module/test/test_ll_math.py
pypy/release/1.2.x/pypy/translator/c/test/test_typed.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71802:71824
Modified: pypy/release/1.2.x/lib-python/modified-2.5.2/ctypes/__init__.py
==============================================================================
--- pypy/release/1.2.x/lib-python/modified-2.5.2/ctypes/__init__.py (original)
+++ pypy/release/1.2.x/lib-python/modified-2.5.2/ctypes/__init__.py Mon Mar 8 17:10:56 2010
@@ -23,21 +23,23 @@
from _ctypes import FormatError
DEFAULT_MODE = RTLD_LOCAL
-if _os.name == "posix" and _sys.platform == "darwin":
- import gestalt
+## --- the following is skipped because we don't have 'gestalt' so far,
+## --- but we know pypy doesn't compile on Mac OS/X 10.3.
+##if _os.name == "posix" and _sys.platform == "darwin":
+## import gestalt
+
+## # gestalt.gestalt("sysv") returns the version number of the
+## # currently active system file as BCD.
+## # On OS X 10.4.6 -> 0x1046
+## # On OS X 10.2.8 -> 0x1028
+## # See also http://www.rgaros.nl/gestalt/
+## #
+## # On OS X 10.3, we use RTLD_GLOBAL as default mode
+## # because RTLD_LOCAL does not work at least on some
+## # libraries.
- # gestalt.gestalt("sysv") returns the version number of the
- # currently active system file as BCD.
- # On OS X 10.4.6 -> 0x1046
- # On OS X 10.2.8 -> 0x1028
- # See also http://www.rgaros.nl/gestalt/
- #
- # On OS X 10.3, we use RTLD_GLOBAL as default mode
- # because RTLD_LOCAL does not work at least on some
- # libraries.
-
- if gestalt.gestalt("sysv") < 0x1040:
- DEFAULT_MODE = RTLD_GLOBAL
+## if gestalt.gestalt("sysv") < 0x1040:
+## DEFAULT_MODE = RTLD_GLOBAL
from _ctypes import FUNCFLAG_CDECL as _FUNCFLAG_CDECL, \
FUNCFLAG_PYTHONAPI as _FUNCFLAG_PYTHONAPI
Modified: pypy/release/1.2.x/pypy/module/mmap/interp_mmap.py
==============================================================================
--- pypy/release/1.2.x/pypy/module/mmap/interp_mmap.py (original)
+++ pypy/release/1.2.x/pypy/module/mmap/interp_mmap.py Mon Mar 8 17:10:56 2010
@@ -54,7 +54,10 @@
tell.unwrap_spec = ['self']
def descr_size(self):
- return self.space.wrap(self.mmap.file_size())
+ try:
+ return self.space.wrap(self.mmap.file_size())
+ except OSError, e:
+ raise wrap_oserror(self.space, e, 'w_EnvironmentError')
descr_size.unwrap_spec = ['self']
def write(self, data):
@@ -83,6 +86,8 @@
except RValueError, v:
raise OperationError(self.space.w_ValueError,
self.space.wrap(v.message))
+ except OSError, e:
+ raise wrap_oserror(self.space, e, 'w_EnvironmentError')
flush.unwrap_spec = ['self', int, int]
def move(self, dest, src, count):
@@ -96,7 +101,10 @@
def resize(self, newsize):
self.check_valid()
self.check_resizeable()
- self.mmap.resize(newsize)
+ try:
+ self.mmap.resize(newsize)
+ except OSError, e:
+ raise wrap_oserror(self.space, e, 'w_EnvironmentError')
resize.unwrap_spec = ['self', int]
def __len__(self):
Modified: pypy/release/1.2.x/pypy/objspace/flow/objspace.py
==============================================================================
--- pypy/release/1.2.x/pypy/objspace/flow/objspace.py (original)
+++ pypy/release/1.2.x/pypy/objspace/flow/objspace.py Mon Mar 8 17:10:56 2010
@@ -370,6 +370,9 @@
def call_args(self, w_callable, args):
try:
fn = self.unwrap(w_callable)
+ if hasattr(fn, "_flowspace_rewrite_directly_as_"):
+ fn = fn._flowspace_rewrite_directly_as_
+ w_callable = self.wrap(fn)
sc = self.specialcases[fn] # TypeError if 'fn' not hashable
except (UnwrapException, KeyError, TypeError):
pass
Modified: pypy/release/1.2.x/pypy/objspace/flow/test/test_objspace.py
==============================================================================
--- pypy/release/1.2.x/pypy/objspace/flow/test/test_objspace.py (original)
+++ pypy/release/1.2.x/pypy/objspace/flow/test/test_objspace.py Mon Mar 8 17:10:56 2010
@@ -892,6 +892,22 @@
raise TypeError()
py.test.raises(Exception, self.codetest, f)
+ def test__flowspace_rewrite_directly_as_(self):
+ def g(x):
+ pass
+ def f(x):
+ pass
+ f._flowspace_rewrite_directly_as_ = g
+ def h(x):
+ f(x)
+ graph = self.codetest(h)
+ assert self.all_operations(graph) == {'simple_call': 1}
+ for block in graph.iterblocks():
+ if block.operations:
+ op = block.operations[0]
+ assert op.opname == 'simple_call'
+ assert op.args[0] == Constant(g)
+
class TestFlowObjSpaceDelay(Base):
def setup_class(cls):
Modified: pypy/release/1.2.x/pypy/rlib/runicode.py
==============================================================================
--- pypy/release/1.2.x/pypy/rlib/runicode.py (original)
+++ pypy/release/1.2.x/pypy/rlib/runicode.py Mon Mar 8 17:10:56 2010
@@ -16,26 +16,28 @@
# when sizeof(wchar_t) == 4.
# Note that Python3 uses a similar implementation.
def UNICHR(c):
- if we_are_translated():
+ assert not we_are_translated()
+ if c < sys.maxunicode or c > MAXUNICODE:
return unichr(c)
else:
- if c < sys.maxunicode or c > MAXUNICODE:
- return unichr(c)
- else:
- c -= 0x10000
- return (unichr(0xD800 + (c >> 10)) +
- unichr(0xDC00 + (c & 0x03FF)))
+ c -= 0x10000
+ return (unichr(0xD800 + (c >> 10)) +
+ unichr(0xDC00 + (c & 0x03FF)))
+ UNICHR._flowspace_rewrite_directly_as_ = unichr
+ # ^^^ NB.: for translation, it's essential to use this hack instead
+ # of calling unichr() from UNICHR(), because unichr() detects if there
+ # is a "try:except ValueError" immediately around it.
def ORD(u):
- if we_are_translated():
- return ord(u)
- else:
- if isinstance(u, unicode) and len(u) == 2:
- ch1 = ord(u[0])
- ch2 = ord(u[1])
- if 0xD800 <= ch1 <= 0xDBFF and 0xDC00 <= ch2 <= 0xDFFF:
- return (((ch1 - 0xD800) << 10) | (ch2 - 0xDC00)) + 0x10000
- return ord(u)
+ assert not we_are_translated()
+ if isinstance(u, unicode) and len(u) == 2:
+ ch1 = ord(u[0])
+ ch2 = ord(u[1])
+ if 0xD800 <= ch1 <= 0xDBFF and 0xDC00 <= ch2 <= 0xDFFF:
+ return (((ch1 - 0xD800) << 10) | (ch2 - 0xDC00)) + 0x10000
+ return ord(u)
+ ORD._flowspace_rewrite_directly_as_ = ord
+
else:
UNICHR = unichr
ORD = ord
Modified: pypy/release/1.2.x/pypy/rpython/lltypesystem/module/ll_math.py
==============================================================================
--- pypy/release/1.2.x/pypy/rpython/lltypesystem/module/ll_math.py (original)
+++ pypy/release/1.2.x/pypy/rpython/lltypesystem/module/ll_math.py Mon Mar 8 17:10:56 2010
@@ -7,6 +7,7 @@
from pypy.tool.sourcetools import func_with_new_name
from pypy.rlib import rposix
from pypy.translator.tool.cbuild import ExternalCompilationInfo
+from pypy.rlib.rarithmetic import isinf
math_frexp = rffi.llexternal('frexp', [rffi.DOUBLE, rffi.INTP], rffi.DOUBLE,
sandboxsafe=True)
@@ -26,16 +27,24 @@
def ll_math_frexp(x):
exp_p = lltype.malloc(rffi.INTP.TO, 1, flavor='raw')
- mantissa = math_frexp(x, exp_p)
- exponent = rffi.cast(lltype.Signed, exp_p[0])
- lltype.free(exp_p, flavor='raw')
+ try:
+ _error_reset()
+ mantissa = math_frexp(x, exp_p)
+ _check_error(mantissa)
+ exponent = rffi.cast(lltype.Signed, exp_p[0])
+ finally:
+ lltype.free(exp_p, flavor='raw')
return (mantissa, exponent)
def ll_math_modf(x):
intpart_p = lltype.malloc(rffi.DOUBLEP.TO, 1, flavor='raw')
- fracpart = math_modf(x, intpart_p)
- intpart = intpart_p[0]
- lltype.free(intpart_p, flavor='raw')
+ try:
+ _error_reset()
+ fracpart = math_modf(x, intpart_p)
+ _check_error(fracpart)
+ intpart = intpart_p[0]
+ finally:
+ lltype.free(intpart_p, flavor='raw')
return (fracpart, intpart)
def ll_math_ldexp(x, exp):
@@ -50,6 +59,8 @@
ERANGE = errno.ERANGE
def _check_error(x):
errno = rposix.get_errno()
+ if isinf(x):
+ errno = ERANGE
if errno:
if errno == ERANGE:
if not x:
Modified: pypy/release/1.2.x/pypy/rpython/lltypesystem/module/test/test_ll_math.py
==============================================================================
--- pypy/release/1.2.x/pypy/rpython/lltypesystem/module/test/test_ll_math.py (original)
+++ pypy/release/1.2.x/pypy/rpython/lltypesystem/module/test/test_ll_math.py Mon Mar 8 17:10:56 2010
@@ -45,3 +45,26 @@
# underflows give 0.0 with no exception raised
assert f(1.0, -10000) == 0.0 # sanity-check the host Python
assert self.interpret(f, [1.0, -10000]) == 0.0
+
+ def test_overflow_1(self):
+ # this (probably, depending on platform) tests the case
+ # where the C function pow() sets ERANGE.
+ def f(x, y):
+ try:
+ return math.pow(x, y)
+ except OverflowError:
+ return -42.0
+
+ assert self.interpret(f, [10.0, 40000.0]) == -42.0
+
+ def test_overflow_2(self):
+ # this (not on Linux but on Mac OS/X at least) tests the case
+ # where the C function ldexp() does not set ERANGE, but
+ # returns +infinity.
+ def f(x, y):
+ try:
+ return math.ldexp(x, y)
+ except OverflowError:
+ return -42.0
+
+ assert self.interpret(f, [10.0, 40000]) == -42.0
Modified: pypy/release/1.2.x/pypy/translator/c/test/test_typed.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/c/test/test_typed.py (original)
+++ pypy/release/1.2.x/pypy/translator/c/test/test_typed.py Mon Mar 8 17:10:56 2010
@@ -212,6 +212,18 @@
assert fn(-12) == -42
assert fn(sys.maxint) == -42
+ def test_UNICHR(self):
+ from pypy.rlib.runicode import UNICHR
+ def f(x):
+ try:
+ return ord(UNICHR(x))
+ except ValueError:
+ return -42
+ fn = self.getcompiled(f, [int])
+ assert fn(65) == 65
+ assert fn(-12) == -42
+ assert fn(sys.maxint) == -42
+
def test_list_indexerror(self):
def f(i):
lst = [123, 456]
From arigo at codespeak.net Mon Mar 8 17:12:05 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 17:12:05 +0100 (CET)
Subject: [pypy-svn] r71892 - in pypy/release/1.2.x: ctypes_configure
ctypes_configure/test pypy/lib pypy/lib/app_test
pypy/lib/ctypes_config_cache
pypy/lib/ctypes_config_cache/test pypy/module/imp
pypy/module/imp/test pypy/translator/goal
pypy/translator/sandbox pypy/translator/sandbox/test
Message-ID: <20100308161205.8CCB451054@codespeak.net>
Author: arigo
Date: Mon Mar 8 17:12:03 2010
New Revision: 71892
Added:
pypy/release/1.2.x/ctypes_configure/dumpcache.py
- copied unchanged from r71873, pypy/trunk/ctypes_configure/dumpcache.py
pypy/release/1.2.x/ctypes_configure/test/test_dumpcache.py
- copied unchanged from r71873, pypy/trunk/ctypes_configure/test/test_dumpcache.py
pypy/release/1.2.x/pypy/lib/app_test/test_syslog.py
- copied unchanged from r71873, pypy/trunk/pypy/lib/app_test/test_syslog.py
pypy/release/1.2.x/pypy/lib/ctypes_config_cache/ (props changed)
- copied from r71873, pypy/trunk/pypy/lib/ctypes_config_cache/
Removed:
pypy/release/1.2.x/pypy/lib/ctypes_configure
Modified:
pypy/release/1.2.x/ctypes_configure/cbuild.py
pypy/release/1.2.x/ctypes_configure/configure.py
pypy/release/1.2.x/pypy/lib/_hashlib.py
pypy/release/1.2.x/pypy/lib/_locale.py
pypy/release/1.2.x/pypy/lib/app_test/test_hashlib.py
pypy/release/1.2.x/pypy/lib/app_test/test_locale.py
pypy/release/1.2.x/pypy/lib/app_test/test_pyexpat.py
pypy/release/1.2.x/pypy/lib/app_test/test_resource.py
pypy/release/1.2.x/pypy/lib/ctypes_config_cache/test/ (props changed)
pypy/release/1.2.x/pypy/lib/pyexpat.py
pypy/release/1.2.x/pypy/lib/resource.py
pypy/release/1.2.x/pypy/lib/syslog.py
pypy/release/1.2.x/pypy/module/imp/importing.py
pypy/release/1.2.x/pypy/module/imp/test/test_import.py
pypy/release/1.2.x/pypy/translator/goal/targetpypystandalone.py
pypy/release/1.2.x/pypy/translator/sandbox/pypy_interact.py
pypy/release/1.2.x/pypy/translator/sandbox/test/test_pypy_interact.py
pypy/release/1.2.x/pypy/translator/sandbox/test/test_vfs.py
pypy/release/1.2.x/pypy/translator/sandbox/vfs.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71868:71873
Modified: pypy/release/1.2.x/ctypes_configure/cbuild.py
==============================================================================
--- pypy/release/1.2.x/ctypes_configure/cbuild.py (original)
+++ pypy/release/1.2.x/ctypes_configure/cbuild.py Mon Mar 8 17:12:03 2010
@@ -5,7 +5,7 @@
debug = 0
-configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure')
+configdir = py.path.local.make_numbered_dir(prefix='ctypes_configure-')
class ExternalCompilationInfo(object):
Modified: pypy/release/1.2.x/ctypes_configure/configure.py
==============================================================================
--- pypy/release/1.2.x/ctypes_configure/configure.py (original)
+++ pypy/release/1.2.x/ctypes_configure/configure.py Mon Mar 8 17:12:03 2010
@@ -164,7 +164,7 @@
for key in dir(CConfig):
value = getattr(CConfig, key)
if isinstance(value, CConfigEntry):
- entries.append((key, value))
+ entries.append((key, value))
if entries: # can be empty if there are only CConfigSingleEntries
writer = _CWriter(CConfig)
@@ -201,7 +201,6 @@
writer = _CWriter(CConfig)
writer.write_header()
res[key] = value.question(writer.ask_gcc)
-
return res
# ____________________________________________________________
@@ -210,7 +209,6 @@
class CConfigEntry(object):
"Abstract base class."
-
class Struct(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined structure.
@@ -313,7 +311,6 @@
S.__name__ = name
return S
-
class SimpleType(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined simple numeric type.
@@ -350,7 +347,6 @@
ctype = fixup_ctype(ctype, self.name, (size, sign))
return ctype
-
class ConstantInteger(CConfigEntry):
"""An entry in a CConfig class that stands for an externally
defined integer constant.
Modified: pypy/release/1.2.x/pypy/lib/_hashlib.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/_hashlib.py (original)
+++ pypy/release/1.2.x/pypy/lib/_hashlib.py Mon Mar 8 17:12:03 2010
@@ -1,6 +1,8 @@
from ctypes import *
import ctypes.util
-from ctypes_configure import configure
+
+# load the platform-specific cache made by running hashlib.ctc.py
+from ctypes_config_cache._hashlib_cache import *
# Note: OpenSSL on OS X only provides md5 and sha1
libpath = ctypes.util.find_library('ssl')
@@ -16,18 +18,6 @@
else:
return buffer(x)[:]
-class CConfig:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes=['openssl/evp.h'],
- )
- EVP_MD = configure.Struct('EVP_MD',
- [])
- EVP_MD_CTX = configure.Struct('EVP_MD_CTX',
- [('digest', c_void_p)])
-c = configure.configure(CConfig)
-EVP_MD_CTX = c['EVP_MD_CTX']
-EVP_MD = c['EVP_MD']
-
def patch_fields(fields):
res = []
for k, v in fields:
@@ -39,7 +29,6 @@
class EVP_MD_CTX(Structure):
_fields_ = patch_fields(EVP_MD_CTX._fields_)
-del c
# OpenSSL initialization
lib.OpenSSL_add_all_digests()
Modified: pypy/release/1.2.x/pypy/lib/_locale.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/_locale.py (original)
+++ pypy/release/1.2.x/pypy/lib/_locale.py Mon Mar 8 17:12:03 2010
@@ -7,48 +7,16 @@
c_ubyte, c_int, c_char_p, c_wchar_p)
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
-from ctypes_configure.configure import (configure, ExternalCompilationInfo,
- ConstantInteger, DefinedConstantInteger, SimpleType)
+
+# load the platform-specific cache made by running locale.ctc.py
+from ctypes_config_cache._locale_cache import *
+
size_t = c_int
# XXX check where this comes from
CHAR_MAX = 127
-_CONSTANTS = (
- 'LC_CTYPE',
- 'LC_NUMERIC',
- 'LC_TIME',
- 'LC_COLLATE',
- 'LC_MONETARY',
- 'LC_MESSAGES',
- 'LC_ALL',
- 'LC_PAPER',
- 'LC_NAME',
- 'LC_ADDRESS',
- 'LC_TELEPHONE',
- 'LC_MEASUREMENT',
- 'LC_IDENTIFICATION',
-)
-
-class LocaleConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
-for key in _CONSTANTS:
- setattr(LocaleConfigure, key, ConstantInteger(key))
-
-try:
- locale_config = configure(LocaleConfigure, noerr=True)
-except Exception, e:
- # should probably be moved into configure()
- # as an optional feature
- raise ImportError("%s: %s" % (e.__class__, e))
-
-for key in _CONSTANTS:
- globals()[key] = locale_config[key]
-del LocaleConfigure
-del locale_config
-
-HAS_LANGINFO = True
# Ubuntu Gusty i386 structure
class lconv(Structure):
@@ -288,29 +256,6 @@
raise NotImplementedError()
if HAS_LANGINFO:
- # this is incomplete list
- langinfo_names = ('CODESET D_T_FMT D_FMT T_FMT RADIXCHAR THOUSEP '
- 'YESEXPR NOEXPR CRNCYSTR').split(" ")
- for i in range(1, 8):
- langinfo_names.append("DAY_%d" % i)
- langinfo_names.append("ABDAY_%d" % i)
- for i in range(1, 13):
- langinfo_names.append("MON_%d" % i)
- langinfo_names.append("ABMON_%d" % i)
-
- class LanginfoConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
- nl_item = SimpleType('nl_item')
- for key in langinfo_names:
- setattr(LanginfoConfigure, key, ConstantInteger(key))
-
- config = configure(LanginfoConfigure)
- nl_item = config['nl_item']
- for key in langinfo_names:
- globals()[key] = config[key]
- del LanginfoConfigure
- del config
-
_nl_langinfo = libc.nl_langinfo
_nl_langinfo.argtypes = (nl_item,)
_nl_langinfo.restype = c_char_p
@@ -369,9 +314,8 @@
'setlocale', 'localeconv', 'strxfrm', 'strcoll',
'gettext', 'dgettext', 'dcgettext', 'textdomain',
'bindtextdomain', 'CHAR_MAX',
-) + _CONSTANTS + tuple(langinfo_names)
+) + ALL_CONSTANTS
if _bind_textdomain_codeset:
__all__ += ('bind_textdomain_codeset',)
if HAS_LANGINFO:
__all__ += ('nl_langinfo',)
-
Modified: pypy/release/1.2.x/pypy/lib/app_test/test_hashlib.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/app_test/test_hashlib.py (original)
+++ pypy/release/1.2.x/pypy/lib/app_test/test_hashlib.py Mon Mar 8 17:12:03 2010
@@ -1,3 +1,6 @@
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('hashlib.ctc.py')
+
from pypy.lib import hashlib, _hashlib
def test_unicode():
Modified: pypy/release/1.2.x/pypy/lib/app_test/test_locale.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/app_test/test_locale.py (original)
+++ pypy/release/1.2.x/pypy/lib/app_test/test_locale.py Mon Mar 8 17:12:03 2010
@@ -1,14 +1,19 @@
import py
-import locale
import sys
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('locale.ctc.py')
+
+from pypy.lib import _locale
+
+
def setup_module(mod):
if sys.platform == 'darwin':
py.test.skip("Locale support on MacOSX is minimal and cannot be tested")
class TestLocale:
def setup_class(cls):
- cls.oldlocale = locale.setlocale(locale.LC_NUMERIC)
+ cls.oldlocale = _locale.setlocale(_locale.LC_NUMERIC)
if sys.platform.startswith("win"):
cls.tloc = "en"
elif sys.platform.startswith("freebsd"):
@@ -16,14 +21,15 @@
else:
cls.tloc = "en_US.UTF8"
try:
- locale.setlocale(locale.LC_NUMERIC, cls.tloc)
- except locale.Error:
+ _locale.setlocale(_locale.LC_NUMERIC, cls.tloc)
+ except _locale.Error:
py.test.skip("test locale %s not supported" % cls.tloc)
def teardown_class(cls):
- locale.setlocale(locale.LC_NUMERIC, cls.oldlocale)
+ _locale.setlocale(_locale.LC_NUMERIC, cls.oldlocale)
def test_format(self):
+ py.test.skip("XXX fix or kill me")
def testformat(formatstr, value, grouping = 0, output=None):
if output:
@@ -41,8 +47,11 @@
testformat("%20.f", -42, grouping=1, output=' -42')
testformat("%+10.f", -4200, grouping=1, output=' -4,200')
testformat("%-10.f", 4200, grouping=1, output='4,200 ')
- # Invoke getpreferredencoding to make sure it does not cause exceptions,
- locale.getpreferredencoding()
+
+ def test_getpreferredencoding(self):
+ py.test.skip("XXX fix or kill me")
+ # Invoke getpreferredencoding to make sure it does not cause exceptions
+ _locale.getpreferredencoding()
# Test BSD Rune locale's bug for isctype functions.
def test_bsd_bug(self):
@@ -51,8 +60,8 @@
result = getattr(s, method)()
assert result == output
- oldlocale = locale.setlocale(locale.LC_CTYPE)
- locale.setlocale(locale.LC_CTYPE, self.tloc)
+ oldlocale = _locale.setlocale(_locale.LC_CTYPE)
+ _locale.setlocale(_locale.LC_CTYPE, self.tloc)
try:
teststrop('\x20', 'isspace', True)
teststrop('\xa0', 'isspace', False)
@@ -66,4 +75,4 @@
teststrop('\xcc\x85', 'lower', '\xcc\x85')
teststrop('\xed\x95\xa0', 'upper', '\xed\x95\xa0')
finally:
- locale.setlocale(locale.LC_CTYPE, oldlocale)
+ _locale.setlocale(_locale.LC_CTYPE, oldlocale)
Modified: pypy/release/1.2.x/pypy/lib/app_test/test_pyexpat.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/app_test/test_pyexpat.py (original)
+++ pypy/release/1.2.x/pypy/lib/app_test/test_pyexpat.py Mon Mar 8 17:12:03 2010
@@ -4,6 +4,9 @@
import StringIO, sys
import unittest, py
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('pyexpat.ctc.py')
+
from pypy.lib import pyexpat
#from xml.parsers import expat
expat = pyexpat
Modified: pypy/release/1.2.x/pypy/lib/app_test/test_resource.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/app_test/test_resource.py (original)
+++ pypy/release/1.2.x/pypy/lib/app_test/test_resource.py Mon Mar 8 17:12:03 2010
@@ -1,3 +1,6 @@
+from pypy.lib.ctypes_config_cache import rebuild
+rebuild.rebuild_one('resource.ctc.py')
+
from pypy.lib import resource
def test_resource():
Modified: pypy/release/1.2.x/pypy/lib/pyexpat.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/pyexpat.py (original)
+++ pypy/release/1.2.x/pypy/lib/pyexpat.py Mon Mar 8 17:12:03 2010
@@ -1,46 +1,15 @@
import ctypes
import ctypes.util
-from ctypes_configure import configure
from ctypes import c_char_p, c_int, c_void_p, POINTER, c_char, c_wchar_p
import sys
+# load the platform-specific cache made by running pyexpat.ctc.py
+from ctypes_config_cache._pyexpat_cache import *
+
+
lib = ctypes.CDLL(ctypes.util.find_library('expat'))
-class CConfigure:
- _compilation_info_ = configure.ExternalCompilationInfo(
- includes = ['expat.h'],
- libraries = ['expat'],
- pre_include_lines = [
- '#define XML_COMBINED_VERSION (10000*XML_MAJOR_VERSION+100*XML_MINOR_VERSION+XML_MICRO_VERSION)'],
- )
-
- XML_Char = configure.SimpleType('XML_Char', ctypes.c_char)
- XML_COMBINED_VERSION = configure.ConstantInteger('XML_COMBINED_VERSION')
- for name in ['XML_PARAM_ENTITY_PARSING_NEVER',
- 'XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE',
- 'XML_PARAM_ENTITY_PARSING_ALWAYS']:
- locals()[name] = configure.ConstantInteger(name)
-
- XML_Encoding = configure.Struct('XML_Encoding',[
- ('data', c_void_p),
- ('convert', c_void_p),
- ('release', c_void_p),
- ('map', c_int * 256)])
- XML_Content = configure.Struct('XML_Content',[
- ('numchildren', c_int),
- ('children', c_void_p),
- ('name', c_char_p),
- ('type', c_int),
- ('quant', c_int),
- ])
- # this is insanely stupid
- XML_FALSE = configure.ConstantInteger('XML_FALSE')
- XML_TRUE = configure.ConstantInteger('XML_TRUE')
-
-info = configure.configure(CConfigure)
-for k, v in info.items():
- globals()[k] = v
XML_Content.children = POINTER(XML_Content)
XML_Parser = ctypes.c_void_p # an opaque pointer
Modified: pypy/release/1.2.x/pypy/lib/resource.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/resource.py (original)
+++ pypy/release/1.2.x/pypy/lib/resource.py Mon Mar 8 17:12:03 2010
@@ -2,45 +2,18 @@
if sys.platform == 'win32':
raise ImportError('resource module not available for win32')
+# load the platform-specific cache made by running resource.ctc.py
+from ctypes_config_cache._resource_cache import *
+
from ctypes_support import standard_c_lib as libc
from ctypes_support import get_errno
from ctypes import Structure, c_int, c_long, byref, sizeof
from errno import EINVAL, EPERM
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger,
- SimpleType)
import _structseq
class error(Exception):
pass
-_CONSTANTS = (
- 'RLIM_INFINITY',
- 'RLIM_NLIMITS',
-)
-_OPTIONAL_CONSTANTS = (
- 'RLIMIT_CPU',
- 'RLIMIT_FSIZE',
- 'RLIMIT_DATA',
- 'RLIMIT_STACK',
- 'RLIMIT_CORE',
- 'RLIMIT_RSS',
- 'RLIMIT_NPROC',
- 'RLIMIT_NOFILE',
- 'RLIMIT_OFILE',
- 'RLIMIT_MEMLOCK',
- 'RLIMIT_AS',
- 'RLIMIT_LOCKS',
- 'RLIMIT_SIGPENDING',
- 'RLIMIT_MSGQUEUE',
- 'RLIMIT_NICE',
- 'RLIMIT_RTPRIO',
- 'RLIMIT_VMEM',
-
- 'RUSAGE_BOTH',
- 'RUSAGE_SELF',
- 'RUSAGE_CHILDREN',
-)
# Read required libc functions
_getrusage = libc.getrusage
@@ -52,27 +25,6 @@
from os import sysconf
_getpagesize = None
-# Setup our configure
-class ResourceConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/resource.h'])
- rlim_t = SimpleType('rlim_t')
-for key in _CONSTANTS:
- setattr(ResourceConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(ResourceConfigure, key, DefinedConstantInteger(key))
-
-# Configure constants and types
-config = configure(ResourceConfigure)
-rlim_t = config['rlim_t']
-sizeof_rlim_t = 1<<(sizeof(rlim_t) * 8)
-for key in _CONSTANTS:
- globals()[key] = config[key]
-optional_constants = []
-for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- globals()[key] = config[key]
- optional_constants.append(key)
-del config
class timeval(Structure):
_fields_ = (
@@ -126,9 +78,9 @@
ru_nivcsw = _structseq.structseqfield(15)
def rlimit_check_bounds(rlim_cur, rlim_max):
- if rlim_cur > sizeof_rlim_t:
+ if rlim_cur > rlim_t_max:
raise ValueError("%d does not fit into rlim_t" % rlim_cur)
- if rlim_max > sizeof_rlim_t:
+ if rlim_max > rlim_t_max:
raise ValueError("%d does not fit into rlim_t" % rlim_max)
class rlimit(Structure):
@@ -202,10 +154,9 @@
# Irix 5.3 has _SC_PAGESIZE, but not _SC_PAGE_SIZE
return sysconf("SC_PAGESIZE")
-__all__ = _CONSTANTS + tuple(optional_constants) + (
+__all__ = ALL_CONSTANTS + (
'error', 'timeval', 'struct_rusage', 'rlimit',
'getrusage', 'getrlimit', 'setrlimit', 'getpagesize',
)
-del optional_constants
-
+del ALL_CONSTANTS
Modified: pypy/release/1.2.x/pypy/lib/syslog.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/syslog.py (original)
+++ pypy/release/1.2.x/pypy/lib/syslog.py Mon Mar 8 17:12:03 2010
@@ -9,79 +9,11 @@
if sys.platform == 'win32':
raise ImportError("No syslog on Windows")
+# load the platform-specific cache made by running syslog.ctc.py
+from ctypes_config_cache._syslog_cache import *
+
from ctypes_support import standard_c_lib as libc
from ctypes import c_int, c_char_p
-from ctypes_configure.configure import (configure,
- ExternalCompilationInfo, ConstantInteger, DefinedConstantInteger)
-
-_CONSTANTS = (
- 'LOG_EMERG',
- 'LOG_ALERT',
- 'LOG_CRIT',
- 'LOG_ERR',
- 'LOG_WARNING',
- 'LOG_NOTICE',
- 'LOG_INFO',
- 'LOG_DEBUG',
-
- 'LOG_PID',
- 'LOG_CONS',
- 'LOG_NDELAY',
-
- 'LOG_KERN',
- 'LOG_USER',
- 'LOG_MAIL',
- 'LOG_DAEMON',
- 'LOG_AUTH',
- 'LOG_LPR',
- 'LOG_LOCAL0',
- 'LOG_LOCAL1',
- 'LOG_LOCAL2',
- 'LOG_LOCAL3',
- 'LOG_LOCAL4',
- 'LOG_LOCAL5',
- 'LOG_LOCAL6',
- 'LOG_LOCAL7',
-)
-_OPTIONAL_CONSTANTS = (
- 'LOG_NOWAIT',
- 'LOG_PERROR',
-
- 'LOG_SYSLOG',
- 'LOG_CRON',
- 'LOG_UUCP',
- 'LOG_NEWS',
-)
-
-# Constant aliases if there are not defined
-_ALIAS = (
- ('LOG_SYSLOG', 'LOG_DAEMON'),
- ('LOG_CRON', 'LOG_DAEMON'),
- ('LOG_NEWS', 'LOG_MAIL'),
- ('LOG_UUCP', 'LOG_MAIL'),
-)
-
-class SyslogConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['sys/syslog.h'])
-for key in _CONSTANTS:
- setattr(SyslogConfigure, key, ConstantInteger(key))
-for key in _OPTIONAL_CONSTANTS:
- setattr(SyslogConfigure, key, DefinedConstantInteger(key))
-
-config = configure(SyslogConfigure)
-for key in _CONSTANTS:
- globals()[key] = config[key]
-optional_constants = []
-for key in _OPTIONAL_CONSTANTS:
- if config[key] is not None:
- globals()[key] = config[key]
- optional_constants.append(key)
-for alias, key in _ALIAS:
- if alias in optional_constants:
- continue
- globals()[alias] = globals()[key]
- optional_constants.append(alias)
-del config
# Real prototype is:
# void syslog(int priority, const char *format, ...);
@@ -124,9 +56,8 @@
def LOG_UPTO(pri):
return (1 << (pri + 1)) - 1
-__all__ = _CONSTANTS + tuple(optional_constants) + (
+__all__ = ALL_CONSTANTS + (
'openlog', 'syslog', 'closelog', 'setlogmask',
'LOG_MASK', 'LOG_UPTO')
-del optional_constants
-
+del ALL_CONSTANTS
Modified: pypy/release/1.2.x/pypy/module/imp/importing.py
==============================================================================
--- pypy/release/1.2.x/pypy/module/imp/importing.py (original)
+++ pypy/release/1.2.x/pypy/module/imp/importing.py Mon Mar 8 17:12:03 2010
@@ -648,9 +648,9 @@
d = x & 0xff
stream.write(chr(a) + chr(b) + chr(c) + chr(d))
-def check_compiled_module(space, pycfilename, expected_mtime=0):
+def check_compiled_module(space, pycfilename, expected_mtime):
"""
- Check if a pyc file's magic number and (optionally) mtime match.
+ Check if a pyc file's magic number and mtime match.
"""
stream = None
try:
@@ -659,11 +659,10 @@
if magic != get_pyc_magic(space):
stream.close()
return None
- if expected_mtime != 0:
- pyc_mtime = _r_long(stream)
- if pyc_mtime != expected_mtime:
- stream.close()
- return None
+ pyc_mtime = _r_long(stream)
+ if pyc_mtime != expected_mtime:
+ stream.close()
+ return None
return stream
except StreamErrors:
if stream:
Modified: pypy/release/1.2.x/pypy/module/imp/test/test_import.py
==============================================================================
--- pypy/release/1.2.x/pypy/module/imp/test/test_import.py (original)
+++ pypy/release/1.2.x/pypy/module/imp/test/test_import.py Mon Mar 8 17:12:03 2010
@@ -496,6 +496,12 @@
cpathname,
mtime+1)
assert ret is None
+
+ # also check with expected mtime==0 (nothing special any more about 0)
+ ret = importing.check_compiled_module(space,
+ cpathname,
+ 0)
+ assert ret is None
os.remove(cpathname)
# check for wrong version
Modified: pypy/release/1.2.x/pypy/translator/goal/targetpypystandalone.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/goal/targetpypystandalone.py (original)
+++ pypy/release/1.2.x/pypy/translator/goal/targetpypystandalone.py Mon Mar 8 17:12:03 2010
@@ -186,6 +186,10 @@
#elif config.objspace.usemodules.clr:
# config.translation.backend == "cli"
+ if config.translation.sandbox:
+ config.objspace.lonepycfiles = False
+ config.objspace.usepycfiles = False
+
config.objspace.nofaking = True
config.objspace.compiler = "ast"
config.translating = True
@@ -216,6 +220,9 @@
return PyPyJitPolicy()
def get_entry_point(self, config):
+ from pypy.lib.ctypes_config_cache import rebuild
+ rebuild.try_rebuild()
+
space = make_objspace(config)
# manually imports app_main.py
Modified: pypy/release/1.2.x/pypy/translator/sandbox/pypy_interact.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/sandbox/pypy_interact.py (original)
+++ pypy/release/1.2.x/pypy/translator/sandbox/pypy_interact.py Mon Mar 8 17:12:03 2010
@@ -45,18 +45,21 @@
# * can access its own executable
# * can access the pure Python libraries
# * can access the temporary usession directory as /tmp
+ exclude = ['.pyc', '.pyo']
if self.tmpdir is None:
tmpdirnode = Dir({})
else:
- tmpdirnode = RealDir(self.tmpdir)
+ tmpdirnode = RealDir(self.tmpdir, exclude=exclude)
pypydist = os.path.dirname(os.path.abspath(autopath.pypydir))
return Dir({
'bin': Dir({
'pypy-c': RealFile(self.executable),
- 'lib-python': RealDir(os.path.join(pypydist, 'lib-python')),
+ 'lib-python': RealDir(os.path.join(pypydist, 'lib-python'),
+ exclude=exclude),
'pypy': Dir({
- 'lib': RealDir(os.path.join(pypydist, 'pypy', 'lib')),
+ 'lib': RealDir(os.path.join(pypydist, 'pypy', 'lib'),
+ exclude=exclude),
}),
}),
'tmp': tmpdirnode,
Modified: pypy/release/1.2.x/pypy/translator/sandbox/test/test_pypy_interact.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/sandbox/test/test_pypy_interact.py (original)
+++ pypy/release/1.2.x/pypy/translator/sandbox/test/test_pypy_interact.py Mon Mar 8 17:12:03 2010
@@ -36,6 +36,12 @@
assert_(False, "os.stat('site') should have failed")
st = os.stat('/bin/lib-python/modified-2.5.2/site.py')
assert_(stat.S_ISREG(st.st_mode), "bad st_mode for .../site.py")
+ try:
+ os.stat('/bin/lib-python/modified-2.5.2/site.pyc')
+ except OSError:
+ pass
+ else:
+ assert_(False, "os.stat('....pyc') should have failed")
fd = os.open('/bin/lib-python/modified-2.5.2/site.py', os.O_RDONLY, 0666)
length = 8192
ofs = 0
Modified: pypy/release/1.2.x/pypy/translator/sandbox/test/test_vfs.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/sandbox/test/test_vfs.py (original)
+++ pypy/release/1.2.x/pypy/translator/sandbox/test/test_vfs.py Mon Mar 8 17:12:03 2010
@@ -90,3 +90,19 @@
else:
py.test.raises(OSError, v_test_vfs.join, '.hidden')
py.test.raises(OSError, v_test_vfs.join, '.subdir2')
+
+def test_realdir_exclude():
+ xdir = udir.ensure('test_realdir_exclude', dir=1)
+ xdir.ensure('test_realdir_exclude.yes')
+ xdir.ensure('test_realdir_exclude.no')
+ v_udir = RealDir(str(udir), exclude=['.no'])
+ v_xdir = v_udir.join('test_realdir_exclude')
+ assert 'test_realdir_exclude.yes' in v_xdir.keys()
+ assert 'test_realdir_exclude.no' not in v_xdir.keys()
+ v_xdir.join('test_realdir_exclude.yes') # works
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.no')
+ # Windows and Mac tests, for the case
+ py.test.raises(OSError, v_xdir.join, 'Test_RealDir_Exclude.no')
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.No')
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.nO')
+ py.test.raises(OSError, v_xdir.join, 'test_realdir_exclude.NO')
Modified: pypy/release/1.2.x/pypy/translator/sandbox/vfs.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/sandbox/vfs.py (original)
+++ pypy/release/1.2.x/pypy/translator/sandbox/vfs.py Mon Mar 8 17:12:03 2010
@@ -64,21 +64,30 @@
# with '.' simply don't exist. If follow_links=True, then symlinks are
# transparently followed (they look like a regular file or directory to
# the sandboxed process). If follow_links=False, the subprocess is
- # not allowed to access them at all.
- def __init__(self, path, show_dotfiles=False, follow_links=False):
+ # not allowed to access them at all. Finally, exclude is a list of
+ # file endings that we filter out (note that we also filter out files
+ # with the same ending but a different case, to be safe).
+ def __init__(self, path, show_dotfiles=False, follow_links=False,
+ exclude=[]):
self.path = path
self.show_dotfiles = show_dotfiles
self.follow_links = follow_links
+ self.exclude = [excl.lower() for excl in exclude]
def __repr__(self):
return '' % (self.path,)
def keys(self):
names = os.listdir(self.path)
if not self.show_dotfiles:
names = [name for name in names if not name.startswith('.')]
+ for excl in self.exclude:
+ names = [name for name in names if not name.lower().endswith(excl)]
return names
def join(self, name):
if name.startswith('.') and not self.show_dotfiles:
raise OSError(errno.ENOENT, name)
+ for excl in self.exclude:
+ if name.lower().endswith(excl):
+ raise OSError(errno.ENOENT, name)
path = os.path.join(self.path, name)
if self.follow_links:
st = os.stat(path)
@@ -86,7 +95,8 @@
st = os.lstat(path)
if stat.S_ISDIR(st.st_mode):
return RealDir(path, show_dotfiles = self.show_dotfiles,
- follow_links = self.follow_links)
+ follow_links = self.follow_links,
+ exclude = self.exclude)
elif stat.S_ISREG(st.st_mode):
return RealFile(path)
else:
From arigo at codespeak.net Mon Mar 8 18:27:53 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Mon, 8 Mar 2010 18:27:53 +0100 (CET)
Subject: [pypy-svn] r71898 - in pypy/branch/jit-constptr/pypy/jit/backend:
llsupport llsupport/test x86 x86/test
Message-ID: <20100308172753.EAE1C51054@codespeak.net>
Author: arigo
Date: Mon Mar 8 18:27:52 2010
New Revision: 71898
Modified:
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py
pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py
pypy/branch/jit-constptr/pypy/jit/backend/x86/regalloc.py
pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_gc_integration.py
pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py
Log:
Intermediate stage. Random progress, but I still need to write tests
and implement code that notes where in the assembler the
convert_to_imm(ConstPtr(..)) results get written to.
Modified: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/gcframework.py Mon Mar 8 18:27:52 2010
@@ -48,24 +48,22 @@
def __init__(self, layoutbuilder):
self.constgcref_array_type_id = layoutbuilder.get_type_id(
self.CONSTGCREF_ARRAY)
- self.full_constgcref_array_type_id = llop.combine_ushort(
- lltype.Signed,
- self.constgcref_array_type_id,
- 0)
def _freeze_(self):
return True
def start_tracing_varsized_part(self, obj, typeid):
"""Called by the GC just before tracing the object 'obj'."""
- fulltypeid = llop.combine_ushort(lltype.Signed, typeid, 0)
- if fulltypeid == self.full_constgcref_array_type_id:
+ fulltypeid = rffi.cast(lltype.Signed, typeid)
+ reftypeid = rffi.cast(lltype.Signed, self.constgcref_array_type_id)
+ if fulltypeid == reftypeid:
self.do_start_stop_tracing(obj, False)
def stop_tracing_varsized_part(self, obj, typeid):
"""Called by the GC just after tracing the object 'obj'."""
- fulltypeid = llop.combine_ushort(lltype.Signed, typeid, 0)
- if fulltypeid == self.full_constgcref_array_type_id:
+ fulltypeid = rffi.cast(lltype.Signed, typeid)
+ reftypeid = rffi.cast(lltype.Signed, self.constgcref_array_type_id)
+ if fulltypeid == reftypeid:
self.do_start_stop_tracing(obj, True)
def do_start_stop_tracing(self, obj, done):
Modified: pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/llsupport/test/test_gc.py Mon Mar 8 18:27:52 2010
@@ -186,7 +186,7 @@
class FakeTranslator:
config = config_
class FakeCPU:
- GC_SUPPORTED_CONSTPTR = {rop.SAME_AS: None}
+ pass
gcdescr = get_description(config_)
translator = FakeTranslator()
llop1 = FakeLLOp()
Modified: pypy/branch/jit-constptr/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/x86/regalloc.py Mon Mar 8 18:27:52 2010
@@ -41,7 +41,7 @@
if isinstance(c, ConstInt):
return imm(c.value)
elif isinstance(c, ConstPtr):
- if we_are_translated() and c.value and rgc.can_move(c.value):
+ if we_are_translated() and c.value:
print "convert_to_imm: ConstPtr needs special care"
raise AssertionError
return imm(rffi.cast(lltype.Signed, c.value))
Modified: pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_gc_integration.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_gc_integration.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_gc_integration.py Mon Mar 8 18:27:52 2010
@@ -15,7 +15,7 @@
from pypy.rpython.annlowlevel import llhelper
from pypy.rpython.lltypesystem import rclass, rstr
from pypy.jit.backend.x86.ri386 import *
-from pypy.jit.backend.llsupport.gc import GcLLDescr_framework, GcRefList, GcPtrFieldDescr
+from pypy.jit.backend.llsupport.gcframework import GcLLDescr_framework
from pypy.jit.backend.x86.test.test_regalloc import MockAssembler
from pypy.jit.backend.x86.test.test_regalloc import BaseTestRegalloc
@@ -49,9 +49,7 @@
gcrootmap = MockGcRootMap()
def initialize(self):
- self.gcrefs = GcRefList()
- self.gcrefs.initialize()
- self.single_gcref_descr = GcPtrFieldDescr(0)
+ pass
rewrite_assembler = GcLLDescr_framework.rewrite_assembler.im_func
Modified: pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py
==============================================================================
--- pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py (original)
+++ pypy/branch/jit-constptr/pypy/jit/backend/x86/test/test_zrpy_gc.py Mon Mar 8 18:27:52 2010
@@ -412,8 +412,29 @@
def test_compile_hybrid_external_exception_handling(self):
self.run('compile_hybrid_external_exception_handling')
-
- def define_compile_hybrid_bug1(self):
+
+ def define_compile_hybrid_movable_gcref(self):
+ @purefunction
+ def moving():
+ return X(1)
+
+ @dont_look_inside
+ def do_more_stuff():
+ rgc.collect()
+ return X(5)
+
+ def f(n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s):
+ x0 = do_more_stuff()
+ check(moving().x == 1)
+ n -= 1
+ return n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s
+
+ return None, f, None
+
+ def test_compile_hybrid_movable_gcref(self):
+ self.run('compile_hybrid_movable_gcref', 200)
+
+ def define_compile_hybrid_nonmovable_gcref(self):
@purefunction
def nonmoving():
x = X(1)
@@ -436,8 +457,8 @@
return None, f, None
- def test_compile_hybrid_bug1(self):
- self.run('compile_hybrid_bug1', 200)
+ def test_compile_hybrid_nonmovable_gcref(self):
+ self.run('compile_hybrid_nonmovable_gcref', 200)
def define_compile_hybrid_vref(self):
from pypy.rlib.jit import virtual_ref, virtual_ref_finish
From fijal at codespeak.net Mon Mar 8 21:02:00 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 8 Mar 2010 21:02:00 +0100 (CET)
Subject: [pypy-svn] r71911 - pypy/trunk/pypy/doc
Message-ID: <20100308200200.20DDC282BD4@codespeak.net>
Author: fijal
Date: Mon Mar 8 21:01:49 2010
New Revision: 71911
Modified:
pypy/trunk/pypy/doc/download.txt
Log:
Remove contents and replace with a link to download on pypy.org
Modified: pypy/trunk/pypy/doc/download.txt
==============================================================================
--- pypy/trunk/pypy/doc/download.txt (original)
+++ pypy/trunk/pypy/doc/download.txt Mon Mar 8 21:01:49 2010
@@ -2,28 +2,6 @@
Download one of the following release files:
=============================================
-PyPy 1.2 Sources:
------------------
+Download page has moved to `pypy.org`_.
-* `pypy-1.2.0.tar.bz2`_ (sources, unix line endings) or
-* `pypy-1.2.0.tar.gz`_ (sources, unix line endings) or
-* `pypy-1.2.0.zip`_ (sources, windows line-endings)
-
-.. _`pypy-1.2.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.bz2
-.. _`pypy-1.2.0.zip`: http://codespeak.net/download/pypy/pypy-1.2.0.zip
-.. _`pypy-1.2.0.tar.gz`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.gz
-
-Prebuilt binaries
-~~~~~~~~~~~~~~~~~
-
-XXX
-
-The ``lang`` repository
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``lang`` part of our repository, which contains other interpreters
-developped mostly as external contributions, has moved and is no longer
-included in the above packages. You can grab it by `browsing the
-Subversion source`__.
-
-.. __: http://codespeak.net/svn/pypy/lang/
+.. _`pypy.org`: http://pypy.org/download.html
From fijal at codespeak.net Mon Mar 8 21:08:22 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 8 Mar 2010 21:08:22 +0100 (CET)
Subject: [pypy-svn] r71913 - pypy/trunk/pypy/tool
Message-ID: <20100308200822.46AA0282BD8@codespeak.net>
Author: fijal
Date: Mon Mar 8 21:08:11 2010
New Revision: 71913
Removed:
pypy/trunk/pypy/tool/makerelease.py
Log:
I believe that this script is so outdated that we don't want to upgrade it
From fijal at codespeak.net Mon Mar 8 22:52:47 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 8 Mar 2010 22:52:47 +0100 (CET)
Subject: [pypy-svn] r71921 - in pypy/trunk/pypy/tool: . test
Message-ID: <20100308215247.A8CCB282BD4@codespeak.net>
Author: fijal
Date: Mon Mar 8 22:52:46 2010
New Revision: 71921
Modified:
pypy/trunk/pypy/tool/package.py
pypy/trunk/pypy/tool/test/test_package.py
Log:
Improve a bit packaging tool
Modified: pypy/trunk/pypy/tool/package.py
==============================================================================
--- pypy/trunk/pypy/tool/package.py (original)
+++ pypy/trunk/pypy/tool/package.py Mon Mar 8 22:52:46 2010
@@ -37,7 +37,7 @@
if not pypy_c.check():
raise PyPyCNotFound('Please compile pypy first, using translate.py')
builddir = udir.ensure("build", dir=True)
- pypydir = builddir.ensure("pypy", dir=True)
+ pypydir = builddir.ensure(name, dir=True)
shutil.copytree(str(basedir.join('lib-python')),
str(pypydir.join('lib-python')),
ignore=ignore_patterns('.svn'))
@@ -50,8 +50,9 @@
old_dir = os.getcwd()
try:
os.chdir(str(builddir))
+ os.system("strip " + str(builddir.join('bin', 'pypy-c')))
os.system('tar cvjf ' + str(builddir.join(name + '.tar.bz2')) +
- " pypy")
+ " " + name)
finally:
os.chdir(old_dir)
return builddir # for tests
Modified: pypy/trunk/pypy/tool/test/test_package.py
==============================================================================
--- pypy/trunk/pypy/tool/test/test_package.py (original)
+++ pypy/trunk/pypy/tool/test/test_package.py Mon Mar 8 22:52:46 2010
@@ -8,17 +8,17 @@
# make sure we have sort of pypy-c
pypy_c = py.path.local(pypydir).join('translator', 'goal', 'pypy-c')
if not pypy_c.check():
- pypy_c.write("xxx")
+ shutil.copy("/usr/bin/echo", pypy_c)
fake_pypy_c = True
else:
fake_pypy_c = False
try:
builddir = main(py.path.local(pypydir).dirpath(), 'test')
- assert builddir.join('pypy', 'lib-python', '2.5.2', 'test').check()
- assert builddir.join('pypy', 'bin', 'pypy-c').check()
- assert builddir.join('pypy', 'pypy', 'lib', 'syslog.py').check()
+ assert builddir.join('test', 'lib-python', '2.5.2', 'test').check()
+ assert builddir.join('test', 'bin', 'pypy-c').check()
+ assert builddir.join('test', 'pypy', 'lib', 'syslog.py').check()
th = tarfile.open(str(builddir.join('test.tar.bz2')))
- assert th.getmember('pypy/pypy/lib/syslog.py')
+ assert th.getmember('test/pypy/lib/syslog.py')
finally:
if fake_pypy_c:
pypy_c.remove()
From fijal at codespeak.net Mon Mar 8 22:57:53 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 8 Mar 2010 22:57:53 +0100 (CET)
Subject: [pypy-svn] r71922 - pypy/trunk/pypy/tool
Message-ID: <20100308215753.269E6282BD4@codespeak.net>
Author: fijal
Date: Mon Mar 8 22:57:51 2010
New Revision: 71922
Modified:
pypy/trunk/pypy/tool/package.py
Log:
typo
Modified: pypy/trunk/pypy/tool/package.py
==============================================================================
--- pypy/trunk/pypy/tool/package.py (original)
+++ pypy/trunk/pypy/tool/package.py Mon Mar 8 22:57:51 2010
@@ -50,7 +50,7 @@
old_dir = os.getcwd()
try:
os.chdir(str(builddir))
- os.system("strip " + str(builddir.join('bin', 'pypy-c')))
+ os.system("strip " + str(pypydir.join('bin', 'pypy-c')))
os.system('tar cvjf ' + str(builddir.join(name + '.tar.bz2')) +
" " + name)
finally:
From fijal at codespeak.net Mon Mar 8 23:17:37 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 8 Mar 2010 23:17:37 +0100 (CET)
Subject: [pypy-svn] r71924 - in pypy/trunk/pypy/tool: . test
Message-ID: <20100308221737.3E025282BD4@codespeak.net>
Author: fijal
Date: Mon Mar 8 23:17:35 2010
New Revision: 71924
Modified:
pypy/trunk/pypy/tool/package.py
pypy/trunk/pypy/tool/test/test_package.py
Log:
Don't include py subdirectory
Modified: pypy/trunk/pypy/tool/package.py
==============================================================================
--- pypy/trunk/pypy/tool/package.py (original)
+++ pypy/trunk/pypy/tool/package.py Mon Mar 8 23:17:35 2010
@@ -44,7 +44,7 @@
pypydir.ensure('pypy', dir=True)
shutil.copytree(str(basedir.join('pypy', 'lib')),
str(pypydir.join('pypy', 'lib')),
- ignore=ignore_patterns('.svn'))
+ ignore=ignore_patterns('.svn', 'py'))
pypydir.ensure('bin', dir=True)
shutil.copy(str(pypy_c), str(pypydir.join('bin', 'pypy-c')))
old_dir = os.getcwd()
Modified: pypy/trunk/pypy/tool/test/test_package.py
==============================================================================
--- pypy/trunk/pypy/tool/test/test_package.py (original)
+++ pypy/trunk/pypy/tool/test/test_package.py Mon Mar 8 23:17:35 2010
@@ -17,6 +17,8 @@
assert builddir.join('test', 'lib-python', '2.5.2', 'test').check()
assert builddir.join('test', 'bin', 'pypy-c').check()
assert builddir.join('test', 'pypy', 'lib', 'syslog.py').check()
+ assert not builddir.join('test', 'pypy', 'lib', 'py').check()
+ assert not builddir.join('test', 'pypy', 'lib', 'ctypes_configure').check()
th = tarfile.open(str(builddir.join('test.tar.bz2')))
assert th.getmember('test/pypy/lib/syslog.py')
finally:
From fijal at codespeak.net Mon Mar 8 23:21:32 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Mon, 8 Mar 2010 23:21:32 +0100 (CET)
Subject: [pypy-svn] r71925 - pypy/build/ubuntu/debian
Message-ID: <20100308222132.21075282BD4@codespeak.net>
Author: fijal
Date: Mon Mar 8 23:21:30 2010
New Revision: 71925
Modified:
pypy/build/ubuntu/debian/Makefile.in
Log:
Fix options
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Mon Mar 8 23:21:30 2010
@@ -1,7 +1,7 @@
TARGET=pypy/translator/goal/targetpypystandalone
TRANSLATE=pypy/translator/goal/translate.py
-TRANSLATEOPTS=--batch --source -Ojit --jit-debug=0
+TRANSLATEOPTS=--batch --source -Ojit --jit-debug=off
TARGETOPTS=%(TARGETOPTS)s
PREFIX=%(PREFIX)s
LOGIC=-o logic
From arigo at codespeak.net Tue Mar 9 00:07:40 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 00:07:40 +0100 (CET)
Subject: [pypy-svn] r71926 - pypy/trunk/pypy/translator/c/gcc/test/msvc
Message-ID: <20100308230740.E2311282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 00:07:39 2010
New Revision: 71926
Added:
pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s
- copied, changed from r71873, pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s
Log:
Add a test: we cannot use -16(%ebp) as the location of the "push esi",
because that's wrong, due to the rounding done by "and esp, xxx".
Copied: pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s (from r71873, pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s)
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/elf/track6.s (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s Tue Mar 9 00:07:39 2010
@@ -1,26 +1,15 @@
- .type main, @function
-main:
- ;; a minimal example showing what kind of code gcc
- ;; can produce for main(): some local variable accesses
- ;; are relative to %ebp, while others are relative to
- ;; %esp, and the difference %ebp-%esp is not constant
- ;; because of the 'andl' to align the stack
- pushl %ebp
- movl %esp, %ebp
- subl $8, %esp
- andl $-16, %esp
- movl $globalptr1, -4(%ebp)
- movl $globalptr2, (%esp)
- pushl $0
- call foobar
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | 4(%esp), -4(%ebp)}
- popl %eax
-#APP
- /* GCROOT -4(%ebp) */
- /* GCROOT (%esp) */
-#NO_APP
- movl %ebp, %esp
- popl %ebp
- ret
+_TEXT SEGMENT
+_pypy_g_foo PROC ; COMDAT
- .size main, .-main
+ push ebp
+ mov ebp, esp
+ and esp, -64
+ sub esp, 12
+ push esi
+ call _pypy_g_something_else
+ ;; expected {4(%ebp) | %ebx, 0(%esp), %edi, (%ebp) | }
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret 0
+_pypy_g_foo ENDP
From arigo at codespeak.net Tue Mar 9 00:08:43 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 00:08:43 +0100 (CET)
Subject: [pypy-svn] r71927 - in pypy/trunk/pypy/translator/c/gcc: . test/msvc
Message-ID: <20100308230843.57C97282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 00:08:41 2010
New Revision: 71927
Modified:
pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s
pypy/trunk/pypy/translator/c/gcc/trackgcroot.py
Log:
Fix the test of the previous checkin.
Modified: pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s (original)
+++ pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s Tue Mar 9 00:08:41 2010
@@ -7,7 +7,7 @@
sub esp, 12
push esi
call _pypy_g_something_else
- ;; expected {4(%ebp) | %ebx, 0(%esp), %edi, (%ebp) | }
+ ;; expected {4(%ebp) | %ebx, (%esp), %edi, (%ebp) | }
pop esi
mov esp, ebp
pop ebp
Modified: pypy/trunk/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/trunk/pypy/translator/c/gcc/trackgcroot.py Tue Mar 9 00:08:41 2010
@@ -452,6 +452,8 @@
else:
return self.binary_insn(line)
+ visit_and = visit_andl
+
def visit_leal(self, line):
match = self.r_binaryinsn.match(line)
target = match.group("target")
From arigo at codespeak.net Tue Mar 9 00:13:53 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 00:13:53 +0100 (CET)
Subject: [pypy-svn] r71928 - pypy/release/1.2.x/pypy/doc
Message-ID: <20100308231353.8B0B2282BD7@codespeak.net>
Author: arigo
Date: Tue Mar 9 00:13:52 2010
New Revision: 71928
Modified:
pypy/release/1.2.x/pypy/doc/download.txt
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71910:71911
Modified: pypy/release/1.2.x/pypy/doc/download.txt
==============================================================================
--- pypy/release/1.2.x/pypy/doc/download.txt (original)
+++ pypy/release/1.2.x/pypy/doc/download.txt Tue Mar 9 00:13:52 2010
@@ -2,28 +2,6 @@
Download one of the following release files:
=============================================
-PyPy 1.2 Sources:
------------------
+Download page has moved to `pypy.org`_.
-* `pypy-1.2.0.tar.bz2`_ (sources, unix line endings) or
-* `pypy-1.2.0.tar.gz`_ (sources, unix line endings) or
-* `pypy-1.2.0.zip`_ (sources, windows line-endings)
-
-.. _`pypy-1.2.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.bz2
-.. _`pypy-1.2.0.zip`: http://codespeak.net/download/pypy/pypy-1.2.0.zip
-.. _`pypy-1.2.0.tar.gz`: http://codespeak.net/download/pypy/pypy-1.2.0.tar.gz
-
-Prebuilt binaries
-~~~~~~~~~~~~~~~~~
-
-XXX
-
-The ``lang`` repository
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``lang`` part of our repository, which contains other interpreters
-developped mostly as external contributions, has moved and is no longer
-included in the above packages. You can grab it by `browsing the
-Subversion source`__.
-
-.. __: http://codespeak.net/svn/pypy/lang/
+.. _`pypy.org`: http://pypy.org/download.html
From arigo at codespeak.net Tue Mar 9 00:14:27 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 00:14:27 +0100 (CET)
Subject: [pypy-svn] r71929 - in pypy/release/1.2.x/pypy/translator/c/gcc: .
test/msvc
Message-ID: <20100308231427.99901282BD7@codespeak.net>
Author: arigo
Date: Tue Mar 9 00:14:25 2010
New Revision: 71929
Added:
pypy/release/1.2.x/pypy/translator/c/gcc/test/msvc/track6.s
- copied unchanged from r71927, pypy/trunk/pypy/translator/c/gcc/test/msvc/track6.s
Modified:
pypy/release/1.2.x/pypy/translator/c/gcc/trackgcroot.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71925:71927
Modified: pypy/release/1.2.x/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/c/gcc/trackgcroot.py (original)
+++ pypy/release/1.2.x/pypy/translator/c/gcc/trackgcroot.py Tue Mar 9 00:14:25 2010
@@ -450,6 +450,8 @@
else:
return self.binary_insn(line)
+ visit_and = visit_andl
+
def visit_leal(self, line):
match = self.r_binaryinsn.match(line)
target = match.group("target")
From fijal at codespeak.net Tue Mar 9 00:20:46 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 00:20:46 +0100 (CET)
Subject: [pypy-svn] r71930 - pypy/trunk/pypy/tool
Message-ID: <20100308232046.D6497282BD8@codespeak.net>
Author: fijal
Date: Tue Mar 9 00:20:45 2010
New Revision: 71930
Modified:
pypy/trunk/pypy/tool/package.py
Log:
Ignore pyc files
Modified: pypy/trunk/pypy/tool/package.py
==============================================================================
--- pypy/trunk/pypy/tool/package.py (original)
+++ pypy/trunk/pypy/tool/package.py Tue Mar 9 00:20:45 2010
@@ -40,11 +40,11 @@
pypydir = builddir.ensure(name, dir=True)
shutil.copytree(str(basedir.join('lib-python')),
str(pypydir.join('lib-python')),
- ignore=ignore_patterns('.svn'))
+ ignore=ignore_patterns('.svn', '*.pyc'))
pypydir.ensure('pypy', dir=True)
shutil.copytree(str(basedir.join('pypy', 'lib')),
str(pypydir.join('pypy', 'lib')),
- ignore=ignore_patterns('.svn', 'py'))
+ ignore=ignore_patterns('.svn', 'py', '*.pyc'))
pypydir.ensure('bin', dir=True)
shutil.copy(str(pypy_c), str(pypydir.join('bin', 'pypy-c')))
old_dir = os.getcwd()
From fijal at codespeak.net Tue Mar 9 01:07:20 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 01:07:20 +0100 (CET)
Subject: [pypy-svn] r71940 - pypy/build/bot2/pypybuildbot
Message-ID: <20100309000720.03AB95105D@codespeak.net>
Author: fijal
Date: Tue Mar 9 01:07:19 2010
New Revision: 71940
Modified:
pypy/build/bot2/pypybuildbot/builds.py
pypy/build/bot2/pypybuildbot/master.py
Log:
remove maemo build - it seems without a real device it's pointless and nobody
cared about setting up a real device enough
Modified: pypy/build/bot2/pypybuildbot/builds.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/builds.py (original)
+++ pypy/build/bot2/pypybuildbot/builds.py Tue Mar 9 01:07:19 2010
@@ -161,31 +161,3 @@
description="run benchmarks 1",
command=["python", "pypy/translator/benchmark/jitbench.py",
"pypy/translator/goal/pypy-c"]))
-
-# xxx keep style
-class TranslatedScratchbox(factory.BuildFactory):
- def __init__(self, *a, **kw):
- USERNAME = 'buildbot'
- WORKDIR = '/scratchbox/users/%s/home/%s/build' % (USERNAME, USERNAME)
-
- factory.BuildFactory.__init__(self, *a, **kw)
- platform = kw.pop('platform', 'linux')
- setup_steps(platform, self, WORKDIR)
- workdir = os.path.join(WORKDIR, 'pypy', 'translator', 'goal')
-
- self.addStep(Translate(["--platform", "maemo", "--gc=hybrid", "-Omem"],
- [], workdir=workdir))
-
- #self.addStep(ShellCmd(
- # description="app-level (-A) test",
- # command=["python", "testrunner/scratchbox_runner.py",
- # "--logfile=pytest-A.log",
- # "--config=pypy/pytest-A.cfg",
- # "--root=pypy", "--timeout=1800"],
- # logfiles={'pytestLog': 'pytest-A.log'},
- # timeout = 4000,
- # workdir = WORKDIR,
- # env={"PYTHONPATH": ['.']}))
- self.addStep(ShellCmd(
- description="copy build",
- command=["scp", "pypy-c", "fijal at codespeak.net:builds/pypy-c-scratchbox"], workdir = workdir))
Modified: pypy/build/bot2/pypybuildbot/master.py
==============================================================================
--- pypy/build/bot2/pypybuildbot/master.py (original)
+++ pypy/build/bot2/pypybuildbot/master.py Tue Mar 9 01:07:19 2010
@@ -44,7 +44,7 @@
'stackless',
'windows', 'mac',
'benchmark-run',
- 'maemo', 'other']))
+ 'other']))
pypybuilds = load('pypybuildbot.builds')
@@ -97,9 +97,6 @@
pypyJITBenchmarkFactory = pypybuilds.JITBenchmark()
-pypyTranslatedLibPythonMaemoTestFactory = pypybuilds.TranslatedScratchbox()
-
-
LINUX32 = "own-linux-x86-32"
MACOSX32 = "own-macosx-x86-32"
APPLVLLINUX32 = "pypy-c-app-level-linux-x86-32"
@@ -116,8 +113,6 @@
JITONLYLINUX32 = "jitonly-own-linux-x86-32"
JITBENCH = "jit-benchmark-linux-x86-32"
-BUILDMAEMO = "pypy-c-maemo-build"
-
BuildmasterConfig = {
'slavePortnum': slavePortnum,
@@ -175,12 +170,6 @@
"factory": pypyTranslatedAppLevelTestFactoryWin,
"category": "windows"
},
- {"name" : BUILDMAEMO,
- "slavenames": ['bigdogvm1'],
- "builddir" : BUILDMAEMO,
- "factory": pypyTranslatedLibPythonMaemoTestFactory,
- "category": 'maemo'
- },
{"name" : APPLVLFREEBSD64,
"slavenames": ['headless'],
'builddir' : APPLVLFREEBSD64,
From fijal at codespeak.net Tue Mar 9 01:11:38 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 01:11:38 +0100 (CET)
Subject: [pypy-svn] r71941 - in
pypy/branch/import-fiddle/pypy/module/pypyjit: . test
Message-ID: <20100309001138.5CC365105E@codespeak.net>
Author: fijal
Date: Tue Mar 9 01:11:36 2010
New Revision: 71941
Modified:
pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py
pypy/branch/import-fiddle/pypy/module/pypyjit/test/test_policy.py
Log:
Be a bit more careful about looking into places and a test
Modified: pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py (original)
+++ pypy/branch/import-fiddle/pypy/module/pypyjit/policy.py Tue Mar 9 01:11:36 2010
@@ -8,11 +8,12 @@
modname == '__builtin__.interp_classobj' or
modname == '__builtin__.functional'):
return True
-
+ if modname == 'sys.state':
+ return True
if '.' in modname:
modname, _ = modname.split('.', 1)
if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions',
- 'sys', 'imp']:
+ 'imp']:
return True
return False
Modified: pypy/branch/import-fiddle/pypy/module/pypyjit/test/test_policy.py
==============================================================================
--- pypy/branch/import-fiddle/pypy/module/pypyjit/test/test_policy.py (original)
+++ pypy/branch/import-fiddle/pypy/module/pypyjit/test/test_policy.py Tue Mar 9 01:11:36 2010
@@ -32,7 +32,7 @@
assert pypypolicy.look_inside_pypy_module('__builtin__.abstractinst')
assert pypypolicy.look_inside_pypy_module('__builtin__.functional')
assert pypypolicy.look_inside_pypy_module('exceptions.interp_exceptions')
- for modname in 'pypyjit', 'signal', 'micronumpy', 'math':
+ for modname in 'pypyjit', 'signal', 'micronumpy', 'math', 'imp':
assert pypypolicy.look_inside_pypy_module(modname)
assert pypypolicy.look_inside_pypy_module(modname + '.foo')
@@ -42,3 +42,4 @@
def test_module_with_stuff_in_init():
from pypy.module.sys import Module
assert not pypypolicy.look_inside_function(Module.getdictvalue.im_func)
+
From fijal at codespeak.net Tue Mar 9 01:19:21 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 01:19:21 +0100 (CET)
Subject: [pypy-svn] r71942 - pypy/build/ubuntu/debian
Message-ID: <20100309001921.681BD5105F@codespeak.net>
Author: fijal
Date: Tue Mar 9 01:19:19 2010
New Revision: 71942
Modified:
pypy/build/ubuntu/debian/Makefile.in
Log:
Set environment var, so the usession dir is actually what it's named (can
be arbitrary though)
Modified: pypy/build/ubuntu/debian/Makefile.in
==============================================================================
--- pypy/build/ubuntu/debian/Makefile.in (original)
+++ pypy/build/ubuntu/debian/Makefile.in Tue Mar 9 01:19:19 2010
@@ -42,7 +42,7 @@
bin/pypy:
@rm -rf $(TMPDIR)
mkdir $(TMPDIR)
- $(TRANSLATE) $(TRANSLATEOPTS) $(TARGET) $(TARGETOPTS)
+ PYPY_USESSION_BASENAME='-' $(TRANSLATE) $(TRANSLATEOPTS) $(TARGET) $(TARGETOPTS)
make -C $(TMPDIR)/usession-0/testing_1
install -D $(TMPDIR)/usession-0/testing_1/testing_1 $@
From dan at codespeak.net Tue Mar 9 02:09:59 2010
From: dan at codespeak.net (dan at codespeak.net)
Date: Tue, 9 Mar 2010 02:09:59 +0100 (CET)
Subject: [pypy-svn] r71943 - in
pypy/branch/micronumpy/pypy/module/micronumpy: . test
Message-ID: <20100309010959.6240451061@codespeak.net>
Author: dan
Date: Tue Mar 9 02:09:57 2010
New Revision: 71943
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
Minor housecleaning, improved mdarray setitem test.
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py Tue Mar 9 02:09:57 2010
@@ -104,10 +104,10 @@
newextract = make_sure_not_resized([0]*len(extract)*factor)
prestride = strides[i-1]
for j in range(len(extract)):
- jf = j*factor
+ jf = j * factor
st = extract[j]
for k in range(factor):
- newextract[jf+k] = st + start
+ newextract[jf + k] = st + start
st += prestride
extract = newextract
#No adding for shape
@@ -121,15 +121,15 @@
class BaseMultiDimArray(BaseNumArray): pass
def descr_dtype(space, self):
- return self.dtype
+ return space.wrap(self.dtype)
def descr_shape(space, self):
return space.newtuple([space.wrap(dim) for dim in self.shape])
-MUL = mul_operation()
-DIV = div_operation()
-ADD = add_operation()
-SUB = sub_operation()
+mul = mul_operation()
+div = div_operation()
+add = add_operation()
+sub = sub_operation()
def create_mdarray(data_type, unwrap, coerce):
@@ -202,18 +202,17 @@
client_fixedview = {}
client_scalar['mul'], client_fixedview['mul'] = \
- create_client_math_operation(MUL)
+ create_client_math_operation(mul)
client_scalar['div'], client_fixedview['div'] = \
- create_client_math_operation(DIV)
+ create_client_math_operation(div)
client_scalar['add'], client_fixedview['add'] = \
- create_client_math_operation(ADD)
+ create_client_math_operation(add)
client_scalar['sub'], client_fixedview['sub'] = \
- create_client_math_operation(SUB)
- descr_mul = create_math_operation(MUL)
- descr_div = create_math_operation(DIV)
- descr_add = create_math_operation(ADD)
- descr_sub = create_math_operation(SUB)
-
+ create_client_math_operation(sub)
+ descr_mul = create_math_operation(mul)
+ descr_div = create_math_operation(div)
+ descr_add = create_math_operation(add)
+ descr_sub = create_math_operation(sub)
def load_iterable(self, w_xs):
self._internal_load(w_xs, self.shape, [])
@@ -254,6 +253,15 @@
def descr_getitem(self, w_index):
space = self.space
+
+ try:
+ field_name = space.str_w(w_index)
+ raise OperationError(space.w_ValueError, #FIXME: if we were honest this would be NotImplemented
+ space.wrap("field name %s not found" % field_name))
+ except OperationError, e:
+ if not e.match(space, space.w_TypeError):
+ raise
+
try:
space.iter(w_index)
except OperationError, e:
@@ -306,34 +314,31 @@
raise
value = coerce(space, w_value)
for start in regions:
- self.storage[start:start+lslice]=[value]*lslice
+ self.storage[start:start + lslice] = [value] * lslice
return
arr = array_fromseq(space, w_value, None)
ls = len(arr.shape)
lss = len(shape)
if not (ls <= lss and list(arr.shape) == shape[lss-ls:lss]):
- raise OperationError(space.w_ValueError,
+ raise OperationError(space.w_ValueError, #FIXME: throws when it shouldn't
space.wrap('array dimensions '
'are not compatible for copy'))
- #exactly as in numpy
- # /S\ - DO NOT EDIT if you're not sure!
#we may exit earlier, but we are true purists and wonna check
if len(regions) == 0: return
l = len(arr.storage)
if lslice > l: #long slice
- iters = lslice//l
- assert lslice == l*iters
+ iters = lslice // l
+ assert lslice == l * iters
for start in regions:
for i in range(iters):
- self.storage[start:start+l] = arr.storage
+ self.storage[start:start + l] = arr.storage
start += l
else:
i = 0
for start in regions:
- self.storage[start:start+l] = arr.storage[i:i+lslice]
+ self.storage[start:start + l] = arr.storage[i:i + lslice]
if i > l:
i = i-l
- #Looks like perfect
else:
pos = compute_pos(space, indexes, self.shape)
self.storage[pos] = coerce(space, w_value)
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Tue Mar 9 02:09:57 2010
@@ -220,15 +220,15 @@
if e.match(space, space.w_TypeError):
raise OperationError(space.w_ValueError,
space.wrap("can't understand index")) #FIXME: more meaningful message based on type
- try:
- self.storage[index] = coerce(space, w_value)
- except OperationError, e:
- if e.match(space, space.w_TypeError):
- raise OperationError(space.w_ValueError,
- space.wrap("can't understand value")) #FIXME: more meaningful message based on type
- except IndexError:
- raise OperationError(space.w_IndexError,
- space.wrap("list index out of range"))
+ try:
+ self.storage[index] = coerce(space, w_value)
+ except OperationError, e:
+ if e.match(space, space.w_TypeError):
+ raise OperationError(space.w_ValueError,
+ space.wrap("can't understand value")) #FIXME: more meaningful message based on type
+ except IndexError:
+ raise OperationError(space.w_IndexError,
+ space.wrap("list index out of range"))
return space.w_None
descr_setitem.unwrap_spec = ['self', W_Root, W_Root]
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Tue Mar 9 02:09:57 2010
@@ -65,7 +65,6 @@
from operator import mul, div, add, sub
compare = self.compare
d = range(1, self.length)
- #skip('overkill...')
for data_type in (int, float):
data = [data_type(x) for x in d]
ar = array(data)
@@ -302,7 +301,7 @@
#setitem
ar[2] = 3
assert ar[2, 0] == ar[2, 1] == ar[2, 2] == 3
- ar[2:3] == [1] #FIXME: this probably throws
+ ar[2:3] = [7]
ar[2] = [0, 1, 2]
assert compare(ar[0], ar[2])
assert compare(ar[..., 0], [0, 3, 0])
From arigo at codespeak.net Tue Mar 9 13:37:06 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 13:37:06 +0100 (CET)
Subject: [pypy-svn] r71944 - in pypy/trunk/pypy: rlib rpython/lltypesystem
translator/platform translator/tool
Message-ID: <20100309123706.B2C7B5105D@codespeak.net>
Author: arigo
Date: Tue Mar 9 13:37:04 2010
New Revision: 71944
Modified:
pypy/trunk/pypy/rlib/libffi.py
pypy/trunk/pypy/rpython/lltypesystem/ll2ctypes.py
pypy/trunk/pypy/translator/platform/linux.py
pypy/trunk/pypy/translator/tool/cbuild.py
Log:
Make pypy-c translations contain a static libffi on Linux.
Avoids the troubles of finding the dynamic libffi.so, and
anyway it's quite small.
Modified: pypy/trunk/pypy/rlib/libffi.py
==============================================================================
--- pypy/trunk/pypy/rlib/libffi.py (original)
+++ pypy/trunk/pypy/rlib/libffi.py Tue Mar 9 13:37:04 2010
@@ -53,11 +53,13 @@
separate_module_sources = []
if not _MSVC:
+ # On some platforms, we try to link statically libffi, which is small
+ # anyway and avoids endless troubles for installing. On other platforms
+ # libffi.a is typically not there, so we link dynamically.
if _MINGW:
includes = ['windows.h', 'ffi.h']
else:
includes = ['dlfcn.h', 'ffi.h']
- include_dirs = platform.include_dirs_for_libffi()
if _MAC_OS:
pre_include_bits = ['#define MACOSX']
@@ -65,9 +67,25 @@
pre_include_bits = []
if _FREEBSD_7 or _MINGW:
- libraries = ['ffi']
+ libraries = []
else:
- libraries = ['ffi', 'dl']
+ libraries = ['dl']
+
+ def find_libffi_a():
+ dirlist = platform.library_dirs_for_libffi_a()
+ for dir in dirlist:
+ result = os.path.join(dir, 'libffi.a')
+ if os.path.exists(result):
+ return result
+ raise ImportError("'libffi.a' not found in %s" % (dirlist,))
+
+ if hasattr(platform, 'library_dirs_for_libffi_a'):
+ # platforms on which we want static linking
+ link_files = [find_libffi_a()]
+ else:
+ # platforms on which we want dynamic linking
+ libraries = ['ffi'] + libraries
+ link_files = []
eci = ExternalCompilationInfo(
pre_include_bits = pre_include_bits,
@@ -76,6 +94,8 @@
separate_module_sources = separate_module_sources,
include_dirs = platform.include_dirs_for_libffi(),
library_dirs = platform.library_dirs_for_libffi(),
+ link_files = link_files,
+ testonly_libraries = ['ffi'],
)
else:
libffidir = py.path.local(pypydir).join('translator', 'c', 'src', 'libffi_msvc')
Modified: pypy/trunk/pypy/rpython/lltypesystem/ll2ctypes.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/ll2ctypes.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/ll2ctypes.py Tue Mar 9 13:37:04 2010
@@ -853,7 +853,7 @@
eci = old_eci.compile_shared_lib()
_eci_cache[old_eci] = eci
- libraries = list(eci.libraries + eci.frameworks)
+ libraries = eci.testonly_libraries + eci.libraries + eci.frameworks
FUNCTYPE = lltype.typeOf(funcptr).TO
if not libraries:
Modified: pypy/trunk/pypy/translator/platform/linux.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/linux.py (original)
+++ pypy/trunk/pypy/translator/platform/linux.py Tue Mar 9 13:37:04 2010
@@ -24,6 +24,10 @@
def library_dirs_for_libffi(self):
return ['/usr/lib/libffi']
+ def library_dirs_for_libffi_a(self):
+ # places where we need to look for libffi.a
+ return self.library_dirs_for_libffi() + ['/usr/lib']
+
class Linux64(Linux):
shared_only = ['-fPIC']
Modified: pypy/trunk/pypy/translator/tool/cbuild.py
==============================================================================
--- pypy/trunk/pypy/translator/tool/cbuild.py (original)
+++ pypy/trunk/pypy/translator/tool/cbuild.py Tue Mar 9 13:37:04 2010
@@ -18,7 +18,7 @@
'post_include_bits', 'libraries', 'library_dirs',
'separate_module_sources', 'separate_module_files',
'export_symbols', 'compile_extra', 'link_extra',
- 'frameworks', 'link_files']
+ 'frameworks', 'link_files', 'testonly_libraries']
_DUPLICATES_OK = ['compile_extra', 'link_extra']
_EXTRA_ATTRIBUTES = ['use_cpp_linker', 'platform']
@@ -36,6 +36,7 @@
link_extra = [],
frameworks = [],
link_files = [],
+ testonly_libraries = [],
use_cpp_linker = False,
platform = None):
"""
@@ -82,6 +83,10 @@
link_files: list of file names which will be directly passed to the
linker
+ testonly_libraries: list of libraries that are searched for during
+ testing only, by ll2ctypes. Useful to search for a name in a dynamic
+ library during testing but use the static library for compilation.
+
use_cpp_linker: a flag to tell if g++ should be used instead of gcc
when linking (a bit custom so far)
From arigo at codespeak.net Tue Mar 9 13:43:37 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 13:43:37 +0100 (CET)
Subject: [pypy-svn] r71945 - in pypy/release/1.2.x/pypy: rlib
rpython/lltypesystem translator/platform translator/tool
Message-ID: <20100309124337.095AE5105D@codespeak.net>
Author: arigo
Date: Tue Mar 9 13:43:36 2010
New Revision: 71945
Modified:
pypy/release/1.2.x/pypy/rlib/libffi.py
pypy/release/1.2.x/pypy/rpython/lltypesystem/ll2ctypes.py
pypy/release/1.2.x/pypy/translator/platform/linux.py
pypy/release/1.2.x/pypy/translator/tool/cbuild.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71943:71944
Modified: pypy/release/1.2.x/pypy/rlib/libffi.py
==============================================================================
--- pypy/release/1.2.x/pypy/rlib/libffi.py (original)
+++ pypy/release/1.2.x/pypy/rlib/libffi.py Tue Mar 9 13:43:36 2010
@@ -53,11 +53,13 @@
separate_module_sources = []
if not _MSVC:
+ # On some platforms, we try to link statically libffi, which is small
+ # anyway and avoids endless troubles for installing. On other platforms
+ # libffi.a is typically not there, so we link dynamically.
if _MINGW:
includes = ['windows.h', 'ffi.h']
else:
includes = ['dlfcn.h', 'ffi.h']
- include_dirs = platform.include_dirs_for_libffi()
if _MAC_OS:
pre_include_bits = ['#define MACOSX']
@@ -65,9 +67,25 @@
pre_include_bits = []
if _FREEBSD_7 or _MINGW:
- libraries = ['ffi']
+ libraries = []
else:
- libraries = ['ffi', 'dl']
+ libraries = ['dl']
+
+ def find_libffi_a():
+ dirlist = platform.library_dirs_for_libffi_a()
+ for dir in dirlist:
+ result = os.path.join(dir, 'libffi.a')
+ if os.path.exists(result):
+ return result
+ raise ImportError("'libffi.a' not found in %s" % (dirlist,))
+
+ if hasattr(platform, 'library_dirs_for_libffi_a'):
+ # platforms on which we want static linking
+ link_files = [find_libffi_a()]
+ else:
+ # platforms on which we want dynamic linking
+ libraries = ['ffi'] + libraries
+ link_files = []
eci = ExternalCompilationInfo(
pre_include_bits = pre_include_bits,
@@ -76,6 +94,8 @@
separate_module_sources = separate_module_sources,
include_dirs = platform.include_dirs_for_libffi(),
library_dirs = platform.library_dirs_for_libffi(),
+ link_files = link_files,
+ testonly_libraries = ['ffi'],
)
else:
libffidir = py.path.local(pypydir).join('translator', 'c', 'src', 'libffi_msvc')
Modified: pypy/release/1.2.x/pypy/rpython/lltypesystem/ll2ctypes.py
==============================================================================
--- pypy/release/1.2.x/pypy/rpython/lltypesystem/ll2ctypes.py (original)
+++ pypy/release/1.2.x/pypy/rpython/lltypesystem/ll2ctypes.py Tue Mar 9 13:43:36 2010
@@ -853,7 +853,7 @@
eci = old_eci.compile_shared_lib()
_eci_cache[old_eci] = eci
- libraries = list(eci.libraries + eci.frameworks)
+ libraries = eci.testonly_libraries + eci.libraries + eci.frameworks
FUNCTYPE = lltype.typeOf(funcptr).TO
if not libraries:
Modified: pypy/release/1.2.x/pypy/translator/platform/linux.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/platform/linux.py (original)
+++ pypy/release/1.2.x/pypy/translator/platform/linux.py Tue Mar 9 13:43:36 2010
@@ -24,6 +24,10 @@
def library_dirs_for_libffi(self):
return ['/usr/lib/libffi']
+ def library_dirs_for_libffi_a(self):
+ # places where we need to look for libffi.a
+ return self.library_dirs_for_libffi() + ['/usr/lib']
+
class Linux64(Linux):
shared_only = ['-fPIC']
Modified: pypy/release/1.2.x/pypy/translator/tool/cbuild.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/tool/cbuild.py (original)
+++ pypy/release/1.2.x/pypy/translator/tool/cbuild.py Tue Mar 9 13:43:36 2010
@@ -18,7 +18,7 @@
'post_include_bits', 'libraries', 'library_dirs',
'separate_module_sources', 'separate_module_files',
'export_symbols', 'compile_extra', 'link_extra',
- 'frameworks', 'link_files']
+ 'frameworks', 'link_files', 'testonly_libraries']
_DUPLICATES_OK = ['compile_extra', 'link_extra']
_EXTRA_ATTRIBUTES = ['use_cpp_linker', 'platform']
@@ -36,6 +36,7 @@
link_extra = [],
frameworks = [],
link_files = [],
+ testonly_libraries = [],
use_cpp_linker = False,
platform = None):
"""
@@ -82,6 +83,10 @@
link_files: list of file names which will be directly passed to the
linker
+ testonly_libraries: list of libraries that are searched for during
+ testing only, by ll2ctypes. Useful to search for a name in a dynamic
+ library during testing but use the static library for compilation.
+
use_cpp_linker: a flag to tell if g++ should be used instead of gcc
when linking (a bit custom so far)
From arigo at codespeak.net Tue Mar 9 14:25:00 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 14:25:00 +0100 (CET)
Subject: [pypy-svn] r71950 - pypy/trunk/pypy/tool
Message-ID: <20100309132500.AE685282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 14:24:59 2010
New Revision: 71950
Modified:
pypy/trunk/pypy/tool/package.py
Log:
Also ignore the files "*~".
Modified: pypy/trunk/pypy/tool/package.py
==============================================================================
--- pypy/trunk/pypy/tool/package.py (original)
+++ pypy/trunk/pypy/tool/package.py Tue Mar 9 14:24:59 2010
@@ -40,11 +40,11 @@
pypydir = builddir.ensure(name, dir=True)
shutil.copytree(str(basedir.join('lib-python')),
str(pypydir.join('lib-python')),
- ignore=ignore_patterns('.svn', '*.pyc'))
+ ignore=ignore_patterns('.svn', '*.pyc', '*~'))
pypydir.ensure('pypy', dir=True)
shutil.copytree(str(basedir.join('pypy', 'lib')),
str(pypydir.join('pypy', 'lib')),
- ignore=ignore_patterns('.svn', 'py', '*.pyc'))
+ ignore=ignore_patterns('.svn', 'py', '*.pyc', '*~'))
pypydir.ensure('bin', dir=True)
shutil.copy(str(pypy_c), str(pypydir.join('bin', 'pypy-c')))
old_dir = os.getcwd()
From arigo at codespeak.net Tue Mar 9 14:30:08 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 14:30:08 +0100 (CET)
Subject: [pypy-svn] r71951 - pypy/trunk/pypy/tool
Message-ID: <20100309133008.C5F69282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 14:30:07 2010
New Revision: 71951
Modified:
pypy/trunk/pypy/tool/package.py
Log:
Write down a warning explicitly.
Modified: pypy/trunk/pypy/tool/package.py
==============================================================================
--- pypy/trunk/pypy/tool/package.py (original)
+++ pypy/trunk/pypy/tool/package.py Tue Mar 9 14:30:07 2010
@@ -41,6 +41,8 @@
shutil.copytree(str(basedir.join('lib-python')),
str(pypydir.join('lib-python')),
ignore=ignore_patterns('.svn', '*.pyc', '*~'))
+ # Careful: to copy pypy/lib, copying just the svn-tracked files
+ # would not be enough: there are also ctypes_config_cache/_*_cache.py.
pypydir.ensure('pypy', dir=True)
shutil.copytree(str(basedir.join('pypy', 'lib')),
str(pypydir.join('pypy', 'lib')),
From arigo at codespeak.net Tue Mar 9 14:35:40 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 14:35:40 +0100 (CET)
Subject: [pypy-svn] r71952 - pypy/trunk
Message-ID: <20100309133540.DA320282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 14:35:39 2010
New Revision: 71952
Modified:
pypy/trunk/README
Log:
Update README.
Modified: pypy/trunk/README
==============================================================================
--- pypy/trunk/README (original)
+++ pypy/trunk/README Tue Mar 9 14:35:39 2010
@@ -9,11 +9,15 @@
You can build self-contained Python implementations which execute
independently from CPython.
+The home page is:
+
+ http://pypy.org/
+
We invite you to head over to our detailed getting-started document:
pypy/doc/getting-started.html or
pypy/doc/getting-started.txt
- (local if you got a tarball or svn checkout)
+ (local if you got a source tarball or svn checkout)
http://codespeak.net/pypy/dist/pypy/doc/getting-started.html
From arigo at codespeak.net Tue Mar 9 15:14:31 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 15:14:31 +0100 (CET)
Subject: [pypy-svn] r71954 - in pypy/trunk: ctypes_configure
pypy/lib/ctypes_config_cache
Message-ID: <20100309141431.0094E282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 15:14:30 2010
New Revision: 71954
Modified:
pypy/trunk/ctypes_configure/dumpcache.py
pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py
Log:
Copy the list of constant names from CPython's _localemodule.c
instead of having a guessed-up list with both too many names
(does not compile) and too little, on other platforms.
Modified: pypy/trunk/ctypes_configure/dumpcache.py
==============================================================================
--- pypy/trunk/ctypes_configure/dumpcache.py (original)
+++ pypy/trunk/ctypes_configure/dumpcache.py Tue Mar 9 15:14:30 2010
@@ -10,6 +10,8 @@
print >> f
names = config.keys()
names.sort()
+ print >> f, '__all__ = %r' % (tuple(names),)
+ print >> f
for key in names:
val = config[key]
if isinstance(val, (int, long)):
Modified: pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py (original)
+++ pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py Tue Mar 9 15:14:30 2010
@@ -10,37 +10,40 @@
# ____________________________________________________________
-_CONSTANTS = (
+_CONSTANTS = [
'LC_CTYPE',
- 'LC_NUMERIC',
'LC_TIME',
'LC_COLLATE',
'LC_MONETARY',
'LC_MESSAGES',
+ 'LC_NUMERIC',
'LC_ALL',
- 'LC_PAPER',
- 'LC_NAME',
- 'LC_ADDRESS',
- 'LC_TELEPHONE',
- 'LC_MEASUREMENT',
- 'LC_IDENTIFICATION',
-)
+ 'CHAR_MAX',
+]
class LocaleConfigure:
_compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
for key in _CONSTANTS:
- setattr(LocaleConfigure, key, ConstantInteger(key))
+ setattr(LocaleConfigure, key, DefinedConstantInteger(key))
config = configure(LocaleConfigure, noerr=True)
+for key, value in config.items():
+ if value is None:
+ del config[key]
+ _CONSTANTS.remove(key)
# ____________________________________________________________
HAS_LANGINFO = True # xxx hard-coded to True for now
if HAS_LANGINFO:
- # this is incomplete list
- langinfo_names = ('CODESET D_T_FMT D_FMT T_FMT RADIXCHAR THOUSEP '
- 'YESEXPR NOEXPR CRNCYSTR').split(" ")
+ # list of all possible names
+ langinfo_names = [
+ "RADIXCHAR", "THOUSEP", "CRNCYSTR",
+ "D_T_FMT", "D_FMT", "T_FMT", "AM_STR", "PM_STR",
+ "CODESET", "T_FMT_AMPM", "ERA", "ERA_D_FMT", "ERA_D_T_FMT",
+ "ERA_T_FMT", "ALT_DIGITS", "YESEXPR", "NOEXPR", "_DATE_FMT",
+ ]
for i in range(1, 8):
langinfo_names.append("DAY_%d" % i)
langinfo_names.append("ABDAY_%d" % i)
@@ -52,13 +55,18 @@
_compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
nl_item = SimpleType('nl_item')
for key in langinfo_names:
- setattr(LanginfoConfigure, key, ConstantInteger(key))
+ setattr(LanginfoConfigure, key, DefinedConstantInteger(key))
- config.update(configure(LanginfoConfigure))
- _CONSTANTS = _CONSTANTS + tuple(langinfo_names)
+ langinfo_config = configure(LanginfoConfigure)
+ for key, value in langinfo_config.items():
+ if value is None:
+ del langinfo_config[key]
+ langinfo_names.remove(key)
+ config.update(langinfo_config)
+ _CONSTANTS += langinfo_names
# ____________________________________________________________
-config['ALL_CONSTANTS'] = _CONSTANTS
+config['ALL_CONSTANTS'] = tuple(_CONSTANTS)
config['HAS_LANGINFO'] = HAS_LANGINFO
dumpcache(__file__, '_locale_cache.py', config)
From arigo at codespeak.net Tue Mar 9 15:21:03 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 15:21:03 +0100 (CET)
Subject: [pypy-svn] r71955 - pypy/trunk/pypy/lib/ctypes_config_cache
Message-ID: <20100309142103.42FD2282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 15:21:02 2010
New Revision: 71955
Modified:
pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py
Log:
Detect HAS_LANGINFO.
Modified: pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py (original)
+++ pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py Tue Mar 9 15:21:02 2010
@@ -5,7 +5,7 @@
import autopath
from ctypes_configure.configure import (configure, ExternalCompilationInfo,
- ConstantInteger, DefinedConstantInteger, SimpleType)
+ ConstantInteger, DefinedConstantInteger, SimpleType, check_eci)
from ctypes_configure.dumpcache import dumpcache
# ____________________________________________________________
@@ -34,7 +34,8 @@
# ____________________________________________________________
-HAS_LANGINFO = True # xxx hard-coded to True for now
+eci = ExternalCompilationInfo(includes=['langinfo.h'])
+HAS_LANGINFO = check_eci(eci)
if HAS_LANGINFO:
# list of all possible names
@@ -52,7 +53,7 @@
langinfo_names.append("ABMON_%d" % i)
class LanginfoConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
+ _compilation_info_ = eci
nl_item = SimpleType('nl_item')
for key in langinfo_names:
setattr(LanginfoConfigure, key, DefinedConstantInteger(key))
From arigo at codespeak.net Tue Mar 9 15:25:54 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 15:25:54 +0100 (CET)
Subject: [pypy-svn] r71956 - in pypy/release/1.2.x: . ctypes_configure
pypy/lib/ctypes_config_cache
Message-ID: <20100309142554.7DEB5282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 15:25:52 2010
New Revision: 71956
Modified:
pypy/release/1.2.x/README
pypy/release/1.2.x/ctypes_configure/dumpcache.py
pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71951:71955
Modified: pypy/release/1.2.x/README
==============================================================================
--- pypy/release/1.2.x/README (original)
+++ pypy/release/1.2.x/README Tue Mar 9 15:25:52 2010
@@ -9,11 +9,15 @@
You can build self-contained Python implementations which execute
independently from CPython.
+The home page is:
+
+ http://pypy.org/
+
We invite you to head over to our detailed getting-started document:
pypy/doc/getting-started.html or
pypy/doc/getting-started.txt
- (local if you got a tarball or svn checkout)
+ (local if you got a source tarball or svn checkout)
http://codespeak.net/pypy/dist/pypy/doc/getting-started.html
Modified: pypy/release/1.2.x/ctypes_configure/dumpcache.py
==============================================================================
--- pypy/release/1.2.x/ctypes_configure/dumpcache.py (original)
+++ pypy/release/1.2.x/ctypes_configure/dumpcache.py Tue Mar 9 15:25:52 2010
@@ -10,6 +10,8 @@
print >> f
names = config.keys()
names.sort()
+ print >> f, '__all__ = %r' % (tuple(names),)
+ print >> f
for key in names:
val = config[key]
if isinstance(val, (int, long)):
Modified: pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py (original)
+++ pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py Tue Mar 9 15:25:52 2010
@@ -5,42 +5,46 @@
import autopath
from ctypes_configure.configure import (configure, ExternalCompilationInfo,
- ConstantInteger, DefinedConstantInteger, SimpleType)
+ ConstantInteger, DefinedConstantInteger, SimpleType, check_eci)
from ctypes_configure.dumpcache import dumpcache
# ____________________________________________________________
-_CONSTANTS = (
+_CONSTANTS = [
'LC_CTYPE',
- 'LC_NUMERIC',
'LC_TIME',
'LC_COLLATE',
'LC_MONETARY',
'LC_MESSAGES',
+ 'LC_NUMERIC',
'LC_ALL',
- 'LC_PAPER',
- 'LC_NAME',
- 'LC_ADDRESS',
- 'LC_TELEPHONE',
- 'LC_MEASUREMENT',
- 'LC_IDENTIFICATION',
-)
+ 'CHAR_MAX',
+]
class LocaleConfigure:
_compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
for key in _CONSTANTS:
- setattr(LocaleConfigure, key, ConstantInteger(key))
+ setattr(LocaleConfigure, key, DefinedConstantInteger(key))
config = configure(LocaleConfigure, noerr=True)
+for key, value in config.items():
+ if value is None:
+ del config[key]
+ _CONSTANTS.remove(key)
# ____________________________________________________________
-HAS_LANGINFO = True # xxx hard-coded to True for now
+eci = ExternalCompilationInfo(includes=['langinfo.h'])
+HAS_LANGINFO = check_eci(eci)
if HAS_LANGINFO:
- # this is incomplete list
- langinfo_names = ('CODESET D_T_FMT D_FMT T_FMT RADIXCHAR THOUSEP '
- 'YESEXPR NOEXPR CRNCYSTR').split(" ")
+ # list of all possible names
+ langinfo_names = [
+ "RADIXCHAR", "THOUSEP", "CRNCYSTR",
+ "D_T_FMT", "D_FMT", "T_FMT", "AM_STR", "PM_STR",
+ "CODESET", "T_FMT_AMPM", "ERA", "ERA_D_FMT", "ERA_D_T_FMT",
+ "ERA_T_FMT", "ALT_DIGITS", "YESEXPR", "NOEXPR", "_DATE_FMT",
+ ]
for i in range(1, 8):
langinfo_names.append("DAY_%d" % i)
langinfo_names.append("ABDAY_%d" % i)
@@ -49,16 +53,21 @@
langinfo_names.append("ABMON_%d" % i)
class LanginfoConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['langinfo.h'])
+ _compilation_info_ = eci
nl_item = SimpleType('nl_item')
for key in langinfo_names:
- setattr(LanginfoConfigure, key, ConstantInteger(key))
+ setattr(LanginfoConfigure, key, DefinedConstantInteger(key))
- config.update(configure(LanginfoConfigure))
- _CONSTANTS = _CONSTANTS + tuple(langinfo_names)
+ langinfo_config = configure(LanginfoConfigure)
+ for key, value in langinfo_config.items():
+ if value is None:
+ del langinfo_config[key]
+ langinfo_names.remove(key)
+ config.update(langinfo_config)
+ _CONSTANTS += langinfo_names
# ____________________________________________________________
-config['ALL_CONSTANTS'] = _CONSTANTS
+config['ALL_CONSTANTS'] = tuple(_CONSTANTS)
config['HAS_LANGINFO'] = HAS_LANGINFO
dumpcache(__file__, '_locale_cache.py', config)
From arigo at codespeak.net Tue Mar 9 15:28:36 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 15:28:36 +0100 (CET)
Subject: [pypy-svn] r71957 - pypy/trunk/pypy/lib
Message-ID: <20100309142836.23891282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 15:28:35 2010
New Revision: 71957
Modified:
pypy/trunk/pypy/lib/_locale.py
Log:
Bah. This now comes from ctypes_config_cache/_locale_cache.py.
Modified: pypy/trunk/pypy/lib/_locale.py
==============================================================================
--- pypy/trunk/pypy/lib/_locale.py (original)
+++ pypy/trunk/pypy/lib/_locale.py Tue Mar 9 15:28:35 2010
@@ -14,9 +14,6 @@
size_t = c_int
-# XXX check where this comes from
-CHAR_MAX = 127
-
# Ubuntu Gusty i386 structure
class lconv(Structure):
@@ -313,7 +310,7 @@
'Error',
'setlocale', 'localeconv', 'strxfrm', 'strcoll',
'gettext', 'dgettext', 'dcgettext', 'textdomain',
- 'bindtextdomain', 'CHAR_MAX',
+ 'bindtextdomain',
) + ALL_CONSTANTS
if _bind_textdomain_codeset:
__all__ += ('bind_textdomain_codeset',)
From arigo at codespeak.net Tue Mar 9 15:29:17 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 15:29:17 +0100 (CET)
Subject: [pypy-svn] r71958 - pypy/release/1.2.x/pypy/lib
Message-ID: <20100309142917.631C5282BD4@codespeak.net>
Author: arigo
Date: Tue Mar 9 15:29:16 2010
New Revision: 71958
Modified:
pypy/release/1.2.x/pypy/lib/_locale.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71956:71957
Modified: pypy/release/1.2.x/pypy/lib/_locale.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/_locale.py (original)
+++ pypy/release/1.2.x/pypy/lib/_locale.py Tue Mar 9 15:29:16 2010
@@ -14,9 +14,6 @@
size_t = c_int
-# XXX check where this comes from
-CHAR_MAX = 127
-
# Ubuntu Gusty i386 structure
class lconv(Structure):
@@ -313,7 +310,7 @@
'Error',
'setlocale', 'localeconv', 'strxfrm', 'strcoll',
'gettext', 'dgettext', 'dcgettext', 'textdomain',
- 'bindtextdomain', 'CHAR_MAX',
+ 'bindtextdomain',
) + ALL_CONSTANTS
if _bind_textdomain_codeset:
__all__ += ('bind_textdomain_codeset',)
From benjamin at codespeak.net Tue Mar 9 15:44:57 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Tue, 9 Mar 2010 15:44:57 +0100 (CET)
Subject: [pypy-svn] r71959 - pypy/trunk/pypy/lib/app_test
Message-ID: <20100309144457.51EE0282BD5@codespeak.net>
Author: benjamin
Date: Tue Mar 9 15:44:55 2010
New Revision: 71959
Modified:
pypy/trunk/pypy/lib/app_test/test_binascii.py (props changed)
Log:
this file doesn't have a shebang line to execute
From benjamin at codespeak.net Tue Mar 9 15:46:16 2010
From: benjamin at codespeak.net (benjamin at codespeak.net)
Date: Tue, 9 Mar 2010 15:46:16 +0100 (CET)
Subject: [pypy-svn] r71960 - in pypy/trunk/pypy: doc/config doc/discussion
lib module/_collections module/_collections/test module/imp
module/imp/test module/oracle module/oracle/test
translator/benchmark
Message-ID: <20100309144616.A86B8282BD5@codespeak.net>
Author: benjamin
Date: Tue Mar 9 15:46:14 2010
New Revision: 71960
Modified:
pypy/trunk/pypy/doc/config/objspace.usemodules.imp.txt (contents, props changed)
pypy/trunk/pypy/doc/config/translation.jit_profiler.txt (props changed)
pypy/trunk/pypy/doc/discussion/improve-rpython.txt (contents, props changed)
pypy/trunk/pypy/lib/PyQt4.py (props changed)
pypy/trunk/pypy/lib/_rpyc_support.py (props changed)
pypy/trunk/pypy/lib/sip.py (props changed)
pypy/trunk/pypy/module/_collections/__init__.py (contents, props changed)
pypy/trunk/pypy/module/_collections/interp_collection.py (contents, props changed)
pypy/trunk/pypy/module/_collections/test/__init__.py (props changed)
pypy/trunk/pypy/module/_collections/test/test_collection.py (contents, props changed)
pypy/trunk/pypy/module/imp/interp_imp.py (contents, props changed)
pypy/trunk/pypy/module/imp/test/test_app.py (contents, props changed)
pypy/trunk/pypy/module/oracle/interp_lob.py (contents, props changed)
pypy/trunk/pypy/module/oracle/interp_object.py (contents, props changed)
pypy/trunk/pypy/module/oracle/interp_pool.py (contents, props changed)
pypy/trunk/pypy/module/oracle/test/test_cursorvar.py (contents, props changed)
pypy/trunk/pypy/module/oracle/test/test_lobvar.py (contents, props changed)
pypy/trunk/pypy/module/oracle/test/test_objectvar.py (contents, props changed)
pypy/trunk/pypy/translator/benchmark/jitbench.py (props changed)
Log:
set svn:eol-style
Modified: pypy/trunk/pypy/doc/config/objspace.usemodules.imp.txt
==============================================================================
--- pypy/trunk/pypy/doc/config/objspace.usemodules.imp.txt (original)
+++ pypy/trunk/pypy/doc/config/objspace.usemodules.imp.txt Tue Mar 9 15:46:14 2010
@@ -1,2 +1,2 @@
-Use the 'imp' module.
-This module is included by default.
+Use the 'imp' module.
+This module is included by default.
Modified: pypy/trunk/pypy/doc/discussion/improve-rpython.txt
==============================================================================
--- pypy/trunk/pypy/doc/discussion/improve-rpython.txt (original)
+++ pypy/trunk/pypy/doc/discussion/improve-rpython.txt Tue Mar 9 15:46:14 2010
@@ -1,93 +1,93 @@
-Possible improvements of the rpython language
-=============================================
-
-Improve the interpreter API
----------------------------
-
-- Rationalize the modules, and the names, of the differents functions needed to
- implement a pypy module. A typical rpython file is likely to contain many
- `import` statements::
-
- from pypy.interpreter.baseobjspace import Wrappable
- from pypy.interpreter.gateway import ObjSpace, W_Root, NoneNotWrapped
- from pypy.interpreter.argument import Arguments
- from pypy.interpreter.typedef import TypeDef, GetSetProperty
- from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
- from pypy.interpreter.gateway import interp2app
- from pypy.interpreter.error import OperationError
- from pypy.rpython.lltypesystem import rffi, lltype
-
-- A more direct declarative way to write Typedef::
-
- class W_Socket(Wrappable):
- _typedef_name_ = 'socket'
- _typedef_base_ = W_EventualBaseClass
-
- @interp2app_method("connect", ['self', ObjSpace, W_Root])
- def connect_w(self, space, w_addr):
- ...
-
-- Support for metaclasses written in rpython. For a sample, see the skipped test
- `pypy.objspace.std.test.TestTypeObject.test_metaclass_typedef`
-
-RPython language
-----------------
-
-- Arithmetic with unsigned integer, and between integer of different signedness,
- when this is not ambiguous. At least, comparison and assignement with
- constants should be allowed.
-
-- Allocate variables on the stack, and pass their address ("by reference") to
- llexternal functions. For a typical usage, see
- `pypy.rlib.rsocket.RSocket.getsockopt_int`.
-
-- Support context managers and the `with` statement. This could be a workaround
- before the previous point is available.
-
-Extensible type system for llexternal
--------------------------------------
-
-llexternal allows the description of a C function, and conveys the same
-information about the arguments as a C header. But this is often not enough.
-For example, a parameter of type `int*` is converted to
-`rffi.CArrayPtr(rffi.INT)`, but this information is not enough to use the
-function. The parameter could be an array of int, a reference to a single value,
-for input or output...
-
-A "type system" could hold this additional information, and automatically
-generate some conversion code to ease the usage of the function from
-rpython. For example::
-
- # double frexp(double x, int *exp);
- frexp = llexternal("frexp", [rffi.DOUBLE, OutPtr(rffi.int)], rffi.DOUBLE)
-
-`OutPtr` indicates that the parameter is output-only, which need not to be
-initialized, and which *value* is returned to the caller. In rpython the call
-becomes::
-
- fraction, exponent = frexp(value)
-
-Also, we could imagine that one item in the llexternal argument list corresponds
-to two parameters in C. Here, OutCharBufferN indicates that the caller will pass
-a rpython string; the framework will pass buffer and length to the function::
-
- # ssize_t write(int fd, const void *buf, size_t count);
- write = llexternal("write", [rffi.INT, CharBufferAndSize], rffi.SSIZE_T)
-
-The rpython code that calls this function is very simple::
-
- written = write(fd, data)
-
-compared with the present::
-
- count = len(data)
- buf = rffi.get_nonmovingbuffer(data)
- try:
- written = rffi.cast(lltype.Signed, os_write(
- rffi.cast(rffi.INT, fd),
- buf, rffi.cast(rffi.SIZE_T, count)))
- finally:
- rffi.free_nonmovingbuffer(data, buf)
-
-Typemaps are very useful for large APIs where the same conversions are needed in
-many places. XXX example
+Possible improvements of the rpython language
+=============================================
+
+Improve the interpreter API
+---------------------------
+
+- Rationalize the modules, and the names, of the differents functions needed to
+ implement a pypy module. A typical rpython file is likely to contain many
+ `import` statements::
+
+ from pypy.interpreter.baseobjspace import Wrappable
+ from pypy.interpreter.gateway import ObjSpace, W_Root, NoneNotWrapped
+ from pypy.interpreter.argument import Arguments
+ from pypy.interpreter.typedef import TypeDef, GetSetProperty
+ from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
+ from pypy.interpreter.gateway import interp2app
+ from pypy.interpreter.error import OperationError
+ from pypy.rpython.lltypesystem import rffi, lltype
+
+- A more direct declarative way to write Typedef::
+
+ class W_Socket(Wrappable):
+ _typedef_name_ = 'socket'
+ _typedef_base_ = W_EventualBaseClass
+
+ @interp2app_method("connect", ['self', ObjSpace, W_Root])
+ def connect_w(self, space, w_addr):
+ ...
+
+- Support for metaclasses written in rpython. For a sample, see the skipped test
+ `pypy.objspace.std.test.TestTypeObject.test_metaclass_typedef`
+
+RPython language
+----------------
+
+- Arithmetic with unsigned integer, and between integer of different signedness,
+ when this is not ambiguous. At least, comparison and assignement with
+ constants should be allowed.
+
+- Allocate variables on the stack, and pass their address ("by reference") to
+ llexternal functions. For a typical usage, see
+ `pypy.rlib.rsocket.RSocket.getsockopt_int`.
+
+- Support context managers and the `with` statement. This could be a workaround
+ before the previous point is available.
+
+Extensible type system for llexternal
+-------------------------------------
+
+llexternal allows the description of a C function, and conveys the same
+information about the arguments as a C header. But this is often not enough.
+For example, a parameter of type `int*` is converted to
+`rffi.CArrayPtr(rffi.INT)`, but this information is not enough to use the
+function. The parameter could be an array of int, a reference to a single value,
+for input or output...
+
+A "type system" could hold this additional information, and automatically
+generate some conversion code to ease the usage of the function from
+rpython. For example::
+
+ # double frexp(double x, int *exp);
+ frexp = llexternal("frexp", [rffi.DOUBLE, OutPtr(rffi.int)], rffi.DOUBLE)
+
+`OutPtr` indicates that the parameter is output-only, which need not to be
+initialized, and which *value* is returned to the caller. In rpython the call
+becomes::
+
+ fraction, exponent = frexp(value)
+
+Also, we could imagine that one item in the llexternal argument list corresponds
+to two parameters in C. Here, OutCharBufferN indicates that the caller will pass
+a rpython string; the framework will pass buffer and length to the function::
+
+ # ssize_t write(int fd, const void *buf, size_t count);
+ write = llexternal("write", [rffi.INT, CharBufferAndSize], rffi.SSIZE_T)
+
+The rpython code that calls this function is very simple::
+
+ written = write(fd, data)
+
+compared with the present::
+
+ count = len(data)
+ buf = rffi.get_nonmovingbuffer(data)
+ try:
+ written = rffi.cast(lltype.Signed, os_write(
+ rffi.cast(rffi.INT, fd),
+ buf, rffi.cast(rffi.SIZE_T, count)))
+ finally:
+ rffi.free_nonmovingbuffer(data, buf)
+
+Typemaps are very useful for large APIs where the same conversions are needed in
+many places. XXX example
Modified: pypy/trunk/pypy/module/_collections/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/_collections/__init__.py (original)
+++ pypy/trunk/pypy/module/_collections/__init__.py Tue Mar 9 15:46:14 2010
@@ -1,11 +1,11 @@
-import py
-
-from pypy.interpreter.mixedmodule import MixedModule
-
-class Module(MixedModule):
- appleveldefs = {}
-
- interpleveldefs = {
- 'identity_dict' : 'interp_collection.W_IdentityDict',
- }
-
+import py
+
+from pypy.interpreter.mixedmodule import MixedModule
+
+class Module(MixedModule):
+ appleveldefs = {}
+
+ interpleveldefs = {
+ 'identity_dict' : 'interp_collection.W_IdentityDict',
+ }
+
Modified: pypy/trunk/pypy/module/_collections/interp_collection.py
==============================================================================
--- pypy/trunk/pypy/module/_collections/interp_collection.py (original)
+++ pypy/trunk/pypy/module/_collections/interp_collection.py Tue Mar 9 15:46:14 2010
@@ -1,68 +1,68 @@
-from pypy.interpreter.error import OperationError
-from pypy.interpreter.typedef import TypeDef
-from pypy.interpreter.gateway import ObjSpace, W_Root, NoneNotWrapped, interp2app
-from pypy.interpreter.gateway import Arguments, unwrap_spec
-from pypy.interpreter.baseobjspace import Wrappable
-
-class W_IdentityDict(Wrappable):
- def __init__(self, space):
- self.dict = {}
- __init__.unwrap_spec = ['self', ObjSpace]
-
- @unwrap_spec(ObjSpace, W_Root)
- def descr_new(space, w_subtype):
- self = space.allocate_instance(W_IdentityDict, w_subtype)
- W_IdentityDict.__init__(self, space)
- return space.wrap(self)
-
- @unwrap_spec('self', ObjSpace)
- def descr_len(self, space):
- return space.wrap(len(self.dict))
-
- @unwrap_spec('self', ObjSpace, W_Root)
- def descr_contains(self, space, w_key):
- return space.wrap(w_key in self.dict)
-
- @unwrap_spec('self', ObjSpace, W_Root, W_Root)
- def descr_setitem(self, space, w_key, w_value):
- self.dict[w_key] = w_value
-
- @unwrap_spec('self', ObjSpace, W_Root)
- def descr_getitem(self, space, w_key):
- try:
- return self.dict[w_key]
- except KeyError:
- raise OperationError(space.w_KeyError, w_key)
-
- @unwrap_spec('self', ObjSpace, W_Root, W_Root)
- def get(self, space, w_key, w_default=None):
- return self.dict.get(w_key, w_default)
-
- @unwrap_spec('self', ObjSpace)
- def keys(self, space):
- return space.newlist(self.dict.keys())
-
- @unwrap_spec('self', ObjSpace)
- def values(self, space):
- return space.newlist(self.dict.values())
-
- @unwrap_spec('self', ObjSpace)
- def clear(self, space):
- self.dict.clear()
-
-W_IdentityDict.typedef = TypeDef("identity_dict",
- __doc__="""\
-A dictionary that considers keys by object identity.
-Distinct objects that compare equal will have separate entries.
-All objects can be used as keys, even non-hashable ones.
-""",
- __new__ = interp2app(W_IdentityDict.descr_new.im_func),
- __len__ = interp2app(W_IdentityDict.descr_len),
- __contains__ = interp2app(W_IdentityDict.descr_contains),
- __setitem__ = interp2app(W_IdentityDict.descr_setitem),
- __getitem__ = interp2app(W_IdentityDict.descr_getitem),
- get = interp2app(W_IdentityDict.get),
- keys = interp2app(W_IdentityDict.keys),
- values = interp2app(W_IdentityDict.values),
- clear = interp2app(W_IdentityDict.clear),
-)
+from pypy.interpreter.error import OperationError
+from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.gateway import ObjSpace, W_Root, NoneNotWrapped, interp2app
+from pypy.interpreter.gateway import Arguments, unwrap_spec
+from pypy.interpreter.baseobjspace import Wrappable
+
+class W_IdentityDict(Wrappable):
+ def __init__(self, space):
+ self.dict = {}
+ __init__.unwrap_spec = ['self', ObjSpace]
+
+ @unwrap_spec(ObjSpace, W_Root)
+ def descr_new(space, w_subtype):
+ self = space.allocate_instance(W_IdentityDict, w_subtype)
+ W_IdentityDict.__init__(self, space)
+ return space.wrap(self)
+
+ @unwrap_spec('self', ObjSpace)
+ def descr_len(self, space):
+ return space.wrap(len(self.dict))
+
+ @unwrap_spec('self', ObjSpace, W_Root)
+ def descr_contains(self, space, w_key):
+ return space.wrap(w_key in self.dict)
+
+ @unwrap_spec('self', ObjSpace, W_Root, W_Root)
+ def descr_setitem(self, space, w_key, w_value):
+ self.dict[w_key] = w_value
+
+ @unwrap_spec('self', ObjSpace, W_Root)
+ def descr_getitem(self, space, w_key):
+ try:
+ return self.dict[w_key]
+ except KeyError:
+ raise OperationError(space.w_KeyError, w_key)
+
+ @unwrap_spec('self', ObjSpace, W_Root, W_Root)
+ def get(self, space, w_key, w_default=None):
+ return self.dict.get(w_key, w_default)
+
+ @unwrap_spec('self', ObjSpace)
+ def keys(self, space):
+ return space.newlist(self.dict.keys())
+
+ @unwrap_spec('self', ObjSpace)
+ def values(self, space):
+ return space.newlist(self.dict.values())
+
+ @unwrap_spec('self', ObjSpace)
+ def clear(self, space):
+ self.dict.clear()
+
+W_IdentityDict.typedef = TypeDef("identity_dict",
+ __doc__="""\
+A dictionary that considers keys by object identity.
+Distinct objects that compare equal will have separate entries.
+All objects can be used as keys, even non-hashable ones.
+""",
+ __new__ = interp2app(W_IdentityDict.descr_new.im_func),
+ __len__ = interp2app(W_IdentityDict.descr_len),
+ __contains__ = interp2app(W_IdentityDict.descr_contains),
+ __setitem__ = interp2app(W_IdentityDict.descr_setitem),
+ __getitem__ = interp2app(W_IdentityDict.descr_getitem),
+ get = interp2app(W_IdentityDict.get),
+ keys = interp2app(W_IdentityDict.keys),
+ values = interp2app(W_IdentityDict.values),
+ clear = interp2app(W_IdentityDict.clear),
+)
Modified: pypy/trunk/pypy/module/_collections/test/test_collection.py
==============================================================================
--- pypy/trunk/pypy/module/_collections/test/test_collection.py (original)
+++ pypy/trunk/pypy/module/_collections/test/test_collection.py Tue Mar 9 15:46:14 2010
@@ -1,61 +1,61 @@
-import py
-from pypy.conftest import gettestobjspace
-
-class AppTestIdentityDict:
- def setup_class(cls):
- cls.space = gettestobjspace(usemodules=['_collections'])
-
- def test_numbers(self):
- from _collections import identity_dict
- d = identity_dict()
- d[0] = 1
- d[0.0] = 2
- d[long(0)] = 3
-
- assert d
- assert len(d) == 3
- d.clear()
- assert not d
-
- def test_get(self):
- from _collections import identity_dict
- d = identity_dict()
- d[None] = 1
-
- assert d.get(None, 42) == 1
- assert d.get(None) == 1
- assert d.get(1) is None
- assert d.get(1, 42) == 42
-
- def test_unhashable(self):
- from _collections import identity_dict
-
- d = identity_dict()
- d[[]] = 1
- d[[]] = 2
- a = []
- d[a] = 3
- assert len(d) == 3
- d[a] = 4
- assert len(d) == 3
- assert d[a] == 4
-
- raises(KeyError, d.__getitem__, [])
-
- def test_keys(self):
- from _collections import identity_dict
- d = identity_dict()
- d[[]] = 1
- d[[]] = 2
- d[[]] = 3
-
- assert d.keys() == [[], [], []]
- assert sorted(d.values()) == [1, 2, 3]
-
- def test_in(self):
- from _collections import identity_dict
- d = identity_dict()
- d[None] = 1
-
- assert None in d
- assert [] not in d
+import py
+from pypy.conftest import gettestobjspace
+
+class AppTestIdentityDict:
+ def setup_class(cls):
+ cls.space = gettestobjspace(usemodules=['_collections'])
+
+ def test_numbers(self):
+ from _collections import identity_dict
+ d = identity_dict()
+ d[0] = 1
+ d[0.0] = 2
+ d[long(0)] = 3
+
+ assert d
+ assert len(d) == 3
+ d.clear()
+ assert not d
+
+ def test_get(self):
+ from _collections import identity_dict
+ d = identity_dict()
+ d[None] = 1
+
+ assert d.get(None, 42) == 1
+ assert d.get(None) == 1
+ assert d.get(1) is None
+ assert d.get(1, 42) == 42
+
+ def test_unhashable(self):
+ from _collections import identity_dict
+
+ d = identity_dict()
+ d[[]] = 1
+ d[[]] = 2
+ a = []
+ d[a] = 3
+ assert len(d) == 3
+ d[a] = 4
+ assert len(d) == 3
+ assert d[a] == 4
+
+ raises(KeyError, d.__getitem__, [])
+
+ def test_keys(self):
+ from _collections import identity_dict
+ d = identity_dict()
+ d[[]] = 1
+ d[[]] = 2
+ d[[]] = 3
+
+ assert d.keys() == [[], [], []]
+ assert sorted(d.values()) == [1, 2, 3]
+
+ def test_in(self):
+ from _collections import identity_dict
+ d = identity_dict()
+ d[None] = 1
+
+ assert None in d
+ assert [] not in d
Modified: pypy/trunk/pypy/module/imp/interp_imp.py
==============================================================================
--- pypy/trunk/pypy/module/imp/interp_imp.py (original)
+++ pypy/trunk/pypy/module/imp/interp_imp.py Tue Mar 9 15:46:14 2010
@@ -1,154 +1,154 @@
-from pypy.module.imp import importing
-from pypy.module._file.interp_file import W_File
-from pypy.rlib import streamio
-from pypy.interpreter.error import OperationError, operationerrfmt
-from pypy.interpreter.module import Module
-from pypy.interpreter.gateway import NoneNotWrapped
-import struct
-
-def get_suffixes(space):
- w = space.wrap
- return space.newlist([
- space.newtuple([w('.py'), w('U'), w(importing.PY_SOURCE)]),
- space.newtuple([w('.pyc'), w('rb'), w(importing.PY_COMPILED)]),
- ])
-
-def get_magic(space):
- x = importing.get_pyc_magic(space)
- a = x & 0xff
- x >>= 8
- b = x & 0xff
- x >>= 8
- c = x & 0xff
- x >>= 8
- d = x & 0xff
- return space.wrap(chr(a) + chr(b) + chr(c) + chr(d))
-
-def get_file(space, w_file, filename, filemode):
- if w_file is None or space.is_w(w_file, space.w_None):
- return streamio.open_file_as_stream(filename, filemode)
- else:
- return space.interp_w(W_File, w_file).stream
-
-def find_module(space, w_name, w_path=None):
- name = space.str_w(w_name)
- if space.is_w(w_path, space.w_None):
- w_path = None
-
- find_info = importing.find_module(
- space, name, w_name, name, w_path, use_loader=False)
- if not find_info:
- raise operationerrfmt(
- space.w_ImportError,
- "No module named %s", name)
-
- w_filename = space.wrap(find_info.filename)
- stream = find_info.stream
-
- if stream is not None:
- fileobj = W_File(space)
- fileobj.fdopenstream(
- stream, stream.try_to_find_file_descriptor(),
- find_info.filemode, w_filename)
- w_fileobj = space.wrap(fileobj)
- else:
- w_fileobj = space.w_None
- w_import_info = space.newtuple(
- [space.wrap(find_info.suffix),
- space.wrap(find_info.filemode),
- space.wrap(find_info.modtype)])
- return space.newtuple([w_fileobj, w_filename, w_import_info])
-
-def load_module(space, w_name, w_file, w_filename, w_info):
- w_suffix, w_filemode, w_modtype = space.unpackiterable(w_info)
-
- filename = space.str_w(w_filename)
- filemode = space.str_w(w_filemode)
- if space.is_w(w_file, space.w_None):
- stream = None
- else:
- stream = get_file(space, w_file, filename, filemode)
-
- find_info = importing.FindInfo(
- space.int_w(w_modtype),
- filename,
- stream,
- space.str_w(w_suffix),
- filemode)
- return importing.load_module(
- space, w_name, find_info)
-
-def load_source(space, w_modulename, w_filename, w_file=None):
- filename = space.str_w(w_filename)
-
- stream = get_file(space, w_file, filename, 'U')
-
- w_mod = space.wrap(Module(space, w_modulename))
- importing._prepare_module(space, w_mod, filename, None)
-
- importing.load_source_module(
- space, w_modulename, w_mod, filename, stream.readall())
- if space.is_w(w_file, space.w_None):
- stream.close()
- return w_mod
-
-def load_compiled(space, w_modulename, w_filename, w_file=None):
- filename = space.str_w(w_filename)
-
- stream = get_file(space, w_file, filename, 'rb')
-
- w_mod = space.wrap(Module(space, w_modulename))
- importing._prepare_module(space, w_mod, filename, None)
-
- magic = importing._r_long(stream)
- timestamp = importing._r_long(stream)
-
- importing.load_compiled_module(
- space, w_modulename, w_mod, filename, magic, timestamp,
- stream.readall())
- if space.is_w(w_file, space.w_None):
- stream.close()
- return w_mod
-
-def new_module(space, w_name):
- return space.wrap(Module(space, w_name))
-
-def init_builtin(space, w_name):
- name = space.str_w(w_name)
- if name not in space.builtin_modules:
- return
- if space.finditem(space.sys.get('modules'), w_name) is not None:
- raise OperationError(
- space.w_ImportError,
- space.wrap("cannot initialize a built-in module twice in PyPy"))
- return space.getbuiltinmodule(name)
-
-def init_frozen(space, w_name):
- return None
-
-def is_builtin(space, w_name):
- name = space.str_w(w_name)
- if name not in space.builtin_modules:
- return space.wrap(0)
- if space.finditem(space.sys.get('modules'), w_name) is not None:
- return space.wrap(-1) # cannot be initialized again
- return space.wrap(1)
-
-def is_frozen(space, w_name):
- return space.w_False
-
-#__________________________________________________________________
-
-def lock_held(space):
- if space.config.objspace.usemodules.thread:
- return space.wrap(importing.getimportlock(space).lock_held())
- else:
- return space.w_False
-
-def acquire_lock(space):
- if space.config.objspace.usemodules.thread:
- importing.getimportlock(space).acquire_lock()
-
-def release_lock(space):
- if space.config.objspace.usemodules.thread:
- importing.getimportlock(space).release_lock()
+from pypy.module.imp import importing
+from pypy.module._file.interp_file import W_File
+from pypy.rlib import streamio
+from pypy.interpreter.error import OperationError, operationerrfmt
+from pypy.interpreter.module import Module
+from pypy.interpreter.gateway import NoneNotWrapped
+import struct
+
+def get_suffixes(space):
+ w = space.wrap
+ return space.newlist([
+ space.newtuple([w('.py'), w('U'), w(importing.PY_SOURCE)]),
+ space.newtuple([w('.pyc'), w('rb'), w(importing.PY_COMPILED)]),
+ ])
+
+def get_magic(space):
+ x = importing.get_pyc_magic(space)
+ a = x & 0xff
+ x >>= 8
+ b = x & 0xff
+ x >>= 8
+ c = x & 0xff
+ x >>= 8
+ d = x & 0xff
+ return space.wrap(chr(a) + chr(b) + chr(c) + chr(d))
+
+def get_file(space, w_file, filename, filemode):
+ if w_file is None or space.is_w(w_file, space.w_None):
+ return streamio.open_file_as_stream(filename, filemode)
+ else:
+ return space.interp_w(W_File, w_file).stream
+
+def find_module(space, w_name, w_path=None):
+ name = space.str_w(w_name)
+ if space.is_w(w_path, space.w_None):
+ w_path = None
+
+ find_info = importing.find_module(
+ space, name, w_name, name, w_path, use_loader=False)
+ if not find_info:
+ raise operationerrfmt(
+ space.w_ImportError,
+ "No module named %s", name)
+
+ w_filename = space.wrap(find_info.filename)
+ stream = find_info.stream
+
+ if stream is not None:
+ fileobj = W_File(space)
+ fileobj.fdopenstream(
+ stream, stream.try_to_find_file_descriptor(),
+ find_info.filemode, w_filename)
+ w_fileobj = space.wrap(fileobj)
+ else:
+ w_fileobj = space.w_None
+ w_import_info = space.newtuple(
+ [space.wrap(find_info.suffix),
+ space.wrap(find_info.filemode),
+ space.wrap(find_info.modtype)])
+ return space.newtuple([w_fileobj, w_filename, w_import_info])
+
+def load_module(space, w_name, w_file, w_filename, w_info):
+ w_suffix, w_filemode, w_modtype = space.unpackiterable(w_info)
+
+ filename = space.str_w(w_filename)
+ filemode = space.str_w(w_filemode)
+ if space.is_w(w_file, space.w_None):
+ stream = None
+ else:
+ stream = get_file(space, w_file, filename, filemode)
+
+ find_info = importing.FindInfo(
+ space.int_w(w_modtype),
+ filename,
+ stream,
+ space.str_w(w_suffix),
+ filemode)
+ return importing.load_module(
+ space, w_name, find_info)
+
+def load_source(space, w_modulename, w_filename, w_file=None):
+ filename = space.str_w(w_filename)
+
+ stream = get_file(space, w_file, filename, 'U')
+
+ w_mod = space.wrap(Module(space, w_modulename))
+ importing._prepare_module(space, w_mod, filename, None)
+
+ importing.load_source_module(
+ space, w_modulename, w_mod, filename, stream.readall())
+ if space.is_w(w_file, space.w_None):
+ stream.close()
+ return w_mod
+
+def load_compiled(space, w_modulename, w_filename, w_file=None):
+ filename = space.str_w(w_filename)
+
+ stream = get_file(space, w_file, filename, 'rb')
+
+ w_mod = space.wrap(Module(space, w_modulename))
+ importing._prepare_module(space, w_mod, filename, None)
+
+ magic = importing._r_long(stream)
+ timestamp = importing._r_long(stream)
+
+ importing.load_compiled_module(
+ space, w_modulename, w_mod, filename, magic, timestamp,
+ stream.readall())
+ if space.is_w(w_file, space.w_None):
+ stream.close()
+ return w_mod
+
+def new_module(space, w_name):
+ return space.wrap(Module(space, w_name))
+
+def init_builtin(space, w_name):
+ name = space.str_w(w_name)
+ if name not in space.builtin_modules:
+ return
+ if space.finditem(space.sys.get('modules'), w_name) is not None:
+ raise OperationError(
+ space.w_ImportError,
+ space.wrap("cannot initialize a built-in module twice in PyPy"))
+ return space.getbuiltinmodule(name)
+
+def init_frozen(space, w_name):
+ return None
+
+def is_builtin(space, w_name):
+ name = space.str_w(w_name)
+ if name not in space.builtin_modules:
+ return space.wrap(0)
+ if space.finditem(space.sys.get('modules'), w_name) is not None:
+ return space.wrap(-1) # cannot be initialized again
+ return space.wrap(1)
+
+def is_frozen(space, w_name):
+ return space.w_False
+
+#__________________________________________________________________
+
+def lock_held(space):
+ if space.config.objspace.usemodules.thread:
+ return space.wrap(importing.getimportlock(space).lock_held())
+ else:
+ return space.w_False
+
+def acquire_lock(space):
+ if space.config.objspace.usemodules.thread:
+ importing.getimportlock(space).acquire_lock()
+
+def release_lock(space):
+ if space.config.objspace.usemodules.thread:
+ importing.getimportlock(space).release_lock()
Modified: pypy/trunk/pypy/module/imp/test/test_app.py
==============================================================================
--- pypy/trunk/pypy/module/imp/test/test_app.py (original)
+++ pypy/trunk/pypy/module/imp/test/test_app.py Tue Mar 9 15:46:14 2010
@@ -1,112 +1,112 @@
-MARKER = 42
-
-class AppTestImpModule:
- def setup_class(cls):
- cls.w_imp = cls.space.getbuiltinmodule('imp')
-
- cls.w__py_file = cls.space.appexec(
- [cls.space.wrap(__file__)], r"""(__file__):
- def _py_file():
- fn = __file__
- if fn.lower().endswith('c') or fn.lower().endswith('o'):
- fn = fn[:-1]
- assert fn.lower().endswith('.py')
- return fn
- return _py_file""")
-
- cls.w__pyc_file = cls.space.appexec([], r"""():
- def _pyc_file():
- import marshal, imp
- co = compile("marker=42", "x.py", "exec")
- f = open('@TEST.pyc', 'wb')
- f.write(imp.get_magic())
- f.write('\x00\x00\x00\x00')
- marshal.dump(co, f)
- f.close()
- return '@TEST.pyc'
- return _pyc_file""")
-
-
-
- def test_find_module(self):
- import os
- file, pathname, description = self.imp.find_module('StringIO')
- assert file is not None
- file.close()
- assert os.path.exists(pathname)
- pathname = pathname.lower()
- assert pathname.endswith('.py') # even if .pyc is up-to-date
- assert description in self.imp.get_suffixes()
-
-
- def test_suffixes(self):
- for suffix, mode, type in self.imp.get_suffixes():
- if mode == self.imp.PY_SOURCE:
- assert suffix == '.py'
- assert type == 'r'
- elif mode == self.imp.PY_COMPILED:
- assert suffix in ('.pyc', '.pyo')
- assert type == 'rb'
-
-
- def test_obscure_functions(self):
- mod = self.imp.new_module('hi')
- assert mod.__name__ == 'hi'
- mod = self.imp.init_builtin('hello.world.this.is.never.a.builtin.module.name')
- assert mod is None
- mod = self.imp.init_frozen('hello.world.this.is.never.a.frozen.module.name')
- assert mod is None
- assert self.imp.is_builtin('sys')
- assert not self.imp.is_builtin('hello.world.this.is.never.a.builtin.module.name')
- assert not self.imp.is_frozen('hello.world.this.is.never.a.frozen.module.name')
-
-
- def test_load_module_py(self):
- fn = self._py_file()
- descr = ('.py', 'U', self.imp.PY_SOURCE)
- f = open(fn, 'U')
- mod = self.imp.load_module('test_imp_extra_AUTO1', f, fn, descr)
- f.close()
- assert mod.MARKER == 42
- import test_imp_extra_AUTO1
- assert mod is test_imp_extra_AUTO1
-
- def test_load_module_pyc(self):
- fn = self._pyc_file()
- try:
- descr = ('.pyc', 'rb', self.imp.PY_COMPILED)
- f = open(fn, 'rb')
- mod = self.imp.load_module('test_imp_extra_AUTO2', f, fn, descr)
- f.close()
- assert mod.marker == 42
- import test_imp_extra_AUTO2
- assert mod is test_imp_extra_AUTO2
- finally:
- os.unlink(fn)
-
- def test_load_source(self):
- fn = self._py_file()
- mod = self.imp.load_source('test_imp_extra_AUTO3', fn)
- assert mod.MARKER == 42
- import test_imp_extra_AUTO3
- assert mod is test_imp_extra_AUTO3
-
- def test_load_module_pyc(self):
- import os
- fn = self._pyc_file()
- try:
- mod = self.imp.load_compiled('test_imp_extra_AUTO4', fn)
- assert mod.marker == 42
- import test_imp_extra_AUTO4
- assert mod is test_imp_extra_AUTO4
- finally:
- os.unlink(fn)
-
- def test_load_broken_pyc(self):
- fn = self._py_file()
- try:
- self.imp.load_compiled('test_imp_extra_AUTO5', fn)
- except ImportError:
- pass
- else:
- raise Exception("expected an ImportError")
+MARKER = 42
+
+class AppTestImpModule:
+ def setup_class(cls):
+ cls.w_imp = cls.space.getbuiltinmodule('imp')
+
+ cls.w__py_file = cls.space.appexec(
+ [cls.space.wrap(__file__)], r"""(__file__):
+ def _py_file():
+ fn = __file__
+ if fn.lower().endswith('c') or fn.lower().endswith('o'):
+ fn = fn[:-1]
+ assert fn.lower().endswith('.py')
+ return fn
+ return _py_file""")
+
+ cls.w__pyc_file = cls.space.appexec([], r"""():
+ def _pyc_file():
+ import marshal, imp
+ co = compile("marker=42", "x.py", "exec")
+ f = open('@TEST.pyc', 'wb')
+ f.write(imp.get_magic())
+ f.write('\x00\x00\x00\x00')
+ marshal.dump(co, f)
+ f.close()
+ return '@TEST.pyc'
+ return _pyc_file""")
+
+
+
+ def test_find_module(self):
+ import os
+ file, pathname, description = self.imp.find_module('StringIO')
+ assert file is not None
+ file.close()
+ assert os.path.exists(pathname)
+ pathname = pathname.lower()
+ assert pathname.endswith('.py') # even if .pyc is up-to-date
+ assert description in self.imp.get_suffixes()
+
+
+ def test_suffixes(self):
+ for suffix, mode, type in self.imp.get_suffixes():
+ if mode == self.imp.PY_SOURCE:
+ assert suffix == '.py'
+ assert type == 'r'
+ elif mode == self.imp.PY_COMPILED:
+ assert suffix in ('.pyc', '.pyo')
+ assert type == 'rb'
+
+
+ def test_obscure_functions(self):
+ mod = self.imp.new_module('hi')
+ assert mod.__name__ == 'hi'
+ mod = self.imp.init_builtin('hello.world.this.is.never.a.builtin.module.name')
+ assert mod is None
+ mod = self.imp.init_frozen('hello.world.this.is.never.a.frozen.module.name')
+ assert mod is None
+ assert self.imp.is_builtin('sys')
+ assert not self.imp.is_builtin('hello.world.this.is.never.a.builtin.module.name')
+ assert not self.imp.is_frozen('hello.world.this.is.never.a.frozen.module.name')
+
+
+ def test_load_module_py(self):
+ fn = self._py_file()
+ descr = ('.py', 'U', self.imp.PY_SOURCE)
+ f = open(fn, 'U')
+ mod = self.imp.load_module('test_imp_extra_AUTO1', f, fn, descr)
+ f.close()
+ assert mod.MARKER == 42
+ import test_imp_extra_AUTO1
+ assert mod is test_imp_extra_AUTO1
+
+ def test_load_module_pyc(self):
+ fn = self._pyc_file()
+ try:
+ descr = ('.pyc', 'rb', self.imp.PY_COMPILED)
+ f = open(fn, 'rb')
+ mod = self.imp.load_module('test_imp_extra_AUTO2', f, fn, descr)
+ f.close()
+ assert mod.marker == 42
+ import test_imp_extra_AUTO2
+ assert mod is test_imp_extra_AUTO2
+ finally:
+ os.unlink(fn)
+
+ def test_load_source(self):
+ fn = self._py_file()
+ mod = self.imp.load_source('test_imp_extra_AUTO3', fn)
+ assert mod.MARKER == 42
+ import test_imp_extra_AUTO3
+ assert mod is test_imp_extra_AUTO3
+
+ def test_load_module_pyc(self):
+ import os
+ fn = self._pyc_file()
+ try:
+ mod = self.imp.load_compiled('test_imp_extra_AUTO4', fn)
+ assert mod.marker == 42
+ import test_imp_extra_AUTO4
+ assert mod is test_imp_extra_AUTO4
+ finally:
+ os.unlink(fn)
+
+ def test_load_broken_pyc(self):
+ fn = self._py_file()
+ try:
+ self.imp.load_compiled('test_imp_extra_AUTO5', fn)
+ except ImportError:
+ pass
+ else:
+ raise Exception("expected an ImportError")
Modified: pypy/trunk/pypy/module/oracle/interp_lob.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_lob.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_lob.py Tue Mar 9 15:46:14 2010
@@ -1,47 +1,47 @@
-from pypy.interpreter.baseobjspace import Wrappable
-from pypy.interpreter.typedef import TypeDef
-from pypy.interpreter.gateway import ObjSpace
-from pypy.interpreter.gateway import interp2app
-from pypy.interpreter.error import OperationError
-
-from pypy.module.oracle.interp_error import get
-
-class W_ExternalLob(Wrappable):
- def __init__(self, var, pos):
- self.lobVar = var
- self.pos = pos
- self.internalFetchNum = var.internalFetchNum
-
- def _verify(self, space):
- if self.internalFetchNum != self.lobVar.internalFetchNum:
- raise OperationError(
- get(space).w_ProgrammingError,
- space.wrap(
- "LOB variable no longer valid after subsequent fetch"))
-
- def read(self, space, offset=-1, amount=-1):
- self._verify(space)
- return self.lobVar.read(space, self.pos, offset, amount)
- read.unwrap_spec = ['self', ObjSpace, int, int]
-
- def size(self, space):
- self._verify(space)
- return space.wrap(self.lobVar.getLength(space, self.pos))
- size.unwrap_spec = ['self', ObjSpace]
-
- def trim(self, space, newSize=0):
- self._verify(space)
- self.lobVar.trim(space, self.pos, newSize)
- trim.unwrap_spec = ['self', ObjSpace, int]
-
- def desc_str(self, space):
- return self.read(space, offset=1, amount=-1)
- desc_str.unwrap_spec = ['self', ObjSpace]
-
-W_ExternalLob.typedef = TypeDef(
- 'ExternalLob',
- read = interp2app(W_ExternalLob.read),
- size = interp2app(W_ExternalLob.size),
- trim = interp2app(W_ExternalLob.trim),
- __str__ = interp2app(W_ExternalLob.desc_str),
- )
+from pypy.interpreter.baseobjspace import Wrappable
+from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.gateway import ObjSpace
+from pypy.interpreter.gateway import interp2app
+from pypy.interpreter.error import OperationError
+
+from pypy.module.oracle.interp_error import get
+
+class W_ExternalLob(Wrappable):
+ def __init__(self, var, pos):
+ self.lobVar = var
+ self.pos = pos
+ self.internalFetchNum = var.internalFetchNum
+
+ def _verify(self, space):
+ if self.internalFetchNum != self.lobVar.internalFetchNum:
+ raise OperationError(
+ get(space).w_ProgrammingError,
+ space.wrap(
+ "LOB variable no longer valid after subsequent fetch"))
+
+ def read(self, space, offset=-1, amount=-1):
+ self._verify(space)
+ return self.lobVar.read(space, self.pos, offset, amount)
+ read.unwrap_spec = ['self', ObjSpace, int, int]
+
+ def size(self, space):
+ self._verify(space)
+ return space.wrap(self.lobVar.getLength(space, self.pos))
+ size.unwrap_spec = ['self', ObjSpace]
+
+ def trim(self, space, newSize=0):
+ self._verify(space)
+ self.lobVar.trim(space, self.pos, newSize)
+ trim.unwrap_spec = ['self', ObjSpace, int]
+
+ def desc_str(self, space):
+ return self.read(space, offset=1, amount=-1)
+ desc_str.unwrap_spec = ['self', ObjSpace]
+
+W_ExternalLob.typedef = TypeDef(
+ 'ExternalLob',
+ read = interp2app(W_ExternalLob.read),
+ size = interp2app(W_ExternalLob.size),
+ trim = interp2app(W_ExternalLob.trim),
+ __str__ = interp2app(W_ExternalLob.desc_str),
+ )
Modified: pypy/trunk/pypy/module/oracle/interp_object.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_object.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_object.py Tue Mar 9 15:46:14 2010
@@ -1,516 +1,516 @@
-from pypy.interpreter.baseobjspace import Wrappable
-from pypy.interpreter.typedef import TypeDef, GetSetProperty
-from pypy.interpreter.typedef import interp_attrproperty
-from pypy.interpreter.gateway import ObjSpace
-from pypy.interpreter.gateway import interp2app
-from pypy.interpreter.error import OperationError
-from pypy.rpython.lltypesystem import rffi, lltype
-
-from pypy.module.oracle import roci, config, transform
-from pypy.module.oracle.interp_error import get
-
-class W_ObjectType(Wrappable):
- def __init__(self, connection, param):
- self.tdo = lltype.nullptr(roci.dvoidp.TO)
- self.environment = connection.environment
- self.isCollection = False
- self.initialize(connection, param)
-
- def __del__(self):
- if self.tdo:
- roci.OCIObjectUnpin(
- self.environment.handle,
- self.environment.errorHandle,
- self.tdo)
-
- def initialize(self, connection, param):
- nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
- flavor='raw')
- lenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO, 1,
- flavor='raw')
- try:
- # determine the schema of the type
- status = roci.OCIAttrGet(
- param, roci.OCI_HTYPE_DESCRIBE,
- rffi.cast(roci.dvoidp, nameptr),
- lenptr,
- roci.OCI_ATTR_SCHEMA_NAME,
- self.environment.errorHandle)
- self.environment.checkForError(
- status,
- "ObjectType_Initialize(): get schema name")
- self.schema = rffi.charpsize2str(nameptr[0], lenptr[0])
-
- # determine the name of the type
- status = roci.OCIAttrGet(
- param, roci.OCI_HTYPE_DESCRIBE,
- rffi.cast(roci.dvoidp, nameptr),
- lenptr,
- roci.OCI_ATTR_TYPE_NAME,
- self.environment.errorHandle)
- self.environment.checkForError(
- status,
- "ObjectType_Initialize(): get schema name")
- self.name = rffi.charpsize2str(nameptr[0], lenptr[0])
- finally:
- lltype.free(nameptr, flavor='raw')
- lltype.free(lenptr, flavor='raw')
-
- # retrieve TDO (type descriptor object) of the parameter
- tdorefptr = lltype.malloc(rffi.CArrayPtr(roci.OCIRef).TO, 1,
- flavor='raw')
- try:
- status = roci.OCIAttrGet(
- param, roci.OCI_HTYPE_DESCRIBE,
- rffi.cast(roci.dvoidp, tdorefptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_REF_TDO,
- self.environment.errorHandle)
- self.environment.checkForError(
- status,
- "ObjectType_Initialize(): get TDO reference")
- tdoref = tdorefptr[0]
- finally:
- lltype.free(tdorefptr, flavor='raw')
-
- tdoptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO, 1,
- flavor='raw')
- try:
- status = roci.OCIObjectPin(
- self.environment.handle,
- self.environment.errorHandle,
- tdoref,
- None, roci.OCI_PIN_ANY,
- roci.OCI_DURATION_SESSION, roci.OCI_LOCK_NONE,
- tdoptr)
- self.environment.checkForError(
- status,
- "ObjectType_Initialize(): pin TDO reference")
- self.tdo = tdoptr[0]
- finally:
- lltype.free(tdoptr, flavor='raw')
-
- # acquire a describe handle
- handleptr = lltype.malloc(rffi.CArrayPtr(roci.OCIDescribe).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIHandleAlloc(
- self.environment.handle,
- handleptr, roci.OCI_HTYPE_DESCRIBE, 0,
- lltype.nullptr(rffi.CArray(roci.dvoidp)))
- self.environment.checkForError(
- status, "ObjectType_Initialize(): allocate describe handle")
- describeHandle = handleptr[0]
- finally:
- lltype.free(handleptr, flavor='raw')
-
- # describe the type
- try:
- self.describe(connection, describeHandle)
- finally:
- roci.OCIHandleFree(describeHandle, roci.OCI_HTYPE_DESCRIBE)
-
- def describe(self, connection, describeHandle):
- "Describe the type and store information about it as needed"
-
- # describe the type
- status = roci.OCIDescribeAny(
- connection.handle,
- self.environment.errorHandle,
- self.tdo, 0,
- roci.OCI_OTYPE_PTR,
- roci.OCI_DEFAULT,
- roci.OCI_PTYPE_TYPE,
- describeHandle)
- self.environment.checkForError(
- status, "ObjectType_Describe(): describe type")
-
- # get top level parameter descriptor
- paramptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- describeHandle, roci.OCI_HTYPE_DESCRIBE,
- rffi.cast(roci.dvoidp, paramptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_PARAM,
- self.environment.errorHandle)
- self.environment.checkForError(
- status,
- "ObjectType_Describe(): get top level parameter descriptor")
- toplevelParam = paramptr[0]
- finally:
- lltype.free(paramptr, flavor='raw')
-
- # determine type of type
- typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- toplevelParam, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, typecodeptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_TYPECODE,
- self.environment.errorHandle)
- self.environment.checkForError(
- status, "ObjectType_Describe(): get type code")
- typeCode = rffi.cast(lltype.Signed, typecodeptr[0])
- finally:
- lltype.free(typecodeptr, flavor='raw')
-
- # if a collection, need to determine the sub type
- if typeCode == roci.OCI_TYPECODE_NAMEDCOLLECTION:
- self.isCollection = 1
-
- # determine type of collection
- typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- toplevelParam, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, typecodeptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_TYPECODE,
- self.environment.errorHandle)
- self.environment.checkForError(
- status, "ObjectType_Describe(): get collection type code")
- self.collectionTypeCode = typecodeptr[0]
- finally:
- lltype.free(typecodeptr, flavor='raw')
-
- # acquire collection parameter descriptor
- paramptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- toplevelParam, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, paramptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_COLLECTION_ELEMENT,
- self.environment.errorHandle)
- self.environment.checkForError(
- status,
- "ObjectType_Describe(): get collection descriptor")
- collectionParam = paramptr[0]
- finally:
- lltype.free(paramptr, flavor='raw')
-
- # determine type of element
- typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- collectionParam, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, typecodeptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_TYPECODE,
- self.environment.errorHandle)
- self.environment.checkForError(
- status, "ObjectType_Describe(): get element type code")
- self.elementTypeCode = rffi.cast(lltype.Signed, typecodeptr[0])
- finally:
- lltype.free(typecodeptr, flavor='raw')
-
- # if element type is an object type get its type
- if self.elementTypeCode == roci.OCI_TYPECODE_OBJECT:
- self.elementType = W_ObjectType(connection, collectionParam)
- else:
- self.elementType = None
-
- # determine the number of attributes
- numptr = lltype.malloc(roci.Ptr(roci.ub2).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- toplevelParam, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, numptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_NUM_TYPE_ATTRS,
- self.environment.errorHandle)
- self.environment.checkForError(
- status, "ObjectType_Describe(): get number of attributes")
- numAttributes = numptr[0]
- finally:
- lltype.free(numptr, flavor='raw')
-
- # allocate the attribute list and dictionary
- self.attributes = []
- self.attributesByName = {}
-
- # acquire the list parameter descriptor
- listptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- toplevelParam, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, listptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_LIST_TYPE_ATTRS,
- self.environment.errorHandle)
- self.environment.checkForError(
- status, "ObjectType_Describe(): get list parameter descriptor")
- attributeListParam = listptr[0]
- finally:
- lltype.free(listptr, flavor='raw')
-
- # create attribute information for each attribute
- for i in range(numAttributes):
- paramptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIParamGet(
- attributeListParam, roci.OCI_DTYPE_PARAM,
- self.environment.errorHandle,
- paramptr, i + 1)
- self.environment.checkForError(
- status,
- "ObjectType_Describe(): get attribute param descriptor")
- attribute = W_ObjectAttribute(connection, paramptr[0])
- finally:
- lltype.free(paramptr, flavor='raw')
-
- self.attributes.append(attribute)
- self.attributesByName[attribute.name] = attribute
-
- def get_attributes(space, self):
- return space.newlist([space.wrap(attr) for attr in self.attributes])
-
-W_ObjectType.typedef = TypeDef(
- 'ObjectType',
- schema = interp_attrproperty('schema', W_ObjectType),
- name = interp_attrproperty('name', W_ObjectType),
- attributes = GetSetProperty(W_ObjectType.get_attributes),
- )
-
-class W_ObjectAttribute(Wrappable):
- def __init__(self, connection, param):
- self.initialize(connection, param)
-
- def initialize(self, connection, param):
- # determine the name of the attribute
- nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
- flavor='raw')
- lenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO, 1,
- flavor='raw')
- try:
- status = roci.OCIAttrGet(
- param, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, nameptr),
- lenptr,
- roci.OCI_ATTR_NAME,
- connection.environment.errorHandle)
- connection.environment.checkForError(
- status,
- "ObjectAttribute_Initialize(): get name")
- self.name = rffi.charpsize2str(nameptr[0], lenptr[0])
- finally:
- lltype.free(nameptr, flavor='raw')
- lltype.free(lenptr, flavor='raw')
-
- # determine the type of the attribute
- typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- param, roci.OCI_DTYPE_PARAM,
- rffi.cast(roci.dvoidp, typecodeptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- roci.OCI_ATTR_TYPECODE,
- connection.environment.errorHandle)
- connection.environment.checkForError(
- status, "ObjectType_Describe(): get type code")
- self.typeCode = rffi.cast(lltype.Signed, typecodeptr[0])
- finally:
- lltype.free(typecodeptr, flavor='raw')
-
- # if the type of the attribute is object, recurse
- if self.typeCode in (roci.OCI_TYPECODE_NAMEDCOLLECTION,
- roci.OCI_TYPECODE_OBJECT):
- self.subType = W_ObjectType(connection, param)
- else:
- self.subType = None
-
-W_ObjectAttribute.typedef = TypeDef(
- 'ObjectAttribute',
- name = interp_attrproperty('name', W_ObjectAttribute),
- )
-
-class W_ExternalObject(Wrappable):
- def __init__(self, var, objectType, instance, indicator,
- isIndependent=True):
- self.var = var # keepalive
- self.objectType = objectType
- self.instance = instance
- self.indicator = indicator
- self.isIndependent = isIndependent
-
- def getattr(self, space, attr):
- try:
- attribute = self.objectType.attributesByName[attr]
- except KeyError:
- msg = "ExternalObject has no attribute '%s'" %(attr,)
- raise OperationError(space.w_AttributeError, space.wrap(msg))
-
- environment = self.objectType.environment
-
- scalarvalueindicatorptr = lltype.malloc(rffi.CArrayPtr(roci.OCIInd).TO,
- 1, flavor='raw')
- valueindicatorptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
- 1, flavor='raw')
- valueptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
- 1, flavor='raw')
- tdoptr = lltype.malloc(rffi.CArrayPtr(roci.OCIType).TO,
- 1, flavor='raw')
- nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO,
- 1, flavor='raw')
- nameptr[0] = rffi.str2charp(attr)
- namelenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO,
- 1, flavor='raw')
- namelenptr[0] = rffi.cast(roci.ub4, len(attr))
-
- try:
- status = roci.OCIObjectGetAttr(
- environment.handle,
- environment.errorHandle,
- self.instance,
- self.indicator,
- self.objectType.tdo,
- nameptr, namelenptr, 1,
- lltype.nullptr(roci.Ptr(roci.ub4).TO), 0,
- scalarvalueindicatorptr,
- valueindicatorptr,
- valueptr,
- tdoptr)
- environment.checkForError(
- status, "ExternalObject_GetAttributeValue(): getting value")
-
- # determine the proper null indicator
- valueIndicator = valueindicatorptr[0]
- if not valueIndicator:
- valueIndicator = rffi.cast(roci.dvoidp,
- scalarvalueindicatorptr)
- value = valueptr[0]
-
- return convertObject(
- space, environment,
- attribute.typeCode,
- value, valueIndicator,
- self, attribute.subType)
- finally:
- lltype.free(scalarvalueindicatorptr, flavor='raw')
- lltype.free(valueindicatorptr, flavor='raw')
- lltype.free(valueptr, flavor='raw')
- lltype.free(tdoptr, flavor='raw')
- rffi.free_charp(nameptr[0])
- lltype.free(nameptr, flavor='raw')
- lltype.free(namelenptr, flavor='raw')
-
- getattr.unwrap_spec = ['self', ObjSpace, str]
-
-W_ExternalObject.typedef = TypeDef(
- 'ExternalObject',
- type = interp_attrproperty('objectType', W_ExternalObject),
- __getattr__ = interp2app(W_ExternalObject.getattr),
- )
-
-def convertObject(space, environment, typeCode,
- value, indicator, var, subtype):
-
- # null values returned as None
- if (rffi.cast(lltype.Signed,
- rffi.cast(roci.Ptr(roci.OCIInd),
- indicator)[0])
- ==
- rffi.cast(lltype.Signed, roci.OCI_IND_NULL)):
- return space.w_None
-
- if typeCode in (roci.OCI_TYPECODE_CHAR,
- roci.OCI_TYPECODE_VARCHAR,
- roci.OCI_TYPECODE_VARCHAR2):
- strValue = rffi.cast(roci.Ptr(roci.OCIString), value)[0]
- ptr = roci.OCIStringPtr(environment.handle, strValue)
- size = roci.OCIStringSize(environment.handle, strValue)
- return config.w_string(space, ptr, size)
- elif typeCode == roci.OCI_TYPECODE_NUMBER:
- return transform.OracleNumberToPythonFloat(
- environment,
- rffi.cast(roci.Ptr(roci.OCINumber), value))
- elif typeCode == roci.OCI_TYPECODE_DATE:
- dateValue = rffi.cast(roci.Ptr(roci.OCIDate), value)
- return transform.OracleDateToPythonDateTime(environment, dateValue)
- elif typeCode == roci.OCI_TYPECODE_TIMESTAMP:
- dateValue = rffi.cast(roci.Ptr(roci.OCIDateTime), value)
- return transform.OracleTimestampToPythonDate(environment, dateValue)
- elif typeCode == roci.OCI_TYPECODE_OBJECT:
- return space.wrap(W_ExternalObject(var, subtype, value, indicator,
- isIndependent=False))
- elif typeCode == roci.OCI_TYPECODE_NAMEDCOLLECTION:
- return convertCollection(space, environment, value, var, subtype)
-
- raise OperationError(
- get(space).w_NotSupportedError,
- space.wrap(
- "ExternalObjectVar_GetAttributeValue(): unhandled data type %d" % (
- typeCode,)))
-
-
-def convertCollection(space, environment, value, var, objectType):
- "Convert a collection to a Python list"
-
- result_w = []
-
- iterptr = lltype.malloc(rffi.CArrayPtr(roci.OCIIter).TO, 1, flavor='raw')
- try:
- # create the iterator
- status = roci.OCIIterCreate(
- environment.handle,
- environment.errorHandle,
- value,
- iterptr)
- environment.checkForError(
- status, "ExternalObjectVar_ConvertCollection(): creating iterator")
-
- try:
- # create the result list
- valueptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
- 1, flavor='raw')
- indicatorptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
- 1, flavor='raw')
- eofptr = lltype.malloc(rffi.CArrayPtr(roci.boolean).TO,
- 1, flavor='raw')
- try:
- while True:
- status = roci.OCIIterNext(
- environment.handle,
- environment.errorHandle,
- iterptr[0],
- valueptr,
- indicatorptr,
- eofptr)
- environment.checkForError(
- status,
- "ExternalObjectVar_ConvertCollection(): get next")
-
- if rffi.cast(lltype.Signed, eofptr[0]):
- break
- element = convertObject(
- space, environment,
- objectType.elementTypeCode,
- valueptr[0], indicatorptr[0],
- var, objectType.elementType)
- result_w.append(element)
- finally:
- lltype.free(valueptr, flavor='raw')
- lltype.free(indicatorptr, flavor='raw')
- lltype.free(eofptr, flavor='raw')
-
- finally:
- roci.OCIIterDelete(
- environment.handle,
- environment.errorHandle,
- iterptr)
- finally:
- lltype.free(iterptr, flavor='raw')
-
- return space.newlist(result_w)
-
+from pypy.interpreter.baseobjspace import Wrappable
+from pypy.interpreter.typedef import TypeDef, GetSetProperty
+from pypy.interpreter.typedef import interp_attrproperty
+from pypy.interpreter.gateway import ObjSpace
+from pypy.interpreter.gateway import interp2app
+from pypy.interpreter.error import OperationError
+from pypy.rpython.lltypesystem import rffi, lltype
+
+from pypy.module.oracle import roci, config, transform
+from pypy.module.oracle.interp_error import get
+
+class W_ObjectType(Wrappable):
+ def __init__(self, connection, param):
+ self.tdo = lltype.nullptr(roci.dvoidp.TO)
+ self.environment = connection.environment
+ self.isCollection = False
+ self.initialize(connection, param)
+
+ def __del__(self):
+ if self.tdo:
+ roci.OCIObjectUnpin(
+ self.environment.handle,
+ self.environment.errorHandle,
+ self.tdo)
+
+ def initialize(self, connection, param):
+ nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
+ flavor='raw')
+ lenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO, 1,
+ flavor='raw')
+ try:
+ # determine the schema of the type
+ status = roci.OCIAttrGet(
+ param, roci.OCI_HTYPE_DESCRIBE,
+ rffi.cast(roci.dvoidp, nameptr),
+ lenptr,
+ roci.OCI_ATTR_SCHEMA_NAME,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Initialize(): get schema name")
+ self.schema = rffi.charpsize2str(nameptr[0], lenptr[0])
+
+ # determine the name of the type
+ status = roci.OCIAttrGet(
+ param, roci.OCI_HTYPE_DESCRIBE,
+ rffi.cast(roci.dvoidp, nameptr),
+ lenptr,
+ roci.OCI_ATTR_TYPE_NAME,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Initialize(): get schema name")
+ self.name = rffi.charpsize2str(nameptr[0], lenptr[0])
+ finally:
+ lltype.free(nameptr, flavor='raw')
+ lltype.free(lenptr, flavor='raw')
+
+ # retrieve TDO (type descriptor object) of the parameter
+ tdorefptr = lltype.malloc(rffi.CArrayPtr(roci.OCIRef).TO, 1,
+ flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ param, roci.OCI_HTYPE_DESCRIBE,
+ rffi.cast(roci.dvoidp, tdorefptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_REF_TDO,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Initialize(): get TDO reference")
+ tdoref = tdorefptr[0]
+ finally:
+ lltype.free(tdorefptr, flavor='raw')
+
+ tdoptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO, 1,
+ flavor='raw')
+ try:
+ status = roci.OCIObjectPin(
+ self.environment.handle,
+ self.environment.errorHandle,
+ tdoref,
+ None, roci.OCI_PIN_ANY,
+ roci.OCI_DURATION_SESSION, roci.OCI_LOCK_NONE,
+ tdoptr)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Initialize(): pin TDO reference")
+ self.tdo = tdoptr[0]
+ finally:
+ lltype.free(tdoptr, flavor='raw')
+
+ # acquire a describe handle
+ handleptr = lltype.malloc(rffi.CArrayPtr(roci.OCIDescribe).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIHandleAlloc(
+ self.environment.handle,
+ handleptr, roci.OCI_HTYPE_DESCRIBE, 0,
+ lltype.nullptr(rffi.CArray(roci.dvoidp)))
+ self.environment.checkForError(
+ status, "ObjectType_Initialize(): allocate describe handle")
+ describeHandle = handleptr[0]
+ finally:
+ lltype.free(handleptr, flavor='raw')
+
+ # describe the type
+ try:
+ self.describe(connection, describeHandle)
+ finally:
+ roci.OCIHandleFree(describeHandle, roci.OCI_HTYPE_DESCRIBE)
+
+ def describe(self, connection, describeHandle):
+ "Describe the type and store information about it as needed"
+
+ # describe the type
+ status = roci.OCIDescribeAny(
+ connection.handle,
+ self.environment.errorHandle,
+ self.tdo, 0,
+ roci.OCI_OTYPE_PTR,
+ roci.OCI_DEFAULT,
+ roci.OCI_PTYPE_TYPE,
+ describeHandle)
+ self.environment.checkForError(
+ status, "ObjectType_Describe(): describe type")
+
+ # get top level parameter descriptor
+ paramptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ describeHandle, roci.OCI_HTYPE_DESCRIBE,
+ rffi.cast(roci.dvoidp, paramptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_PARAM,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Describe(): get top level parameter descriptor")
+ toplevelParam = paramptr[0]
+ finally:
+ lltype.free(paramptr, flavor='raw')
+
+ # determine type of type
+ typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ toplevelParam, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, typecodeptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_TYPECODE,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status, "ObjectType_Describe(): get type code")
+ typeCode = rffi.cast(lltype.Signed, typecodeptr[0])
+ finally:
+ lltype.free(typecodeptr, flavor='raw')
+
+ # if a collection, need to determine the sub type
+ if typeCode == roci.OCI_TYPECODE_NAMEDCOLLECTION:
+ self.isCollection = 1
+
+ # determine type of collection
+ typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ toplevelParam, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, typecodeptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_TYPECODE,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status, "ObjectType_Describe(): get collection type code")
+ self.collectionTypeCode = typecodeptr[0]
+ finally:
+ lltype.free(typecodeptr, flavor='raw')
+
+ # acquire collection parameter descriptor
+ paramptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ toplevelParam, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, paramptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_COLLECTION_ELEMENT,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Describe(): get collection descriptor")
+ collectionParam = paramptr[0]
+ finally:
+ lltype.free(paramptr, flavor='raw')
+
+ # determine type of element
+ typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ collectionParam, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, typecodeptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_TYPECODE,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status, "ObjectType_Describe(): get element type code")
+ self.elementTypeCode = rffi.cast(lltype.Signed, typecodeptr[0])
+ finally:
+ lltype.free(typecodeptr, flavor='raw')
+
+ # if element type is an object type get its type
+ if self.elementTypeCode == roci.OCI_TYPECODE_OBJECT:
+ self.elementType = W_ObjectType(connection, collectionParam)
+ else:
+ self.elementType = None
+
+ # determine the number of attributes
+ numptr = lltype.malloc(roci.Ptr(roci.ub2).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ toplevelParam, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, numptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_NUM_TYPE_ATTRS,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status, "ObjectType_Describe(): get number of attributes")
+ numAttributes = numptr[0]
+ finally:
+ lltype.free(numptr, flavor='raw')
+
+ # allocate the attribute list and dictionary
+ self.attributes = []
+ self.attributesByName = {}
+
+ # acquire the list parameter descriptor
+ listptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ toplevelParam, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, listptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_LIST_TYPE_ATTRS,
+ self.environment.errorHandle)
+ self.environment.checkForError(
+ status, "ObjectType_Describe(): get list parameter descriptor")
+ attributeListParam = listptr[0]
+ finally:
+ lltype.free(listptr, flavor='raw')
+
+ # create attribute information for each attribute
+ for i in range(numAttributes):
+ paramptr = lltype.malloc(roci.Ptr(roci.OCIParam).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIParamGet(
+ attributeListParam, roci.OCI_DTYPE_PARAM,
+ self.environment.errorHandle,
+ paramptr, i + 1)
+ self.environment.checkForError(
+ status,
+ "ObjectType_Describe(): get attribute param descriptor")
+ attribute = W_ObjectAttribute(connection, paramptr[0])
+ finally:
+ lltype.free(paramptr, flavor='raw')
+
+ self.attributes.append(attribute)
+ self.attributesByName[attribute.name] = attribute
+
+ def get_attributes(space, self):
+ return space.newlist([space.wrap(attr) for attr in self.attributes])
+
+W_ObjectType.typedef = TypeDef(
+ 'ObjectType',
+ schema = interp_attrproperty('schema', W_ObjectType),
+ name = interp_attrproperty('name', W_ObjectType),
+ attributes = GetSetProperty(W_ObjectType.get_attributes),
+ )
+
+class W_ObjectAttribute(Wrappable):
+ def __init__(self, connection, param):
+ self.initialize(connection, param)
+
+ def initialize(self, connection, param):
+ # determine the name of the attribute
+ nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
+ flavor='raw')
+ lenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO, 1,
+ flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ param, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, nameptr),
+ lenptr,
+ roci.OCI_ATTR_NAME,
+ connection.environment.errorHandle)
+ connection.environment.checkForError(
+ status,
+ "ObjectAttribute_Initialize(): get name")
+ self.name = rffi.charpsize2str(nameptr[0], lenptr[0])
+ finally:
+ lltype.free(nameptr, flavor='raw')
+ lltype.free(lenptr, flavor='raw')
+
+ # determine the type of the attribute
+ typecodeptr = lltype.malloc(roci.Ptr(roci.OCITypeCode).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ param, roci.OCI_DTYPE_PARAM,
+ rffi.cast(roci.dvoidp, typecodeptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ roci.OCI_ATTR_TYPECODE,
+ connection.environment.errorHandle)
+ connection.environment.checkForError(
+ status, "ObjectType_Describe(): get type code")
+ self.typeCode = rffi.cast(lltype.Signed, typecodeptr[0])
+ finally:
+ lltype.free(typecodeptr, flavor='raw')
+
+ # if the type of the attribute is object, recurse
+ if self.typeCode in (roci.OCI_TYPECODE_NAMEDCOLLECTION,
+ roci.OCI_TYPECODE_OBJECT):
+ self.subType = W_ObjectType(connection, param)
+ else:
+ self.subType = None
+
+W_ObjectAttribute.typedef = TypeDef(
+ 'ObjectAttribute',
+ name = interp_attrproperty('name', W_ObjectAttribute),
+ )
+
+class W_ExternalObject(Wrappable):
+ def __init__(self, var, objectType, instance, indicator,
+ isIndependent=True):
+ self.var = var # keepalive
+ self.objectType = objectType
+ self.instance = instance
+ self.indicator = indicator
+ self.isIndependent = isIndependent
+
+ def getattr(self, space, attr):
+ try:
+ attribute = self.objectType.attributesByName[attr]
+ except KeyError:
+ msg = "ExternalObject has no attribute '%s'" %(attr,)
+ raise OperationError(space.w_AttributeError, space.wrap(msg))
+
+ environment = self.objectType.environment
+
+ scalarvalueindicatorptr = lltype.malloc(rffi.CArrayPtr(roci.OCIInd).TO,
+ 1, flavor='raw')
+ valueindicatorptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
+ 1, flavor='raw')
+ valueptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
+ 1, flavor='raw')
+ tdoptr = lltype.malloc(rffi.CArrayPtr(roci.OCIType).TO,
+ 1, flavor='raw')
+ nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO,
+ 1, flavor='raw')
+ nameptr[0] = rffi.str2charp(attr)
+ namelenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO,
+ 1, flavor='raw')
+ namelenptr[0] = rffi.cast(roci.ub4, len(attr))
+
+ try:
+ status = roci.OCIObjectGetAttr(
+ environment.handle,
+ environment.errorHandle,
+ self.instance,
+ self.indicator,
+ self.objectType.tdo,
+ nameptr, namelenptr, 1,
+ lltype.nullptr(roci.Ptr(roci.ub4).TO), 0,
+ scalarvalueindicatorptr,
+ valueindicatorptr,
+ valueptr,
+ tdoptr)
+ environment.checkForError(
+ status, "ExternalObject_GetAttributeValue(): getting value")
+
+ # determine the proper null indicator
+ valueIndicator = valueindicatorptr[0]
+ if not valueIndicator:
+ valueIndicator = rffi.cast(roci.dvoidp,
+ scalarvalueindicatorptr)
+ value = valueptr[0]
+
+ return convertObject(
+ space, environment,
+ attribute.typeCode,
+ value, valueIndicator,
+ self, attribute.subType)
+ finally:
+ lltype.free(scalarvalueindicatorptr, flavor='raw')
+ lltype.free(valueindicatorptr, flavor='raw')
+ lltype.free(valueptr, flavor='raw')
+ lltype.free(tdoptr, flavor='raw')
+ rffi.free_charp(nameptr[0])
+ lltype.free(nameptr, flavor='raw')
+ lltype.free(namelenptr, flavor='raw')
+
+ getattr.unwrap_spec = ['self', ObjSpace, str]
+
+W_ExternalObject.typedef = TypeDef(
+ 'ExternalObject',
+ type = interp_attrproperty('objectType', W_ExternalObject),
+ __getattr__ = interp2app(W_ExternalObject.getattr),
+ )
+
+def convertObject(space, environment, typeCode,
+ value, indicator, var, subtype):
+
+ # null values returned as None
+ if (rffi.cast(lltype.Signed,
+ rffi.cast(roci.Ptr(roci.OCIInd),
+ indicator)[0])
+ ==
+ rffi.cast(lltype.Signed, roci.OCI_IND_NULL)):
+ return space.w_None
+
+ if typeCode in (roci.OCI_TYPECODE_CHAR,
+ roci.OCI_TYPECODE_VARCHAR,
+ roci.OCI_TYPECODE_VARCHAR2):
+ strValue = rffi.cast(roci.Ptr(roci.OCIString), value)[0]
+ ptr = roci.OCIStringPtr(environment.handle, strValue)
+ size = roci.OCIStringSize(environment.handle, strValue)
+ return config.w_string(space, ptr, size)
+ elif typeCode == roci.OCI_TYPECODE_NUMBER:
+ return transform.OracleNumberToPythonFloat(
+ environment,
+ rffi.cast(roci.Ptr(roci.OCINumber), value))
+ elif typeCode == roci.OCI_TYPECODE_DATE:
+ dateValue = rffi.cast(roci.Ptr(roci.OCIDate), value)
+ return transform.OracleDateToPythonDateTime(environment, dateValue)
+ elif typeCode == roci.OCI_TYPECODE_TIMESTAMP:
+ dateValue = rffi.cast(roci.Ptr(roci.OCIDateTime), value)
+ return transform.OracleTimestampToPythonDate(environment, dateValue)
+ elif typeCode == roci.OCI_TYPECODE_OBJECT:
+ return space.wrap(W_ExternalObject(var, subtype, value, indicator,
+ isIndependent=False))
+ elif typeCode == roci.OCI_TYPECODE_NAMEDCOLLECTION:
+ return convertCollection(space, environment, value, var, subtype)
+
+ raise OperationError(
+ get(space).w_NotSupportedError,
+ space.wrap(
+ "ExternalObjectVar_GetAttributeValue(): unhandled data type %d" % (
+ typeCode,)))
+
+
+def convertCollection(space, environment, value, var, objectType):
+ "Convert a collection to a Python list"
+
+ result_w = []
+
+ iterptr = lltype.malloc(rffi.CArrayPtr(roci.OCIIter).TO, 1, flavor='raw')
+ try:
+ # create the iterator
+ status = roci.OCIIterCreate(
+ environment.handle,
+ environment.errorHandle,
+ value,
+ iterptr)
+ environment.checkForError(
+ status, "ExternalObjectVar_ConvertCollection(): creating iterator")
+
+ try:
+ # create the result list
+ valueptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
+ 1, flavor='raw')
+ indicatorptr = lltype.malloc(rffi.CArrayPtr(roci.dvoidp).TO,
+ 1, flavor='raw')
+ eofptr = lltype.malloc(rffi.CArrayPtr(roci.boolean).TO,
+ 1, flavor='raw')
+ try:
+ while True:
+ status = roci.OCIIterNext(
+ environment.handle,
+ environment.errorHandle,
+ iterptr[0],
+ valueptr,
+ indicatorptr,
+ eofptr)
+ environment.checkForError(
+ status,
+ "ExternalObjectVar_ConvertCollection(): get next")
+
+ if rffi.cast(lltype.Signed, eofptr[0]):
+ break
+ element = convertObject(
+ space, environment,
+ objectType.elementTypeCode,
+ valueptr[0], indicatorptr[0],
+ var, objectType.elementType)
+ result_w.append(element)
+ finally:
+ lltype.free(valueptr, flavor='raw')
+ lltype.free(indicatorptr, flavor='raw')
+ lltype.free(eofptr, flavor='raw')
+
+ finally:
+ roci.OCIIterDelete(
+ environment.handle,
+ environment.errorHandle,
+ iterptr)
+ finally:
+ lltype.free(iterptr, flavor='raw')
+
+ return space.newlist(result_w)
+
Modified: pypy/trunk/pypy/module/oracle/interp_pool.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_pool.py (original)
+++ pypy/trunk/pypy/module/oracle/interp_pool.py Tue Mar 9 15:46:14 2010
@@ -1,216 +1,216 @@
-from pypy.interpreter.baseobjspace import Wrappable
-from pypy.interpreter.argument import Arguments, Signature
-from pypy.interpreter.gateway import ObjSpace, W_Root, NoneNotWrapped
-from pypy.interpreter.gateway import interp2app
-from pypy.interpreter.typedef import TypeDef, GetSetProperty
-from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
-from pypy.interpreter.error import OperationError
-from pypy.rpython.lltypesystem import rffi, lltype
-
-Null = NoneNotWrapped
-
-from pypy.module.oracle import roci, config
-from pypy.module.oracle import interp_error, interp_environ
-from pypy.module.oracle.interp_error import get
-
-class W_SessionPool(Wrappable):
- def __init__(self):
- self.environment = None
-
- def descr_new(space, w_subtype,
- w_user, w_password, w_dsn,
- min, max, increment,
- w_connectiontype=Null,
- threaded=False,
- getmode=roci.OCI_SPOOL_ATTRVAL_NOWAIT,
- events=False,
- homogeneous=True):
- self = space.allocate_instance(W_SessionPool, w_subtype)
- W_SessionPool.__init__(self)
-
- if w_connectiontype is not None:
- if not space.is_true(space.issubtype(w_connectiontype,
- get(space).w_Connection)):
- raise OperationError(
- interp_error.get(space).w_ProgrammingError,
- space.wrap(
- "connectiontype must be a subclass of Connection"))
- self.w_connectionType = w_connectiontype
- else:
- self.w_connectionType = get(space).w_Connection
-
- self.w_username = w_user
- self.w_password = w_password
- self.w_tnsentry = w_dsn
-
- self.minSessions = min
- self.maxSessions = max
- self.sessionIncrement = increment
- self.homogeneous = homogeneous
-
- # set up the environment
- self.environment = interp_environ.Environment.create(
- space, threaded, events)
-
- # create the session pool handle
- handleptr = lltype.malloc(rffi.CArrayPtr(roci.OCIServer).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIHandleAlloc(
- self.environment.handle,
- handleptr, roci.OCI_HTYPE_SPOOL, 0,
- lltype.nullptr(rffi.CArray(roci.dvoidp)))
- self.environment.checkForError(
- status, "SessionPool_New(): allocate handle")
- self.handle = handleptr[0]
- finally:
- lltype.free(handleptr, flavor='raw')
-
- # prepare pool mode
- poolMode = roci.OCI_SPC_STMTCACHE
- if self.homogeneous:
- poolMode |= roci.OCI_SPC_HOMOGENEOUS
-
- # create the session pool
- user_buf = config.StringBuffer()
- user_buf.fill(space, self.w_username)
- password_buf = config.StringBuffer()
- password_buf.fill(space, self.w_password)
- dsn_buf = config.StringBuffer()
- dsn_buf.fill(space, self.w_tnsentry)
- poolnameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
- flavor='raw')
- poolnamelenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO, 1,
- flavor='raw')
-
- try:
- status = roci.OCISessionPoolCreate(
- self.environment.handle,
- self.environment.errorHandle,
- self.handle,
- poolnameptr, poolnamelenptr,
- dsn_buf.ptr, dsn_buf.size,
- min, max, increment,
- user_buf.ptr, user_buf.size,
- password_buf.ptr, password_buf.size,
- poolMode)
- self.environment.checkForError(
- status, "SessionPool_New(): create pool")
-
- self.w_name = config.w_string(space, poolnameptr[0],
- poolnamelenptr[0])
- finally:
- user_buf.clear()
- password_buf.clear()
- dsn_buf.clear()
-
- return space.wrap(self)
- descr_new.unwrap_spec = [ObjSpace, W_Root,
- W_Root, W_Root, W_Root,
- int, int, int,
- W_Root,
- bool, int, bool, bool]
-
- def checkConnected(self, space):
- if not self.handle:
- raise OperationError(
- get(space).w_InterfaceError,
- space.wrap("not connected"))
-
- def acquire(self, space, __args__):
- (w_user, w_password, w_cclass, w_purity
- ) = __args__.parse_obj(
- None, "acquire",
- Signature(["user", "password", "cclass", "purity"]),
- defaults_w=[None, None, None, space.w_False])
- if self.homogeneous and (w_user or w_password):
- raise OperationError(
- get(space).w_ProgrammingError,
- space.wrap("pool is homogeneous. "
- "Proxy authentication is not possible."))
-
- self.checkConnected(space)
-
- newargs = Arguments(space,
- __args__.arguments_w,
- __args__.keywords + ["pool"],
- __args__.keywords_w + [space.wrap(self)])
- return space.call_args(self.w_connectionType, newargs)
- acquire.unwrap_spec = ['self', ObjSpace, Arguments]
-
- def release(self, space, w_connection):
- self._release(space, w_connection, roci.OCI_DEFAULT)
- release.unwrap_spec = ['self', ObjSpace, W_Root]
-
- def drop(self, space, w_connection):
- self._release(space, w_connection, roci.OCI_SESSRLS_DROPSESS)
- drop.unwrap_spec = ['self', ObjSpace, W_Root]
-
- def _release(self, space, w_connection, mode):
- from pypy.module.oracle.interp_connect import W_Connection
- connection = space.interp_w(W_Connection, w_connection)
-
- self.checkConnected(space)
-
- if connection.sessionPool is not self:
- raise OperationError(
- get(space).w_ProgrammingError,
- space.wrap("connection not acquired with this session pool"))
-
- # attempt a rollback
- status = roci.OCITransRollback(
- connection.handle, connection.environment.errorHandle,
- roci.OCI_DEFAULT)
- # if dropping the connection from the pool, ignore the error
- if mode != roci.OCI_SESSRLS_DROPSESS:
- self.environment.checkForError(
- status, "SessionPool_Release(): rollback")
-
- # release the connection
- status = roci.OCISessionRelease(
- connection.handle, connection.environment.errorHandle,
- None, 0, mode)
- self.environment.checkForError(
- status, "SessionPool_Release(): release session")
-
- # ensure that the connection behaves as closed
- connection.sessionPool = None
- connection.handle = lltype.nullptr(roci.OCISvcCtx.TO)
-
-def computedProperty(oci_attr_code, oci_value_type):
- def fget(space, self):
- self.checkConnected(space)
-
- valueptr = lltype.malloc(rffi.CArrayPtr(oci_value_type).TO,
- 1, flavor='raw')
- try:
- status = roci.OCIAttrGet(
- self.handle, roci.OCI_HTYPE_SPOOL,
- rffi.cast(roci.dvoidp, valueptr),
- lltype.nullptr(roci.Ptr(roci.ub4).TO),
- oci_attr_code,
- self.environment.errorHandle)
- return space.wrap(valueptr[0])
- finally:
- lltype.free(valueptr, flavor='raw')
- return GetSetProperty(fget, cls=W_SessionPool)
-
-W_SessionPool.typedef = TypeDef(
- "SessionPool",
- __new__ = interp2app(W_SessionPool.descr_new.im_func),
- acquire = interp2app(W_SessionPool.acquire),
- release = interp2app(W_SessionPool.release),
- drop = interp2app(W_SessionPool.drop),
-
- username = interp_attrproperty_w('w_username', W_SessionPool),
- password = interp_attrproperty_w('w_password', W_SessionPool),
- tnsentry = interp_attrproperty_w('w_tnsentry', W_SessionPool),
- min = interp_attrproperty('minSessions', W_SessionPool),
- max = interp_attrproperty('maxSessions', W_SessionPool),
- increment = interp_attrproperty('sessionIncrement', W_SessionPool),
- homogeneous = interp_attrproperty('homogeneous', W_SessionPool),
- opened = computedProperty(roci.OCI_ATTR_SPOOL_OPEN_COUNT, roci.ub4),
- busy = computedProperty(roci.OCI_ATTR_SPOOL_BUSY_COUNT, roci.ub4),
- timeout = computedProperty(roci.OCI_ATTR_SPOOL_TIMEOUT, roci.ub4),
- getmode = computedProperty(roci.OCI_ATTR_SPOOL_GETMODE, roci.ub1),
- )
+from pypy.interpreter.baseobjspace import Wrappable
+from pypy.interpreter.argument import Arguments, Signature
+from pypy.interpreter.gateway import ObjSpace, W_Root, NoneNotWrapped
+from pypy.interpreter.gateway import interp2app
+from pypy.interpreter.typedef import TypeDef, GetSetProperty
+from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
+from pypy.interpreter.error import OperationError
+from pypy.rpython.lltypesystem import rffi, lltype
+
+Null = NoneNotWrapped
+
+from pypy.module.oracle import roci, config
+from pypy.module.oracle import interp_error, interp_environ
+from pypy.module.oracle.interp_error import get
+
+class W_SessionPool(Wrappable):
+ def __init__(self):
+ self.environment = None
+
+ def descr_new(space, w_subtype,
+ w_user, w_password, w_dsn,
+ min, max, increment,
+ w_connectiontype=Null,
+ threaded=False,
+ getmode=roci.OCI_SPOOL_ATTRVAL_NOWAIT,
+ events=False,
+ homogeneous=True):
+ self = space.allocate_instance(W_SessionPool, w_subtype)
+ W_SessionPool.__init__(self)
+
+ if w_connectiontype is not None:
+ if not space.is_true(space.issubtype(w_connectiontype,
+ get(space).w_Connection)):
+ raise OperationError(
+ interp_error.get(space).w_ProgrammingError,
+ space.wrap(
+ "connectiontype must be a subclass of Connection"))
+ self.w_connectionType = w_connectiontype
+ else:
+ self.w_connectionType = get(space).w_Connection
+
+ self.w_username = w_user
+ self.w_password = w_password
+ self.w_tnsentry = w_dsn
+
+ self.minSessions = min
+ self.maxSessions = max
+ self.sessionIncrement = increment
+ self.homogeneous = homogeneous
+
+ # set up the environment
+ self.environment = interp_environ.Environment.create(
+ space, threaded, events)
+
+ # create the session pool handle
+ handleptr = lltype.malloc(rffi.CArrayPtr(roci.OCIServer).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIHandleAlloc(
+ self.environment.handle,
+ handleptr, roci.OCI_HTYPE_SPOOL, 0,
+ lltype.nullptr(rffi.CArray(roci.dvoidp)))
+ self.environment.checkForError(
+ status, "SessionPool_New(): allocate handle")
+ self.handle = handleptr[0]
+ finally:
+ lltype.free(handleptr, flavor='raw')
+
+ # prepare pool mode
+ poolMode = roci.OCI_SPC_STMTCACHE
+ if self.homogeneous:
+ poolMode |= roci.OCI_SPC_HOMOGENEOUS
+
+ # create the session pool
+ user_buf = config.StringBuffer()
+ user_buf.fill(space, self.w_username)
+ password_buf = config.StringBuffer()
+ password_buf.fill(space, self.w_password)
+ dsn_buf = config.StringBuffer()
+ dsn_buf.fill(space, self.w_tnsentry)
+ poolnameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
+ flavor='raw')
+ poolnamelenptr = lltype.malloc(rffi.CArrayPtr(roci.ub4).TO, 1,
+ flavor='raw')
+
+ try:
+ status = roci.OCISessionPoolCreate(
+ self.environment.handle,
+ self.environment.errorHandle,
+ self.handle,
+ poolnameptr, poolnamelenptr,
+ dsn_buf.ptr, dsn_buf.size,
+ min, max, increment,
+ user_buf.ptr, user_buf.size,
+ password_buf.ptr, password_buf.size,
+ poolMode)
+ self.environment.checkForError(
+ status, "SessionPool_New(): create pool")
+
+ self.w_name = config.w_string(space, poolnameptr[0],
+ poolnamelenptr[0])
+ finally:
+ user_buf.clear()
+ password_buf.clear()
+ dsn_buf.clear()
+
+ return space.wrap(self)
+ descr_new.unwrap_spec = [ObjSpace, W_Root,
+ W_Root, W_Root, W_Root,
+ int, int, int,
+ W_Root,
+ bool, int, bool, bool]
+
+ def checkConnected(self, space):
+ if not self.handle:
+ raise OperationError(
+ get(space).w_InterfaceError,
+ space.wrap("not connected"))
+
+ def acquire(self, space, __args__):
+ (w_user, w_password, w_cclass, w_purity
+ ) = __args__.parse_obj(
+ None, "acquire",
+ Signature(["user", "password", "cclass", "purity"]),
+ defaults_w=[None, None, None, space.w_False])
+ if self.homogeneous and (w_user or w_password):
+ raise OperationError(
+ get(space).w_ProgrammingError,
+ space.wrap("pool is homogeneous. "
+ "Proxy authentication is not possible."))
+
+ self.checkConnected(space)
+
+ newargs = Arguments(space,
+ __args__.arguments_w,
+ __args__.keywords + ["pool"],
+ __args__.keywords_w + [space.wrap(self)])
+ return space.call_args(self.w_connectionType, newargs)
+ acquire.unwrap_spec = ['self', ObjSpace, Arguments]
+
+ def release(self, space, w_connection):
+ self._release(space, w_connection, roci.OCI_DEFAULT)
+ release.unwrap_spec = ['self', ObjSpace, W_Root]
+
+ def drop(self, space, w_connection):
+ self._release(space, w_connection, roci.OCI_SESSRLS_DROPSESS)
+ drop.unwrap_spec = ['self', ObjSpace, W_Root]
+
+ def _release(self, space, w_connection, mode):
+ from pypy.module.oracle.interp_connect import W_Connection
+ connection = space.interp_w(W_Connection, w_connection)
+
+ self.checkConnected(space)
+
+ if connection.sessionPool is not self:
+ raise OperationError(
+ get(space).w_ProgrammingError,
+ space.wrap("connection not acquired with this session pool"))
+
+ # attempt a rollback
+ status = roci.OCITransRollback(
+ connection.handle, connection.environment.errorHandle,
+ roci.OCI_DEFAULT)
+ # if dropping the connection from the pool, ignore the error
+ if mode != roci.OCI_SESSRLS_DROPSESS:
+ self.environment.checkForError(
+ status, "SessionPool_Release(): rollback")
+
+ # release the connection
+ status = roci.OCISessionRelease(
+ connection.handle, connection.environment.errorHandle,
+ None, 0, mode)
+ self.environment.checkForError(
+ status, "SessionPool_Release(): release session")
+
+ # ensure that the connection behaves as closed
+ connection.sessionPool = None
+ connection.handle = lltype.nullptr(roci.OCISvcCtx.TO)
+
+def computedProperty(oci_attr_code, oci_value_type):
+ def fget(space, self):
+ self.checkConnected(space)
+
+ valueptr = lltype.malloc(rffi.CArrayPtr(oci_value_type).TO,
+ 1, flavor='raw')
+ try:
+ status = roci.OCIAttrGet(
+ self.handle, roci.OCI_HTYPE_SPOOL,
+ rffi.cast(roci.dvoidp, valueptr),
+ lltype.nullptr(roci.Ptr(roci.ub4).TO),
+ oci_attr_code,
+ self.environment.errorHandle)
+ return space.wrap(valueptr[0])
+ finally:
+ lltype.free(valueptr, flavor='raw')
+ return GetSetProperty(fget, cls=W_SessionPool)
+
+W_SessionPool.typedef = TypeDef(
+ "SessionPool",
+ __new__ = interp2app(W_SessionPool.descr_new.im_func),
+ acquire = interp2app(W_SessionPool.acquire),
+ release = interp2app(W_SessionPool.release),
+ drop = interp2app(W_SessionPool.drop),
+
+ username = interp_attrproperty_w('w_username', W_SessionPool),
+ password = interp_attrproperty_w('w_password', W_SessionPool),
+ tnsentry = interp_attrproperty_w('w_tnsentry', W_SessionPool),
+ min = interp_attrproperty('minSessions', W_SessionPool),
+ max = interp_attrproperty('maxSessions', W_SessionPool),
+ increment = interp_attrproperty('sessionIncrement', W_SessionPool),
+ homogeneous = interp_attrproperty('homogeneous', W_SessionPool),
+ opened = computedProperty(roci.OCI_ATTR_SPOOL_OPEN_COUNT, roci.ub4),
+ busy = computedProperty(roci.OCI_ATTR_SPOOL_BUSY_COUNT, roci.ub4),
+ timeout = computedProperty(roci.OCI_ATTR_SPOOL_TIMEOUT, roci.ub4),
+ getmode = computedProperty(roci.OCI_ATTR_SPOOL_GETMODE, roci.ub1),
+ )
Modified: pypy/trunk/pypy/module/oracle/test/test_cursorvar.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/test/test_cursorvar.py (original)
+++ pypy/trunk/pypy/module/oracle/test/test_cursorvar.py Tue Mar 9 15:46:14 2010
@@ -1,45 +1,45 @@
-from pypy.module.oracle.test.test_connect import OracleTestBase
-
-class AppTestCursorVar(OracleTestBase):
-
- def test_bind_inout(self):
- cur = self.cnx.cursor()
- cursor = self.cnx.cursor()
- assert cursor.description is None
- cur.execute("""
- begin
- open :cursor for select 1 numbercol from dual;
- end;""",
- cursor=cursor)
- assert (cursor.description ==
- [('NUMBERCOL', oracle.NUMBER, 127, 2, 0, 0, 1)]
- or cursor.description ==
- [('NUMBERCOL', oracle.NUMBER, 127, 2, 0, -127, 1)])
- data = cursor.fetchall()
- assert data == [(1,)]
-
- def test_bind_frompackage(self):
- cur = self.cnx.cursor()
- # create package
- try:
- cur.execute("drop package pypy_temp_cursorpkg")
- except oracle.DatabaseError:
- pass
- cur.execute("""
- create package pypy_temp_cursorpkg as
- type refcur is ref cursor;
- procedure test_cursor(cur out refcur);
- end;""")
- cur.execute("""
- create package body pypy_temp_cursorpkg as
- procedure test_cursor(cur out refcur) is
- begin
- open cur for
- select level-1 intcol
- from dual connect by level-1<42;
- end;
- end;""")
- cursor = self.cnx.cursor()
- cur.callproc("pypy_temp_cursorpkg.test_cursor", (cursor,))
- data = cursor.fetchall()
- assert data == [(x,) for x in range(42)]
+from pypy.module.oracle.test.test_connect import OracleTestBase
+
+class AppTestCursorVar(OracleTestBase):
+
+ def test_bind_inout(self):
+ cur = self.cnx.cursor()
+ cursor = self.cnx.cursor()
+ assert cursor.description is None
+ cur.execute("""
+ begin
+ open :cursor for select 1 numbercol from dual;
+ end;""",
+ cursor=cursor)
+ assert (cursor.description ==
+ [('NUMBERCOL', oracle.NUMBER, 127, 2, 0, 0, 1)]
+ or cursor.description ==
+ [('NUMBERCOL', oracle.NUMBER, 127, 2, 0, -127, 1)])
+ data = cursor.fetchall()
+ assert data == [(1,)]
+
+ def test_bind_frompackage(self):
+ cur = self.cnx.cursor()
+ # create package
+ try:
+ cur.execute("drop package pypy_temp_cursorpkg")
+ except oracle.DatabaseError:
+ pass
+ cur.execute("""
+ create package pypy_temp_cursorpkg as
+ type refcur is ref cursor;
+ procedure test_cursor(cur out refcur);
+ end;""")
+ cur.execute("""
+ create package body pypy_temp_cursorpkg as
+ procedure test_cursor(cur out refcur) is
+ begin
+ open cur for
+ select level-1 intcol
+ from dual connect by level-1<42;
+ end;
+ end;""")
+ cursor = self.cnx.cursor()
+ cur.callproc("pypy_temp_cursorpkg.test_cursor", (cursor,))
+ data = cursor.fetchall()
+ assert data == [(x,) for x in range(42)]
Modified: pypy/trunk/pypy/module/oracle/test/test_lobvar.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/test/test_lobvar.py (original)
+++ pypy/trunk/pypy/module/oracle/test/test_lobvar.py Tue Mar 9 15:46:14 2010
@@ -1,61 +1,61 @@
-from pypy.module.oracle.test.test_connect import OracleTestBase
-
-class LobTests(object):
- @classmethod
- def setup_class(cls):
- super(LobTests, cls).setup_class()
- cls.w_lobType = cls.space.wrap(cls.lobType)
-
- def test_bind(self):
- inputType = getattr(oracle, self.lobType)
-
- cur = self.cnx.cursor()
- try:
- cur.execute("drop table pypy_temp_lobtable")
- except oracle.DatabaseError:
- pass
- cur.execute("create table pypy_temp_lobtable "
- "(lobcol %s)" % self.lobType)
-
- longString = ""
- for i in range(2):
- cur.execute("truncate table pypy_temp_lobtable")
- if i > 0:
- longString += chr(65+i) * 25000
-
- cur.setinputsizes(lob=inputType)
- cur.execute("insert into pypy_temp_lobtable values (:lob)",
- lob=longString)
- cur.execute("select lobcol from pypy_temp_lobtable")
- lob, = cur.fetchone()
- assert lob.size() == len(longString)
- assert lob.read() == longString
-
- def test_trim(self):
- inputType = getattr(oracle, self.lobType)
-
- cur = self.cnx.cursor()
- try:
- cur.execute("drop table pypy_temp_lobtable")
- except oracle.DatabaseError:
- pass
- cur.execute("create table pypy_temp_lobtable "
- "(lobcol %s)" % self.lobType)
-
- longString = "X" * 75000
- cur.setinputsizes(lob=inputType)
- cur.execute("insert into pypy_temp_lobtable values (:lob)",
- lob=longString)
- cur.execute("select lobcol from pypy_temp_lobtable")
- lob, = cur.fetchone()
- assert lob.size() == 75000
- lob.trim(25000)
- assert lob.size() == 25000
- lob.trim()
- assert lob.size() == 0
-
-class AppTestBlob(LobTests, OracleTestBase):
- lobType = "BLOB"
-
-class AppTestClob(LobTests, OracleTestBase):
- lobType = "CLOB"
+from pypy.module.oracle.test.test_connect import OracleTestBase
+
+class LobTests(object):
+ @classmethod
+ def setup_class(cls):
+ super(LobTests, cls).setup_class()
+ cls.w_lobType = cls.space.wrap(cls.lobType)
+
+ def test_bind(self):
+ inputType = getattr(oracle, self.lobType)
+
+ cur = self.cnx.cursor()
+ try:
+ cur.execute("drop table pypy_temp_lobtable")
+ except oracle.DatabaseError:
+ pass
+ cur.execute("create table pypy_temp_lobtable "
+ "(lobcol %s)" % self.lobType)
+
+ longString = ""
+ for i in range(2):
+ cur.execute("truncate table pypy_temp_lobtable")
+ if i > 0:
+ longString += chr(65+i) * 25000
+
+ cur.setinputsizes(lob=inputType)
+ cur.execute("insert into pypy_temp_lobtable values (:lob)",
+ lob=longString)
+ cur.execute("select lobcol from pypy_temp_lobtable")
+ lob, = cur.fetchone()
+ assert lob.size() == len(longString)
+ assert lob.read() == longString
+
+ def test_trim(self):
+ inputType = getattr(oracle, self.lobType)
+
+ cur = self.cnx.cursor()
+ try:
+ cur.execute("drop table pypy_temp_lobtable")
+ except oracle.DatabaseError:
+ pass
+ cur.execute("create table pypy_temp_lobtable "
+ "(lobcol %s)" % self.lobType)
+
+ longString = "X" * 75000
+ cur.setinputsizes(lob=inputType)
+ cur.execute("insert into pypy_temp_lobtable values (:lob)",
+ lob=longString)
+ cur.execute("select lobcol from pypy_temp_lobtable")
+ lob, = cur.fetchone()
+ assert lob.size() == 75000
+ lob.trim(25000)
+ assert lob.size() == 25000
+ lob.trim()
+ assert lob.size() == 0
+
+class AppTestBlob(LobTests, OracleTestBase):
+ lobType = "BLOB"
+
+class AppTestClob(LobTests, OracleTestBase):
+ lobType = "CLOB"
Modified: pypy/trunk/pypy/module/oracle/test/test_objectvar.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/test/test_objectvar.py (original)
+++ pypy/trunk/pypy/module/oracle/test/test_objectvar.py Tue Mar 9 15:46:14 2010
@@ -1,50 +1,50 @@
-from pypy.module.oracle.test.test_connect import OracleTestBase
-
-class AppTestObjectVar(OracleTestBase):
- def test_fetch_object(self):
- import datetime
- cur = self.cnx.cursor()
- try:
- cur.execute("drop table pypy_test_objtable")
- except oracle.DatabaseError:
- pass
- try:
- cur.execute("drop type pypy_test_objtype")
- except oracle.DatabaseError:
- pass
- try:
- cur.execute("drop type pypy_test_arraytype")
- except oracle.DatabaseError:
- pass
- cur.execute("""\
- create type pypy_test_objtype as object (
- numbercol number,
- stringcol varchar2(60),
- datecol date);
- """)
- cur.execute("""\
- create type pypy_test_arraytype as varray(10) of number;
- """)
- cur.execute("""\
- create table pypy_test_objtable (
- objcol pypy_test_objtype,
- arraycol pypy_test_arraytype)
- """)
- cur.execute("""\
- insert into pypy_test_objtable values (
- pypy_test_objtype(1, 'someText',
- to_date(20070306, 'YYYYMMDD')),
- pypy_test_arraytype(5, 10, null, 20))
- """)
-
- cur.execute("select objcol, arraycol from pypy_test_objtable")
- objValue, arrayValue = cur.fetchone()
- assert objValue.type.schema == self.cnx.username.upper()
- assert objValue.type.name == "PYPY_TEST_OBJTYPE"
- assert objValue.type.attributes[0].name == "NUMBERCOL"
- assert isinstance(arrayValue, list)
- assert arrayValue == [5, 10, None, 20]
- assert objValue.NUMBERCOL == 1
- assert objValue.STRINGCOL == "someText"
- assert objValue.DATECOL == datetime.datetime(2007, 03, 06)
- raises(AttributeError, getattr, objValue, 'OTHER')
+from pypy.module.oracle.test.test_connect import OracleTestBase
+
+class AppTestObjectVar(OracleTestBase):
+ def test_fetch_object(self):
+ import datetime
+ cur = self.cnx.cursor()
+ try:
+ cur.execute("drop table pypy_test_objtable")
+ except oracle.DatabaseError:
+ pass
+ try:
+ cur.execute("drop type pypy_test_objtype")
+ except oracle.DatabaseError:
+ pass
+ try:
+ cur.execute("drop type pypy_test_arraytype")
+ except oracle.DatabaseError:
+ pass
+ cur.execute("""\
+ create type pypy_test_objtype as object (
+ numbercol number,
+ stringcol varchar2(60),
+ datecol date);
+ """)
+ cur.execute("""\
+ create type pypy_test_arraytype as varray(10) of number;
+ """)
+ cur.execute("""\
+ create table pypy_test_objtable (
+ objcol pypy_test_objtype,
+ arraycol pypy_test_arraytype)
+ """)
+ cur.execute("""\
+ insert into pypy_test_objtable values (
+ pypy_test_objtype(1, 'someText',
+ to_date(20070306, 'YYYYMMDD')),
+ pypy_test_arraytype(5, 10, null, 20))
+ """)
+
+ cur.execute("select objcol, arraycol from pypy_test_objtable")
+ objValue, arrayValue = cur.fetchone()
+ assert objValue.type.schema == self.cnx.username.upper()
+ assert objValue.type.name == "PYPY_TEST_OBJTYPE"
+ assert objValue.type.attributes[0].name == "NUMBERCOL"
+ assert isinstance(arrayValue, list)
+ assert arrayValue == [5, 10, None, 20]
+ assert objValue.NUMBERCOL == 1
+ assert objValue.STRINGCOL == "someText"
+ assert objValue.DATECOL == datetime.datetime(2007, 03, 06)
+ raises(AttributeError, getattr, objValue, 'OTHER')
From arigo at codespeak.net Tue Mar 9 16:33:52 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 16:33:52 +0100 (CET)
Subject: [pypy-svn] r71962 - pypy/trunk/pypy/lib
Message-ID: <20100309153352.3455A36C202@codespeak.net>
Author: arigo
Date: Tue Mar 9 16:33:50 2010
New Revision: 71962
Removed:
pypy/trunk/pypy/lib/sqlite3
Log:
Delete the symlink. This comes together with the next checkin.
From arigo at codespeak.net Tue Mar 9 16:34:19 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 16:34:19 +0100 (CET)
Subject: [pypy-svn] r71963 - pypy/trunk/pypy/lib
Message-ID: <20100309153419.98C03282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 16:34:18 2010
New Revision: 71963
Modified:
pypy/trunk/pypy/lib/ (props changed)
Log:
Remove the need for the symlink 'sqlite3', by renaming pysqlite2
to sqlite3. No-one should import pysqlite2 any more, as the name
sqlite3 is present from Python 2.5.
From arigo at codespeak.net Tue Mar 9 16:39:11 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 16:39:11 +0100 (CET)
Subject: [pypy-svn] r71964 - pypy/release/1.2.x/pypy/lib
Message-ID: <20100309153911.321EF282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 16:39:09 2010
New Revision: 71964
Removed:
pypy/release/1.2.x/pypy/lib/sqlite3
Modified:
pypy/release/1.2.x/pypy/lib/ (props changed)
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71961:71963
From fijal at codespeak.net Tue Mar 9 16:55:10 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 16:55:10 +0100 (CET)
Subject: [pypy-svn] r71965 - pypy/branch/micronumpy/pypy/module/micronumpy
Message-ID: <20100309155510.52E7D282BD5@codespeak.net>
Author: fijal
Date: Tue Mar 9 16:55:08 2010
New Revision: 71965
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
Log:
apparently GenericArray is not needed
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/dtype.py Tue Mar 9 16:55:08 2010
@@ -14,6 +14,7 @@
return unwrap_float(space, space.float(w_x))
from pypy.rlib.rarithmetic import r_singlefloat as float32
+
def unwrap_float32(space, w_x):
return float32(space.float_w(w_x))
def coerce_float32(space, w_x):
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/ndarray.py Tue Mar 9 16:55:08 2010
@@ -6,7 +6,6 @@
from pypy.rlib.debug import make_sure_not_resized
from pypy.module.micronumpy.sdarray import sdresult
-from pypy.module.micronumpy.sdarray import GenericArray
from pypy.module.micronumpy.mdarray import mdresult
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Tue Mar 9 16:55:08 2010
@@ -289,6 +289,5 @@
IntArray = create_sdarray(int, unwrap_int, coerce_int)
FloatArray = create_sdarray(float, unwrap_float, coerce_float)
-GenericArray = None
sdresult = create_factory({'i': IntArray, 'd': FloatArray})
From arigo at codespeak.net Tue Mar 9 16:58:26 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 16:58:26 +0100 (CET)
Subject: [pypy-svn] r71966 - in pypy/trunk/pypy/translator/platform: . test
Message-ID: <20100309155826.CA3E0282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 16:58:25 2010
New Revision: 71966
Modified:
pypy/trunk/pypy/translator/platform/posix.py
pypy/trunk/pypy/translator/platform/test/test_posix.py
Log:
Test and fix: mirror eci.link_files into the Makefile.
Modified: pypy/trunk/pypy/translator/platform/posix.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/posix.py (original)
+++ pypy/trunk/pypy/translator/platform/posix.py Tue Mar 9 16:58:25 2010
@@ -91,13 +91,14 @@
('LDFLAGS', self.link_flags + list(eci.link_extra)),
('CC', self.cc),
('CC_LINK', eci.use_cpp_linker and 'g++' or '$(CC)'),
+ ('LINKFILES', eci.link_files),
]
for args in definitions:
m.definition(*args)
rules = [
('all', '$(DEFAULT_TARGET)', []),
- ('$(TARGET)', '$(OBJECTS)', '$(CC_LINK) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBDIRS) $(LIBS)'),
+ ('$(TARGET)', '$(OBJECTS)', '$(CC_LINK) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBDIRS) $(LIBS) $(LINKFILES)'),
('%.o', '%.c', '$(CC) $(CFLAGS) -o $@ -c $< $(INCLUDEDIRS)'),
]
Modified: pypy/trunk/pypy/translator/platform/test/test_posix.py
==============================================================================
--- pypy/trunk/pypy/translator/platform/test/test_posix.py (original)
+++ pypy/trunk/pypy/translator/platform/test/test_posix.py Tue Mar 9 16:58:25 2010
@@ -41,7 +41,14 @@
if self.strict_on_stderr:
assert res.err == ''
assert res.returncode == 0
-
+
+ def test_link_files(self):
+ tmpdir = udir.join('link_files' + self.__class__.__name__).ensure(dir=1)
+ eci = ExternalCompilationInfo(link_files=['/foo/bar.a'])
+ mk = self.platform.gen_makefile(['blip.c'], eci, path=tmpdir)
+ mk.write()
+ assert 'LINKFILES = /foo/bar.a' in tmpdir.join('Makefile').read()
+
class TestMaemo(TestMakefile):
strict_on_stderr = False
From fijal at codespeak.net Tue Mar 9 17:03:52 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 17:03:52 +0100 (CET)
Subject: [pypy-svn] r71967 - pypy/branch/micronumpy/pypy/module/micronumpy
Message-ID: <20100309160352.F34CA282BD5@codespeak.net>
Author: fijal
Date: Tue Mar 9 17:03:51 2010
New Revision: 71967
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
Log:
simplify sdarray
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/sdarray.py Tue Mar 9 17:03:51 2010
@@ -183,8 +183,7 @@
def descr_setitem(self, w_index, w_value):
space = self.space
- if space.is_true(space.isinstance(w_index, space.w_slice)):
- assert isinstance(w_index, W_SliceObject)
+ if isinstance(w_index, W_SliceObject):
start, stop, step, slen = w_index.indices4(space, self.len())
try:
space.iter(w_value)
From fijal at codespeak.net Tue Mar 9 17:04:06 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 17:04:06 +0100 (CET)
Subject: [pypy-svn] r71968 -
pypy/branch/micronumpy/pypy/module/micronumpy/test
Message-ID: <20100309160406.1AA23282BD5@codespeak.net>
Author: fijal
Date: Tue Mar 9 17:04:04 2010
New Revision: 71968
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
Log:
unskip and fix test
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/test/test_numpy.py Tue Mar 9 17:04:04 2010
@@ -276,7 +276,6 @@
assert ar[i, j] == i*3+j
def test_get_set_slices(self):
- skip("We don't raise exceptions like CPython NumPy.")
from numpy import array
gen_array = self.gen_array
compare = self.compare
@@ -301,7 +300,7 @@
#setitem
ar[2] = 3
assert ar[2, 0] == ar[2, 1] == ar[2, 2] == 3
- ar[2:3] = [7]
+ ar[2:3, 0] = [7]
ar[2] = [0, 1, 2]
assert compare(ar[0], ar[2])
assert compare(ar[..., 0], [0, 3, 0])
From fijal at codespeak.net Tue Mar 9 17:05:26 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 17:05:26 +0100 (CET)
Subject: [pypy-svn] r71969 - pypy/branch/micronumpy/pypy/module/micronumpy
Message-ID: <20100309160526.5AF97282BD5@codespeak.net>
Author: fijal
Date: Tue Mar 9 17:05:25 2010
New Revision: 71969
Modified:
pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
Log:
Add an xxx for untested code
Modified: pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py
==============================================================================
--- pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py (original)
+++ pypy/branch/micronumpy/pypy/module/micronumpy/mdarray.py Tue Mar 9 17:05:25 2010
@@ -327,6 +327,7 @@
if len(regions) == 0: return
l = len(arr.storage)
if lslice > l: #long slice
+ xxx
iters = lslice // l
assert lslice == l * iters
for start in regions:
From fijal at codespeak.net Tue Mar 9 17:56:40 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 17:56:40 +0100 (CET)
Subject: [pypy-svn] r71972 - in pypy/trunk/pypy/module: imp pypyjit
pypyjit/test sys
Message-ID: <20100309165640.16135282BD5@codespeak.net>
Author: fijal
Date: Tue Mar 9 17:56:39 2010
New Revision: 71972
Modified:
pypy/trunk/pypy/module/imp/importing.py
pypy/trunk/pypy/module/pypyjit/policy.py
pypy/trunk/pypy/module/pypyjit/test/test_policy.py
pypy/trunk/pypy/module/sys/state.py
Log:
(fijal, benjamin)
Merge import-fiddle branch.
This branch exposes to the JIT the part of importing that checks if
module is already in sys.modules and if so, can constant-fold away
this checks.
Modified: pypy/trunk/pypy/module/imp/importing.py
==============================================================================
--- pypy/trunk/pypy/module/imp/importing.py (original)
+++ pypy/trunk/pypy/module/imp/importing.py Tue Mar 9 17:56:39 2010
@@ -9,7 +9,7 @@
from pypy.interpreter.error import OperationError, operationerrfmt
from pypy.interpreter.baseobjspace import W_Root, ObjSpace
from pypy.interpreter.eval import Code
-from pypy.rlib import streamio
+from pypy.rlib import streamio, jit
from pypy.rlib.streamio import StreamErrors
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.objectmodel import we_are_translated
@@ -80,6 +80,9 @@
def check_sys_modules(space, w_modulename):
return space.finditem(space.sys.get('modules'), w_modulename)
+def check_sys_modules_w(space, modulename):
+ return space.finditem_str(space.sys.get('modules'), modulename)
+
def importhook(space, modulename, w_globals=None,
w_locals=None, w_fromlist=None, level=-1):
space.timer.start_name("importhook", modulename)
@@ -89,8 +92,15 @@
space.wrap("Empty module name"))
w = space.wrap
- ctxt_name = None
- if w_globals is not None and not space.is_w(w_globals, space.w_None):
+ if w_fromlist is not None and space.is_true(w_fromlist):
+ fromlist_w = space.fixedview(w_fromlist)
+ else:
+ fromlist_w = None
+
+ rel_modulename = None
+ if (level != 0 and
+ w_globals is not None and
+ not space.is_w(w_globals, space.w_None)):
ctxt_w_name = space.finditem(w_globals, w('__name__'))
ctxt_w_path = space.finditem(w_globals, w('__path__'))
if ctxt_w_name is not None:
@@ -99,62 +109,97 @@
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
- else:
- ctxt_w_path = None
-
- rel_modulename = None
- if ctxt_name is not None:
- if level == 0:
- baselevel = 0
- rel_modulename = modulename
- else:
- ctxt_name_prefix_parts = ctxt_name.split('.')
- if level > 0:
- n = len(ctxt_name_prefix_parts)-level+1
- assert n>=0
- ctxt_name_prefix_parts = ctxt_name_prefix_parts[:n]
- if ctxt_w_path is None: # plain module
- ctxt_name_prefix_parts.pop()
- if ctxt_name_prefix_parts:
- rel_modulename = '.'.join(ctxt_name_prefix_parts)
- if modulename:
- rel_modulename += '.' + modulename
- baselevel = len(ctxt_name_prefix_parts)
-
- if rel_modulename is not None:
- w_mod = check_sys_modules(space, w(rel_modulename))
- if (w_mod is None or
- not space.is_w(w_mod, space.w_None)):
-
- w_mod = absolute_import(space, rel_modulename,
- baselevel,
- w_fromlist, tentative=1)
- if w_mod is not None:
- space.timer.stop_name("importhook", modulename)
- return w_mod
else:
- rel_modulename = None
+ ctxt_name_prefix_parts = ctxt_name.split('.')
+ if level > 0:
+ n = len(ctxt_name_prefix_parts)-level+1
+ assert n>=0
+ ctxt_name_prefix_parts = ctxt_name_prefix_parts[:n]
+ if ctxt_w_path is None: # plain module
+ ctxt_name_prefix_parts.pop()
+ if ctxt_name_prefix_parts:
+ rel_modulename = '.'.join(ctxt_name_prefix_parts)
+ if modulename:
+ rel_modulename += '.' + modulename
+ baselevel = len(ctxt_name_prefix_parts)
+ if rel_modulename is not None:
+ w_mod = check_sys_modules(space, w(rel_modulename))
+ if (w_mod is None or
+ not space.is_w(w_mod, space.w_None)):
+ w_mod = absolute_import(space, rel_modulename,
+ baselevel,
+ fromlist_w, tentative=1)
+ if w_mod is not None:
+ space.timer.stop_name("importhook", modulename)
+ return w_mod
+ else:
+ rel_modulename = None
if level > 0:
msg = "Attempted relative import in non-package"
raise OperationError(space.w_ValueError, w(msg))
- w_mod = absolute_import(space, modulename, 0, w_fromlist, tentative=0)
+ w_mod = absolute_import_try(space, modulename, 0, fromlist_w)
+ if w_mod is None and not space.is_w(w_mod, space.w_None):
+ w_mod = absolute_import(space, modulename, 0, fromlist_w, tentative=0)
if rel_modulename is not None:
- space.setitem(space.sys.get('modules'), w(rel_modulename),space.w_None)
+ space.setitem(space.sys.get('modules'), w(rel_modulename), space.w_None)
space.timer.stop_name("importhook", modulename)
return w_mod
#
importhook.unwrap_spec = [ObjSpace, str, W_Root, W_Root, W_Root, int]
-def absolute_import(space, modulename, baselevel, w_fromlist, tentative):
+ at jit.dont_look_inside
+def absolute_import(space, modulename, baselevel, fromlist_w, tentative):
lock = getimportlock(space)
lock.acquire_lock()
try:
return _absolute_import(space, modulename, baselevel,
- w_fromlist, tentative)
+ fromlist_w, tentative)
finally:
lock.release_lock()
-def _absolute_import(space, modulename, baselevel, w_fromlist, tentative):
+ at jit.unroll_safe
+def absolute_import_try(space, modulename, baselevel, fromlist_w):
+ """ Only look up sys.modules, not actually try to load anything
+ """
+ w_path = None
+ last_dot = 0
+ if '.' not in modulename:
+ w_mod = check_sys_modules_w(space, modulename)
+ first = w_mod
+ if fromlist_w is not None and w_mod is not None:
+ w_path = try_getattr(space, w_mod, space.wrap('__path__'))
+ else:
+ level = 0
+ first = None
+ while last_dot != -1:
+ assert last_dot >= 0 # bah
+ last_dot = modulename.find('.', last_dot + 1)
+ if last_dot == -1:
+ w_mod = check_sys_modules_w(space, modulename)
+ else:
+ assert last_dot >= 0
+ w_mod = check_sys_modules_w(space, modulename[:last_dot])
+ if w_mod is None or space.is_w(w_mod, space.w_None):
+ return None
+ if level == baselevel:
+ first = w_mod
+ if fromlist_w is not None:
+ w_path = try_getattr(space, w_mod, space.wrap('__path__'))
+ level += 1
+ if fromlist_w is not None:
+ if w_path is not None:
+ if len(fromlist_w) == 1 and space.eq_w(fromlist_w[0],
+ space.wrap('*')):
+ w_all = try_getattr(space, w_mod, space.wrap('__all__'))
+ if w_all is not None:
+ fromlist_w = space.fixedview(w_all)
+ for w_name in fromlist_w:
+ if try_getattr(space, w_mod, w_name) is None:
+ return None
+ return w_mod
+ return first
+
+def _absolute_import(space, modulename, baselevel, fromlist_w, tentative):
w = space.wrap
w_mod = None
@@ -178,13 +223,12 @@
w_path = try_getattr(space, w_mod, w('__path__'))
level += 1
- if w_fromlist is not None and space.is_true(w_fromlist):
+ if fromlist_w is not None:
if w_path is not None:
- fromlist_w = space.unpackiterable(w_fromlist)
if len(fromlist_w) == 1 and space.eq_w(fromlist_w[0],w('*')):
w_all = try_getattr(space, w_mod, w('__all__'))
if w_all is not None:
- fromlist_w = space.unpackiterable(w_all)
+ fromlist_w = space.fixedview(w_all)
for w_name in fromlist_w:
if try_getattr(space, w_mod, w_name) is None:
load_part(space, w_path, prefix, space.str_w(w_name), w_mod,
@@ -301,6 +345,7 @@
if pkgdir is not None:
space.setattr(w_mod, w('__path__'), space.newlist([w(pkgdir)]))
+ at jit.dont_look_inside
def load_module(space, w_modulename, find_info, reuse=False):
if find_info is None:
return
@@ -384,6 +429,7 @@
msg = "No module named %s"
raise operationerrfmt(space.w_ImportError, msg, modulename)
+ at jit.dont_look_inside
def reload(space, w_module):
"""Reload the module.
The module must have been successfully imported before."""
@@ -581,6 +627,7 @@
code_w.exec_code(space, w_dict, w_dict)
+ at jit.dont_look_inside
def load_source_module(space, w_modulename, w_mod, pathname, source,
write_pyc=True):
"""
@@ -679,6 +726,7 @@
"Non-code object in %s", cpathname)
return pycode
+ at jit.dont_look_inside
def load_compiled_module(space, w_modulename, w_mod, cpathname, magic,
timestamp, source):
"""
Modified: pypy/trunk/pypy/module/pypyjit/policy.py
==============================================================================
--- pypy/trunk/pypy/module/pypyjit/policy.py (original)
+++ pypy/trunk/pypy/module/pypyjit/policy.py Tue Mar 9 17:56:39 2010
@@ -8,10 +8,12 @@
modname == '__builtin__.interp_classobj' or
modname == '__builtin__.functional'):
return True
-
+ if modname == 'sys.state':
+ return True
if '.' in modname:
modname, _ = modname.split('.', 1)
- if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions']:
+ if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions',
+ 'imp']:
return True
return False
Modified: pypy/trunk/pypy/module/pypyjit/test/test_policy.py
==============================================================================
--- pypy/trunk/pypy/module/pypyjit/test/test_policy.py (original)
+++ pypy/trunk/pypy/module/pypyjit/test/test_policy.py Tue Mar 9 17:56:39 2010
@@ -32,7 +32,7 @@
assert pypypolicy.look_inside_pypy_module('__builtin__.abstractinst')
assert pypypolicy.look_inside_pypy_module('__builtin__.functional')
assert pypypolicy.look_inside_pypy_module('exceptions.interp_exceptions')
- for modname in 'pypyjit', 'signal', 'micronumpy', 'math':
+ for modname in 'pypyjit', 'signal', 'micronumpy', 'math', 'imp':
assert pypypolicy.look_inside_pypy_module(modname)
assert pypypolicy.look_inside_pypy_module(modname + '.foo')
@@ -42,3 +42,4 @@
def test_module_with_stuff_in_init():
from pypy.module.sys import Module
assert not pypypolicy.look_inside_function(Module.getdictvalue.im_func)
+
Modified: pypy/trunk/pypy/module/sys/state.py
==============================================================================
--- pypy/trunk/pypy/module/sys/state.py (original)
+++ pypy/trunk/pypy/module/sys/state.py Tue Mar 9 17:56:39 2010
@@ -14,7 +14,7 @@
def __init__(self, space):
self.space = space
- self.w_modules = space.newdict()
+ self.w_modules = space.newdict(module=True)
self.w_warnoptions = space.newlist([])
self.w_argv = space.newlist([])
From fijal at codespeak.net Tue Mar 9 17:57:04 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 17:57:04 +0100 (CET)
Subject: [pypy-svn] r71973 - pypy/branch/import-fiddle
Message-ID: <20100309165704.E4C27282BD5@codespeak.net>
Author: fijal
Date: Tue Mar 9 17:57:03 2010
New Revision: 71973
Removed:
pypy/branch/import-fiddle/
Log:
remove merged branch
From arigo at codespeak.net Tue Mar 9 17:58:45 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 17:58:45 +0100 (CET)
Subject: [pypy-svn] r71974 - in pypy/trunk/pypy/lib/ctypes_config_cache: .
test
Message-ID: <20100309165845.C5A41282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 17:58:44 2010
New Revision: 71974
Modified:
pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py
pypy/trunk/pypy/lib/ctypes_config_cache/test/test_cache.py
Log:
Test and fix: CHAR_MAX is actually coming from limits.h.
Modified: pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py (original)
+++ pypy/trunk/pypy/lib/ctypes_config_cache/locale.ctc.py Tue Mar 9 17:58:44 2010
@@ -22,7 +22,8 @@
]
class LocaleConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
+ _compilation_info_ = ExternalCompilationInfo(includes=['limits.h',
+ 'locale.h'])
for key in _CONSTANTS:
setattr(LocaleConfigure, key, DefinedConstantInteger(key))
@@ -34,7 +35,7 @@
# ____________________________________________________________
-eci = ExternalCompilationInfo(includes=['langinfo.h'])
+eci = ExternalCompilationInfo(includes=['locale.h', 'langinfo.h'])
HAS_LANGINFO = check_eci(eci)
if HAS_LANGINFO:
Modified: pypy/trunk/pypy/lib/ctypes_config_cache/test/test_cache.py
==============================================================================
--- pypy/trunk/pypy/lib/ctypes_config_cache/test/test_cache.py (original)
+++ pypy/trunk/pypy/lib/ctypes_config_cache/test/test_cache.py Tue Mar 9 17:58:44 2010
@@ -38,3 +38,8 @@
def test_pyexpat():
d = run('pyexpat.ctc.py', '_pyexpat_cache.py')
assert 'XML_COMBINED_VERSION' in d
+
+def test_locale():
+ d = run('locale.ctc.py', '_locale_cache.py')
+ assert 'LC_ALL' in d
+ assert 'CHAR_MAX' in d
From arigo at codespeak.net Tue Mar 9 18:03:27 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 18:03:27 +0100 (CET)
Subject: [pypy-svn] r71975 - in pypy/release/1.2.x/pypy/translator/platform:
. test
Message-ID: <20100309170327.11C90282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 18:03:26 2010
New Revision: 71975
Modified:
pypy/release/1.2.x/pypy/translator/platform/posix.py
pypy/release/1.2.x/pypy/translator/platform/test/test_posix.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71965:71966
Modified: pypy/release/1.2.x/pypy/translator/platform/posix.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/platform/posix.py (original)
+++ pypy/release/1.2.x/pypy/translator/platform/posix.py Tue Mar 9 18:03:26 2010
@@ -91,13 +91,14 @@
('LDFLAGS', self.link_flags + list(eci.link_extra)),
('CC', self.cc),
('CC_LINK', eci.use_cpp_linker and 'g++' or '$(CC)'),
+ ('LINKFILES', eci.link_files),
]
for args in definitions:
m.definition(*args)
rules = [
('all', '$(DEFAULT_TARGET)', []),
- ('$(TARGET)', '$(OBJECTS)', '$(CC_LINK) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBDIRS) $(LIBS)'),
+ ('$(TARGET)', '$(OBJECTS)', '$(CC_LINK) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBDIRS) $(LIBS) $(LINKFILES)'),
('%.o', '%.c', '$(CC) $(CFLAGS) -o $@ -c $< $(INCLUDEDIRS)'),
]
Modified: pypy/release/1.2.x/pypy/translator/platform/test/test_posix.py
==============================================================================
--- pypy/release/1.2.x/pypy/translator/platform/test/test_posix.py (original)
+++ pypy/release/1.2.x/pypy/translator/platform/test/test_posix.py Tue Mar 9 18:03:26 2010
@@ -41,7 +41,14 @@
if self.strict_on_stderr:
assert res.err == ''
assert res.returncode == 0
-
+
+ def test_link_files(self):
+ tmpdir = udir.join('link_files' + self.__class__.__name__).ensure(dir=1)
+ eci = ExternalCompilationInfo(link_files=['/foo/bar.a'])
+ mk = self.platform.gen_makefile(['blip.c'], eci, path=tmpdir)
+ mk.write()
+ assert 'LINKFILES = /foo/bar.a' in tmpdir.join('Makefile').read()
+
class TestMaemo(TestMakefile):
strict_on_stderr = False
From arigo at codespeak.net Tue Mar 9 18:04:00 2010
From: arigo at codespeak.net (arigo at codespeak.net)
Date: Tue, 9 Mar 2010 18:04:00 +0100 (CET)
Subject: [pypy-svn] r71976 - in
pypy/release/1.2.x/pypy/lib/ctypes_config_cache: . test
Message-ID: <20100309170400.68176282BD5@codespeak.net>
Author: arigo
Date: Tue Mar 9 18:03:59 2010
New Revision: 71976
Modified:
pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py
pypy/release/1.2.x/pypy/lib/ctypes_config_cache/test/test_cache.py
Log:
svn merge svn+ssh://codespeak.net/svn/pypy/trunk -r71973:71974
Modified: pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py (original)
+++ pypy/release/1.2.x/pypy/lib/ctypes_config_cache/locale.ctc.py Tue Mar 9 18:03:59 2010
@@ -22,7 +22,8 @@
]
class LocaleConfigure:
- _compilation_info_ = ExternalCompilationInfo(includes=['locale.h'])
+ _compilation_info_ = ExternalCompilationInfo(includes=['limits.h',
+ 'locale.h'])
for key in _CONSTANTS:
setattr(LocaleConfigure, key, DefinedConstantInteger(key))
@@ -34,7 +35,7 @@
# ____________________________________________________________
-eci = ExternalCompilationInfo(includes=['langinfo.h'])
+eci = ExternalCompilationInfo(includes=['locale.h', 'langinfo.h'])
HAS_LANGINFO = check_eci(eci)
if HAS_LANGINFO:
Modified: pypy/release/1.2.x/pypy/lib/ctypes_config_cache/test/test_cache.py
==============================================================================
--- pypy/release/1.2.x/pypy/lib/ctypes_config_cache/test/test_cache.py (original)
+++ pypy/release/1.2.x/pypy/lib/ctypes_config_cache/test/test_cache.py Tue Mar 9 18:03:59 2010
@@ -38,3 +38,8 @@
def test_pyexpat():
d = run('pyexpat.ctc.py', '_pyexpat_cache.py')
assert 'XML_COMBINED_VERSION' in d
+
+def test_locale():
+ d = run('locale.ctc.py', '_locale_cache.py')
+ assert 'LC_ALL' in d
+ assert 'CHAR_MAX' in d
From getxsick at codespeak.net Tue Mar 9 18:13:38 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 9 Mar 2010 18:13:38 +0100 (CET)
Subject: [pypy-svn] r71977 - pypy/build/ubuntu/debian
Message-ID: <20100309171338.4959C282BD5@codespeak.net>
Author: getxsick
Date: Tue Mar 9 18:13:36 2010
New Revision: 71977
Modified:
pypy/build/ubuntu/debian/rules
Log:
Update build rules. No need to install ctypes_configure anymore (see r71873).
Modified: pypy/build/ubuntu/debian/rules
==============================================================================
--- pypy/build/ubuntu/debian/rules (original)
+++ pypy/build/ubuntu/debian/rules Tue Mar 9 18:13:36 2010
@@ -56,8 +56,6 @@
rm -f debian/pypy-lib/usr/share/pypy-$(VERSION)/pypy/lib/py
rm -f debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/app_test/ctypes_tests/_ctypes_test.o
rm -rf debian/pypy-dev/usr/share/pypy-1.2/pypy/translator/c/winproj/
- rm -f debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/ctypes_configure
- cp -r ctypes_configure debian/pypy-lib/usr/share/pypy-1.2/pypy/lib/
install-arch:
dh_testdir
From getxsick at codespeak.net Tue Mar 9 18:17:13 2010
From: getxsick at codespeak.net (getxsick at codespeak.net)
Date: Tue, 9 Mar 2010 18:17:13 +0100 (CET)
Subject: [pypy-svn] r71978 - pypy/build/ubuntu/debian/manpages
Message-ID: <20100309171713.BEB73282BD5@codespeak.net>
Author: getxsick
Date: Tue Mar 9 18:17:12 2010
New Revision: 71978
Modified:
pypy/build/ubuntu/debian/manpages/dotviewer.1
pypy/build/ubuntu/debian/manpages/pypy.1
pypy/build/ubuntu/debian/manpages/rpycompile.1
pypy/build/ubuntu/debian/manpages/sshgraphserver.1
Log:
update manpages
Modified: pypy/build/ubuntu/debian/manpages/dotviewer.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/dotviewer.1 (original)
+++ pypy/build/ubuntu/debian/manpages/dotviewer.1 Tue Mar 9 18:17:12 2010
@@ -12,7 +12,7 @@
manner. It's widely used by various PyPy's debugging tools, like
JIT assembler viewer, flowgraph viewer etc.
.SH SEE ALSO
-.BR graphserver(1), sshgraphserver(1), pypy (1),
+.BR sshgraphserver(1), pypy (1),
.SH AUTHORS
\fBPyPy\fP was written by the members of the PyPy project .
.PP
Modified: pypy/build/ubuntu/debian/manpages/pypy.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/pypy.1 (original)
+++ pypy/build/ubuntu/debian/manpages/pypy.1 Tue Mar 9 18:17:12 2010
@@ -39,7 +39,7 @@
Print translation information about this PyPy executable.
.TP
.B \-\-jit debug=N
-Set the verbosity of the jit (default: 0)
+Set the verbosity of the jit (default: off)
.TP
.B \-\-jit inlining=N
low-level JIT parameter (default: False)
@@ -56,7 +56,7 @@
.B \-\-jit trace_limit=N
low-level JIT parameter (default: 10000)
.SH SEE ALSO
-.BR rpycompile (1), dotviewer (1), graphserver(1), sshgraphserver(1),
+.BR rpycompile (1), dotviewer (1), sshgraphserver(1),
.SH AUTHORS
\fBPyPy\fP was written by the members of the PyPy project .
.PP
Modified: pypy/build/ubuntu/debian/manpages/rpycompile.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/rpycompile.1 (original)
+++ pypy/build/ubuntu/debian/manpages/rpycompile.1 Tue Mar 9 18:17:12 2010
@@ -10,7 +10,7 @@
.TP
To see the full list, please see the documentation or \fB--help\fP option.
.SH SEE ALSO
-.BR pypy (1),
+.BR pypy (1), dotviewer(1), sshgraphserver(1),
.SH AUTHORS
\fBPyPy\fP was written by the members of the PyPy project .
.PP
Modified: pypy/build/ubuntu/debian/manpages/sshgraphserver.1
==============================================================================
--- pypy/build/ubuntu/debian/manpages/sshgraphserver.1 (original)
+++ pypy/build/ubuntu/debian/manpages/sshgraphserver.1 Tue Mar 9 18:17:12 2010
@@ -14,7 +14,7 @@
programs using the dotviewer library as long as they run on 'hostname' under
the same username as the one sshgraphserver logs as.
.SH SEE ALSO
-.BR graphserver (1), dotviewer (1), pypy (1),
+.BR dotviewer (1), pypy (1),
.SH AUTHORS
\fBPyPy\fP was written by the members of the PyPy project .
.PP
From fijal at codespeak.net Tue Mar 9 18:25:54 2010
From: fijal at codespeak.net (fijal at codespeak.net)
Date: Tue, 9 Mar 2010 18:25:54 +0100 (CET)
Subject: [pypy-svn] r71979 - in pypy/extradoc/pypy.org: . css image js
Message-ID: <20100309172554.2DA89282BD7@codespeak.net>
Author: fijal
Date: Tue Mar 9 18:25:52 2010
New Revision: 71979
Added:
pypy/extradoc/pypy.org/archive.html
pypy/extradoc/pypy.org/compat.html
pypy/extradoc/pypy.org/css/
pypy/extradoc/pypy.org/css/site.css
pypy/extradoc/pypy.org/download.html
pypy/extradoc/pypy.org/image/
pypy/extradoc/pypy.org/image/header-background.png (contents, props changed)
pypy/extradoc/pypy.org/image/pypy-logo.png (contents, props changed)
pypy/extradoc/pypy.org/js/
pypy/extradoc/pypy.org/js/detect.js
pypy/extradoc/pypy.org/more.html
pypy/extradoc/pypy.org/sandbox.html
Modified:
pypy/extradoc/pypy.org/ (props changed)
pypy/extradoc/pypy.org/index.html
Log:
Try to import new stuff for pypy.org, let's see...
Added: pypy/extradoc/pypy.org/archive.html
==============================================================================
--- (empty file)
+++ pypy/extradoc/pypy.org/archive.html Tue Mar 9 18:25:52 2010
@@ -0,0 +1,59 @@
+
+
+
+ PyPy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Blog Posts Archive
+
+
+
Other Articles
+
+
+
+
+
+
\ No newline at end of file
Added: pypy/extradoc/pypy.org/compat.html
==============================================================================
--- (empty file)
+++ pypy/extradoc/pypy.org/compat.html Tue Mar 9 18:25:52 2010
@@ -0,0 +1,128 @@
+
+
+
+ PyPy :: Python compatibility
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Python compatibility
+
PyPy implements Python language version 2.5. It supports all of the core
+language, passing Python test suite (with minor modifications that were
+already accepted in main python in newer versions). It supports most
+of commonly used Python standard library modules , list below.
+
PyPy does not support CPython C API , which means that third party
+libraries for python, written in C, will not work.
+
Standard library modules supported by PyPy, in alphabetical order:
+
+__builtin__ __pypy__ _codecs _lsprof _minimal_curses _random _rawffi _socket _sre _weakref bz2 cStringIO crypt errno exceptions fcntl gc itertools marshal math md5 mmap operator parser posix pyexpat select sha signal struct symbol sys termios thread time token unicodedata zipimport zlib
+
+
Supported, but written in pure-python:
+
+array binascii cPickle cmath collections ctypes datetime functools grp md5 pwd pyexpat sha sqlite3 syslog
+
+
All modules that are pure python in CPython of course work.
+
Python libraries known to work under PyPy (the list is not exhaustive):
+
+ctypes
+django (without any DB but sqlite)
+twisted (without ssl support)
+pylons
+divmod's nevow
+pyglet
+
+
Known differencies that are not going to be fixed:
+
+PyPy does not support refcounting semantics. The code below
+won't fill the file immediately, but only after a certain period
+of time, when the GC will collect:
+
+open("filename", "w").write("stuff")
+
+The proper fix is:
+
+f = open("filename", "w")
+f.write("stuff")
+f.close()
+
+
+We don't support certain attributes that were decided to be
+implementation-dependent. For example gc.get_referrers . gc.enable
+and gc.disable are supported, but they don't enable and disable GC,
+but instead enable and disable running of finalizers.
+
+You can't attach a __del__ method to a class after its creation.
+
+You can't store non-string keys in type objects. Example:
+
+class A(object):
+ locals()[42] = 3
+
+won't work.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Added: pypy/extradoc/pypy.org/css/site.css
==============================================================================
--- (empty file)
+++ pypy/extradoc/pypy.org/css/site.css Tue Mar 9 18:25:52 2010
@@ -0,0 +1,1352 @@
+/* No Copyright (-) 2010 The Ampify Authors. This file is under the */
+/* Public Domain license that can be found in the root LICENSE file. */
+
+/* Element styles */
+
+* {
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ height: 100%;
+}
+
+body {
+ background-color: #efefef;
+ background-repeat: repeat;
+ font: 90%/1em 'Lucida Grande', 'Lucida Sans Unicode', Optima, Verdana, sans-serif;
+ height: 100%;
+ width: 100%;
+}
+
+a, a:visited, a:hover, a:active, a:hover {
+ color: blue;
+ text-decoration: underline;
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+a.promote-fb, a.promote-fb:active, a.promote-fb:hover, a.promote-fb:visited {
+ background: url(http://static.ampify.it/gfx.share-facebook-sprite.png) no-repeat;
+ color: transparent;
+ display: block;
+ float: left;
+ height: 22px;
+ margin: 0 16px 0 0px;
+ outline; none;
+ overflow: hidden;
+ position: relative;
+ text-indent: 9999px !important;
+ top: -2px;
+ vertical-align: middle;
+ width: 146px;
+}
+
+a.promote-fb:hover {
+ background-position: 0 -22px;
+}
+
+a.promote-fb:active {
+ background-position: 0 -44px;
+}
+
+blockquote, p, dl, h1, h2, h3, h4, h5, h6, ol, ul {
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+}
+
+code, .literal {
+ background-color: #f0f0f0;
+ border: 1px solid #dadada;
+ padding: 1px 3px;
+ font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
+}
+
+dl, ol, ul {
+ padding-left: 20px;
+}
+
+h1 {
+ font-size: 2.25em;
+}
+
+h1, h2 {
+ color: #c32528;
+ font-family: "museo-1", "museo-2", Verdana;
+ letter-spacing: 1px;
+ text-shadow: #eee 2px 2px 3px;
+}
+
+img {
+ border: 0;
+}
+
+label, input, select, textarea {
+ cursor: pointer;
+}
+
+pre {
+ background-color: #fff;
+ border: 1px solid #cacaca;
+ color: #101010;
+ font: 12px/1.4em Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
+ overflow: auto;
+ padding: 7px 0 8px 7px;
+ margin: 10px 30px 0 30px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ -webkit-box-shadow: 0px 0px 7px #cacaca;
+}
+
+pre.ascii-art {
+ line-height: 1em;
+ overflow: visible;
+}
+
+pre code {
+ background-color: transparent;
+ border: 0;
+ padding: 0;
+}
+
+select {
+ max-width: 200px;
+}
+
+
+strong {
+ font-family: Museo, Verdana;
+ font-size: 1.1em;
+}
+
+table, table.docutils {
+ border: 0;
+ border-collapse: collapse;
+ margin: 0 auto;
+ text-align: left;
+}
+
+table.docutils {
+ margin: 5px 40px 10px 30px;
+}
+
+/*
+table a {
+ text-decoration: none;
+}
+*/
+
+th {
+ border-bottom: 2px solid #808096;
+ padding: 8px;
+}
+
+table.docutils td {
+ border-bottom: 1px solid #ccc;
+ padding: 9px 8px 8px 8px;
+}
+
+ul {
+ list-style-type: circle;
+}
+
+/* ID styles */
+
+#body {
+ background-color: #fff;
+ border-radius: 15px;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ padding: 5px;
+}
+
+#body-inner {
+ margin: 0 auto;
+ padding: 10px 20px;
+ width: 950px;
+}
+
+#body-outer {
+ height: 100%;
+}
+
+body > #body-outer {
+ height: auto;
+ min-height: 100%;
+}
+
+#content {
+ line-height: 1.55em;
+}
+
+#footer-espians {
+ margin: 0 auto;
+ text-align: center;
+}
+
+#footer {
+ background-color: #161616;
+ background-image: url(http://static.ampify.it/gfx.footer-background.png);
+ background-position: top left;
+ background-repeat: repeat-x;
+ clear: both;
+ color: #fff;
+ height: 50px;
+ margin-top: -200px;
+ position: relative;
+ text-align: center;
+ width: 100%;
+}
+
+#footer-content {
+ margin: 0 auto;
+ padding-top: 15px;
+ text-align: center;
+}
+
+#header {
+ width: 100%;
+ border-bottom: 1px dashed #9e9e9e;
+ margin-bottom: 10px;
+}
+
+#logo {
+ float: left;
+}
+
+#main {
+ float: left;
+ padding: 10px 30px 0 10px;
+ width: 630px;
+ line-height: 2em;
+ font-size: 0.9em;
+}
+
+#main blockquote {
+ padding-left: 20px;
+}
+
+#main h1 {
+ font-size: 1.5em;
+ padding-top: 20px;
+ padding-bottom: 0;
+}
+
+#main h1.title {
+ font-size: 1.8em;
+ padding-top: 0;
+ padding-bottom: 10px;
+}
+
+#main p {
+ padding-top: 10px;
+}
+
+#main pre {
+ font-size: 14px;
+ font-family: "inconsolata-1", "inconsolata-2", Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
+}
+
+#main ul, #main ol {
+ padding-left: 35px;
+}
+
+#main li {
+ padding-top: 5px;
+}
+
+#sidebar {
+ float: left;
+ width: 270px;
+ font-size: 0.9em;
+ line-height: 1.6em;
+}
+
+#sidebar a, #sidebar a:hover, #sidebar a:active, #sidebar a:visited {
+ text-decoration: none;
+}
+
+#sidebar a:hover {
+ text-decoration: underline;
+}
+
+#sidebar h3 {
+ text-align: right;
+ border-bottom: 1px solid #cacaca;
+ margin-bottom: 10px;
+}
+
+#sidebar ul {
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+}
+
+#sidebar li {
+ padding-bottom: 12px;
+}
+
+#sidebar li div, .sidebar-text {
+ color: #6e6e6e;
+ font-size: 0.9em;
+}
+
+#table-of-contents {
+ float: right;
+ margin: 10px 0 10px 20px;
+ border: 1px solid #cacaca;
+}
+
+#table-of-contents .topic-title {
+ display: none;
+}
+
+#table-of-contents ul {
+ padding: 0 20px 5px 20px;
+}
+
+#main-support-page {
+ width: 540px;
+ margin: 0 auto;
+}
+
+#main-support-page pre {
+ width: 350px;
+}
+
+#menu ul {
+ list-style-type: none;
+ padding: 0;
+}
+
+#menu ul li {
+ background-color: #fff;
+ float: left;
+ margin-left: 12px;
+ text-align: center;
+}
+
+#menu a {
+ border-top: 2px solid #ccc;
+ color: #000;
+ display: block;
+ font-size: 18px;
+ padding-top: 6px;
+ padding-bottom: 8px;
+ text-decoration: none;
+}
+
+#menu a.selected, #menu a.selected:hover {
+ background-color: #f6f6f6;
+ border-top: 2px solid #a9151b;
+}
+
+#menu a:hover {
+ border-top: 2px solid #969696;
+}
+
+#menu-follow {
+ float: right;
+}
+
+#menu-follow div {
+ padding: 0 5px 5px 0;
+}
+
+#menu-lang {
+ margin: 0 105px 0 20px;
+ float: left;
+ text-align: right;
+ width: 140px;
+}
+
+#menu-lang select {
+ max-width: 120px;
+}
+
+#menu-lang-form {
+ display: none;
+ margin-top: 5px;
+}
+
+#menu-sub {
+ font-size: 1em;
+ padding-bottom: 10px;
+ text-align: center;
+}
+
+.menu-sub-sep {
+ color: #9f9f9f;
+ padding: 2px;
+}
+
+#spread-button {
+ background-color: #ffffff;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ padding: 5px;
+}
+
+/* Support site IDs */
+
+#help-spread-the-word {
+ float: left;
+}
+
+/* Class styles */
+
+.absmiddle {
+ vertical-align: middle;
+}
+
+.boxed {
+ border: 1px solid #cacaca;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ -webkit-box-shadow: 0px 0px 7px #cacaca;
+}
+
+.center {
+ text-align: center;
+}
+
+/* clear utility classes */
+
+.clear {
+ background-color: transparent;
+ border: 0px solid;
+ clear: both;
+ height: 0;
+ margin: 0;
+ padding: 0;
+ width: 0;
+}
+
+.clear-left {
+ background-color: transparent;
+ border: 0px solid;
+ clear: left;
+ height: 0;
+ margin: 0;
+ padding: 0;
+ width: 0;
+}
+
+.clear-right {
+ background-color: transparent;
+ border: 0px solid;
+ clear: right;
+ height: 0;
+ margin: 0;
+ padding: 0;
+ width: 0;
+}
+
+/* clearfix */
+
+.clearfix:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.clearfix {
+ display: inline-block;
+}
+
+/* Hides from IE-mac \*/
+* html .clearfix {
+ height: 1%;
+}
+.clearfix {
+ display: block;
+}
+/* End hide from IE-mac */
+
+/* float utility classes */
+
+.float-left {
+ float: left;
+ padding-bottom: 7px;
+ padding-right: 7px;
+}
+
+.float-right {
+ float: right;
+ padding-bottom: 7px;
+ padding-left: 7px;
+}
+
+/* footer classes */
+
+.footer-follow {
+ margin: 0 45px 15px 0;
+ float: left;
+}
+
+.footer-follow a {
+ color: #fff;
+ text-decoration: underline;
+ font-size: 10px;
+}
+
+.footer-follow a:hover {
+ text-decoration: none;
+}
+
+.footer-follow div {
+ white-space: nowrap;
+}
+
+.footer-menu {
+ float: right;
+ margin: 17px 50px 0 0;
+ font-size: 10px;
+}
+
+.footer-menu a {
+ color: #fff;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.footer-text {
+ text-align: left;
+}
+
+/* quoted blocks with attribution */
+
+.quote {
+ background: transparent url(http://static.ampify.it/gfx.blockquote.gif) no-repeat 0 0;
+ padding: 6px 12px 0 40px;
+ color: #575757;
+ font-size: 22px;
+ line-height: 28px;
+}
+
+.quote-attribution {
+ color: #575757;
+ font-size: 14px;
+ text-align: right;
+ padding: 10px 12px 10px 0;
+}
+
+.quote-attribution a, .quote-attribution a:active, .quote-attribution a:visited {
+ color: #575757;
+ text-decoration: underline;
+}
+
+.quote-attribution a:hover {
+ text-decoration: none;
+}
+
+/* Source code syntax highlighting */
+
+.syntax .c { color: #919191 } /* Comment */
+.syntax .cm { color: #919191 } /* Comment.Multiline */
+.syntax .cp { color: #919191 } /* Comment.Preproc */
+.syntax .cs { color: #919191 } /* Comment.Special */
+.syntax .c1 { color: #919191 } /* Comment.Single */
+
+.syntax .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+
+.syntax .g { color: #101010 } /* Generic */
+.syntax .gd { color: #d22323 } /* Generic.Deleted */
+.syntax .ge { color: #101010; font-style: italic } /* Generic.Emph */
+.syntax .gh { color: #101010 } /* Generic.Heading */
+.syntax .gi { color: #589819 } /* Generic.Inserted */
+.syntax .go { color: #6a6a6a } /* Generic.Output */
+.syntax .gp { color: #6a6a6a } /* Generic.Prompt */
+.syntax .gr { color: #d22323 } /* Generic.Error */
+.syntax .gs { color: #101010 } /* Generic.Strong */
+.syntax .gt { color: #d22323 } /* Generic.Traceback */
+.syntax .gu { color: #101010 } /* Generic.Subheading */
+
+.syntax .k { color: #c32528 } /* Keyword */ /* espian red */
+.syntax .k { color: #ff5600 } /* Keyword */ /* orangy */
+.syntax .kc { color: #ff5600 } /* Keyword.Constant */
+.syntax .kd { color: #ff5600 } /* Keyword.Declaration */
+.syntax .kd { color: #ff5600 } /* Keyword.Declaration */
+.syntax .kn { color: #ff5600 } /* Keyword */
+.syntax .kp { color: #ff5600 } /* Keyword.Pseudo */
+.syntax .kr { color: #ff5600 } /* Keyword.Reserved */
+.syntax .kt { color: #ff5600 } /* Keyword.Type */
+
+.syntax .l { color: #101010 } /* Literal */
+.syntax .ld { color: #101010 } /* Literal.Date */
+
+.syntax .m { color: #3677a9 } /* Literal.Number */ /* darkish pastely blue */
+.syntax .m { color: #00a33f } /* Literal.Number */ /* brightish green */
+.syntax .m { color: #1550a2 } /* Literal.Number */ /* darker blue */
+.syntax .m { color: #5d90cd } /* Literal.Number */ /* pastely blue */
+.syntax .mf { color: #5d90cd } /* Literal.Number.Float */
+.syntax .mh { color: #5d90cd } /* Literal.Number.Hex */
+.syntax .mi { color: #5d90cd } /* Literal.Number.Integer */
+.syntax .il { color: #5d90cd } /* Literal.Number.Integer.Long */
+.syntax .mo { color: #5d90cd } /* Literal.Number.Oct */
+
+.syntax .bp { color: #a535ae } /* Name.Builtin.Pseudo */
+.syntax .n { color: #101010 } /* Name */
+.syntax .na { color: #bbbbbb } /* Name.Attribute */
+.syntax .nb { color: #bf78cc } /* Name.Builtin */ /* pastely purple */
+.syntax .nb { color: #af956f } /* Name.Builtin */ /* pastely light brown */
+.syntax .nb { color: #a535ae } /* Name.Builtin */ /* brightish pastely purple */
+.syntax .nc { color: #101010 } /* Name.Class */
+.syntax .nd { color: #6d8091 } /* Name.Decorator */
+.syntax .ne { color: #af956f } /* Name.Exception */
+.syntax .nf { color: #3677a9 } /* Name.Function */
+.syntax .nf { color: #1550a2 } /* Name.Function */
+.syntax .ni { color: #101010 } /* Name.Entity */
+.syntax .nl { color: #101010 } /* Name.Label */
+.syntax .nn { color: #101010 } /* Name.Namespace */
+.syntax .nn { color: #101010 } /* Name.Namespace */
+.syntax .no { color: #101010 } /* Name.Constant */
+.syntax .nx { color: #101010 } /* Name.Other */
+.syntax .nt { color: #6d8091 } /* Name.Tag */
+.syntax .nv { color: #101010 } /* Name.Variable */
+.syntax .vc { color: #101010 } /* Name.Variable.Class */
+.syntax .vg { color: #101010 } /* Name.Variable.Global */
+.syntax .vi { color: #101010 } /* Name.Variable.Instance */
+.syntax .py { color: #101010 } /* Name.Property */
+
+.syntax .o { color: #ff5600 } /* Operator */ /* orangy */
+.syntax .o { color: #101010 } /* Operator */
+.syntax .ow { color: #101010 } /* Operator.Word */
+
+.syntax .p { color: #101010 } /* Punctuation */
+
+.syntax .s { color: #dd1144 } /* Literal.String */ /* darkish red */
+.syntax .s { color: #c32528 } /* Literal.String */ /* espian red */
+.syntax .s { color: #39946a } /* Literal.String */ /* pastely greeny */
+.syntax .s { color: #5d90cd } /* Literal.String */ /* pastely blue */
+.syntax .s { color: #00a33f } /* Literal.String */ /* brightish green */
+.syntax .sb { color: #00a33f } /* Literal.String.Backtick */
+.syntax .sc { color: #00a33f } /* Literal.String.Char */
+.syntax .sd { color: #00a33f } /* Literal.String.Doc */
+.syntax .se { color: #00a33f } /* Literal.String.Escape */
+.syntax .sh { color: #00a33f } /* Literal.String.Heredoc */
+.syntax .si { color: #00a33f } /* Literal.String.Interpol */
+.syntax .sr { color: #00a33f } /* Literal.String.Regex */
+.syntax .ss { color: #00a33f } /* Literal.String.Symbol */
+.syntax .sx { color: #00a33f } /* Literal.String.Other */
+.syntax .s1 { color: #00a33f } /* Literal.String.Single */
+.syntax .s2 { color: #00a33f } /* Literal.String.Double */
+
+.syntax .w { color: #101010 } /* Text.Whitespace */
+.syntax .x { color: #101010 } /* Other */
+
+.syntax.bash .nb { color: #101010 }
+.syntax.bash .nv { color: #c32528 }
+
+.syntax.css .k { color: #606060 }
+.syntax.css .nc { color: #c32528 }
+.syntax.css .nf { color: #c32528 }
+.syntax.css .nt { color: #c32528 }
+
+.syntax.rst .k { color: #5d90cd }
+.syntax.rst .ow { color: #5d90cd }
+.syntax.rst .p { color: #5d90cd }
+
+.syntax.yaml .l-Scalar-Plain { color: #5d90cd }
+.syntax.yaml .p-Indicator { color: #101010 }
+
+/* classes for support pages */
+
+.community-section {
+ margin: 10px auto 10px auto;
+ width: 500px;
+}
+
+.community-section-heading {
+ font-size: 1.6em;
+ margin-top: 10px;
+}
+
+.community-section-heading span {
+ background-color: #efd7d7;
+ line-height: 1.7em;
+}
+
+.community-section-text {
+ line-height: 1.6em;
+ padding: 10px 0 0 50px;
+}
+
+.support-page-banner {
+ font-size: 1.2em;
+ line-height: 1.6em;
+ margin: 20px 0;
+}
+
+.support-page-banner-text {
+ background-color: #f0f0f0;
+}
+
+/* classes for the main support page */
+
+.promote {
+ margin: 5px 0 0px 26px;
+}
+
+.promote-retweet {
+ margin-top: 2px;
+ float: left;
+}
+
+.promote-yahoo-buzz {
+ margin: -2px 15px 0 0;
+ float: left;
+ padding-bottom: 5px;
+}
+
+.promote-google-buzz, .promote-google-buzz:active, .promote-google-buzz:visited, .promote-google-buzz:hover {
+ background: url(http://static.ampify.it/icon.google-buzz.png) no-repeat 0 3px;
+ color: #666;
+ float: left;
+ font-size: 0.9em;
+ font-weight: bold;
+ margin-top: -2px;
+ padding: 0 10px 5px 20px;
+ text-decoration: none;
+}
+
+.promote-google-buzz:hover {
+ text-decoration: underline;
+}
+
+.share-text {
+ font-size: 18px;
+ line-height: 24px;
+ margin: 0px 0 12px 26px;
+ color: #aaa;
+}
+
+/* thanks to mashable.com for these wonderful share icons + css!! thanks guys -- you rock!! */
+
+ul.share-buttons {
+ line-height: normal;
+ margin: 12px 0 0 24px;
+ padding: 0;
+}
+
+.share-buttons li {
+ display: inline;
+ float: left;
+ list-style-type: none;
+ margin: 0 18px 12px 0;
+ padding-top: 1px;
+}
+
+.share-buttons a {
+ background: url(http://static.ampify.it/gfx.mashable-syndication.gif) no-repeat;
+ color: #575757;
+ display: block;
+ font-size: 7px;
+ height: 14px;
+ overflow: hidden;
+ padding: 33px 0 0;
+ text-align: center;
+ text-decoration: none;
+ white-space: nowrap;
+ width: 46px;
+}
+
+.share-buttons a:hover {
+ text-decoration:none;
+}
+
+.share-buttons .delicious a {
+ background-position: -138px 0;
+}
+
+.share-buttons .delicious a:hover {
+ background-position: -138px -47px;
+}
+
+.share-buttons .digg a {
+ background-position: 0 0;
+}
+
+.share-buttons .digg a:hover {
+ background-position: 0 -47px;
+}
+
+.share-buttons .facebook a {
+ background-position: -184px 0;
+}
+
+.share-buttons .facebook a:hover {
+ background-position: -184px -47px;
+}
+
+.share-buttons .google a {
+ background-position: -276px 0;
+}
+
+.share-buttons .google a:hover {
+ background-position: -276px -47px;
+}
+
+.share-buttons .myspace a {
+ background-position: -230px 0;
+}
+
+.share-buttons .myspace a:hover {
+ background-position: -230px -47px;
+}
+
+.share-buttons .reddit a {
+ background-position: -414px 0;
+}
+
+.share-buttons .reddit a:hover {
+ background-position: -414px -47px;
+}
+
+.share-buttons .sharethis a {
+ background-position: -460px 0;
+}
+
+.share-buttons .sharethis a:hover {
+ background-position: -460px -47px;
+}
+
+.share-buttons .stumbleupon a {
+ background-position: -92px 0;
+}
+
+.share-buttons .stumbleupon a:hover {
+ background-position: -92px -47px;
+}
+
+.share-buttons .technorati a {
+ background-position: -322px 0;
+}
+
+.share-buttons .technorati a:hover {
+ background-position: -322px -47px;
+}
+
+.share-buttons .twitter a {
+ background-position: -46px 0;
+}
+
+.share-buttons .twitter a:hover {
+ background-position: -46px -47px;
+}
+
+.share-buttons .yahoo a {
+ background-position: -368px 0;
+}
+
+.share-buttons .yahoo a:hover {
+ background-position: -368px -47px;
+}
+
+/* Unsorted */
+
+.columns {
+ max-width: 940px;
+ width: 940px;
+}
+
+.column, .column-last {
+ float: left;
+ /*
+ height: 180px;
+ */
+ padding: 0 10px 0 0;
+ position: relative;
+ width: 227px;
+}
+
+.column-last {
+ padding: 0 0 0 0;
+}
+
+.column-text {
+ font-size: 12px;
+ line-height: 18px;
+ margin: 10px 0 20px 15px;
+}
+
+.column-footer {
+ background-image: url(bottom.gif);
+ background-repeat: no-repeat;
+ background-color: transparent;
+/*
+ background-attachment: scroll;
+ */
+}
+
+.column-left {
+ border-right: 0px solid #f00;
+ float: left;
+ width: 455px;
+}
+
+.column-left-text {
+ font-size: 12px;
+ line-height: 18px;
+ margin-left: 12px;
+}
+
+.column-right {
+ float: right;
+ width: 485px;
+}
+
+.follow {
+ display: block;
+ list-style-type: none;
+ margin: 12px 0px 0px 24px;
+ padding: 0px;
+ text-align: center;
+}
+
+.follow li {
+ float: left;
+ display: block;
+ margin-right: 30px;
+ margin-bottom: 18px;
+}
+
+.follow a {
+ color: #575757;
+ display: block;
+ font-size: 10px;
+ margin-top: 7px;
+ text-decoration: underline;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+.follow a:hover {
+ text-decoration: none;
+}
+
+.get-left {
+ float: left;
+ width: 230px;
+ margin-right: 12px;
+ font-weight: bold;
+}
+
+.get-right {
+ float: right;
+ width: 230px;
+ margin-right: 12px;
+ font-weight: bold;
+}
+
+.get-item {
+ border: 1px solid #ccc;
+ border-radius: 15px;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ margin-top: 10px;
+ font-weight: normal;
+ margin: 12px 0 12px 0;
+ padding: 10px;
+}
+
+.get-item img {
+ float: left;
+ margin-right: 5px;
+ padding-top: 3px;
+ vertical-align: middle;
+}
+
+.headline {
+ margin-bottom: 10px;
+ text-align: center;
+ line-height: 36px;
+}
+
+.headline-text {
+ background-color: #f0f0f0;
+ font-size: 20px;
+}
+
+.headline-text-small {
+ background-color: #f0f0f0;
+ font-size: 20px;
+}
+
+.lede {
+ background-color: #dfdfdf;
+}
+
+.link {
+ font-size: 16px;
+}
+
+.oneoff {
+ margin: 12px 12px 12px 0;
+ font-size: 14px;
+ line-height: 20px;
+ border-top: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+ padding: 12px 0 12px 0;
+}
+
+.optional {
+ color: #666;
+ font-size: 9px;
+ vertical-align: super;
+}
+
+/* other */
+
+#callout {
+ background-color: #fff;
+ margin-bottom: 10px;
+/*
+ border-bottom-left-radius: 15px;
+ border-bottom-right-radius: 15px;
+ -moz-border-radius-bottomleft: 15px;
+ -moz-border-radius-bottomright: 15px;
+ -webkit-border-bottom-left-radius: 15px;
+ -webkit-border-bottom-right-radius: 15px;
+*/
+ padding: 10px;
+}
+
+#feature {
+ float: right;
+}
+
+#supporter-form {
+ font-size: 14px;
+ line-height: 26px;
+ margin: 8px 0 0 0;
+ padding-top: 5px;
+}
+
+#supporter-form td {
+ padding-top: 10px;
+ vertical-align: top;
+}
+
+#supporter-form .label {
+ text-align: right;
+ width: 205px;
+ padding-right: 10px;
+ padding-left: 10px;
+ font-size: 12px;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+.input-item input, .input-item textarea {
+ /* thanks soundcloud! */
+ background-image: url(http://static.ampify.it/gfx.button-repeat.png);
+ background-position: 0 -1200px;
+ background-repeat: repeat-x;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ color: #333;
+ font-size: 20px;
+ max-width: 220px;
+ padding: 3px 0 3px 3px;
+ width: 220px;
+}
+
+.input-item select {
+ font-size: 16px;
+}
+
+.male {
+ border: 2px solid #70b1e6;
+ background-color: #eaf3fb;
+}
+
+.male .label {
+ color: #70b1e6;
+}
+
+.female {
+ border: 2px solid #ed6aa4;
+ background-color: #fee5f5;
+}
+
+.female .label {
+ color: #ed6aa4;
+}
+
+#supporter-submit {
+ text-align: center;
+ padding: 0 0 15px 0;
+}
+
+#support {
+ font-size: 20px;
+ margin-bottom: 15px;
+ margin-top: 5px;
+}
+
+.male-counter {
+ color: #70b1e6;
+ font-size: 12px;
+ margin-bottom: -50px;
+ white-space: nowrap;
+}
+
+.female-counter {
+ color: #ed6aa4;
+ font-size: 12px;
+ padding-left: 24px;
+ margin-bottom: -50px;
+ white-space: nowrap;
+}
+
+
+.tav-thanks {
+ font-size: 14px;
+ line-height: 26px;
+ margin: 12px 12px 12px 0;
+ color: #575757;
+ color: #000;
+ font-style: italic;
+}
+
+.tav-thanks img {
+ float: right;
+ margin-left: 12px;
+}
+
+.tav-thanks div {
+ text-align: right;
+ font-size: 12px;
+ line-height: 20px;
+ margin-top: 12px;
+}
+/*
+.tav-thanks a {
+ color: #000;
+ text-decoration: underline;
+}
+
+.tav-thanks a:hover {
+ text-decoration: none;
+}
+*/
+
+.the-disqus-section {
+ margin: 12px 12px 12px 0;
+ min-height: 500px;
+}
+
+.the-disqus-section h3 {
+ margin-top: 10px;
+ margin-bottom: 12px;
+ font-size: 20px;
+}
+
+.action-items {
+ font-size: 14px;
+ line-height: 26px;
+ margin: 10px 24px; 20px 24px;
+}
+
+.action-left {
+ float: left;
+ margin-right: 20px;
+}
+
+.action-link {
+ margin-top: 20px;
+}
+
+.action-text {
+ margin-top: 20px;
+}
+
+/* plan file related css */
+
+a.button {
+ background: transparent url('http://static.ampify.it/gfx.bg-button-a.gif') no-repeat scroll top right;
+ color: #444;
+ display: block;
+ float: left;
+ font: normal 12px arial, sans-serif;
+ height: 24px;
+ margin-right: 6px;
+ padding-right: 18px; /* sliding doors padding */
+ text-decoration: none;
+}
+
+a.button span {
+ background: transparent url('http://static.ampify.it/gfx.bg-button-span.gif') no-repeat;
+ display: block;
+ line-height: 14px;
+ padding: 5px 0 5px 18px;
+}
+
+a.button:active {
+ background-position: bottom right;
+ color: #000;
+ outline: none; /* hide dotted outline in Firefox */
+}
+
+a.button:active span {
+ background-position: bottom left;
+ padding: 6px 0 4px 18px; /* push text down 1px */
+}
+
+a.buttondown {
+ background: transparent url('http://static.ampify.it/gfx.bg-button-a.gif') no-repeat scroll top right;
+ color: #444;
+ display: block;
+ float: left;
+ font: normal 12px arial, sans-serif;
+ height: 24px;
+ margin-right: 6px;
+ padding-right: 18px; /* sliding doors padding */
+ text-decoration: none;
+ background-position: bottom right;
+ color: #000;
+ outline: none; /* hide dotted outline in Firefox */
+}
+
+a.buttondown span {
+ background: transparent url('http://static.ampify.it/gfx.bg-button-span.gif') no-repeat;
+ display: block;
+ line-height: 14px;
+ padding: 5px 0 5px 18px;
+ background-position: bottom left;
+ padding: 6px 0 4px 18px; /* push text down 1px */
+}
+
+.tag-segment {
+ text-align: right;
+}
+
+.tag-segment span {
+ color: #fff;
+ padding: 0.5em;
+ font-size: 0.7em;
+}
+
+.tag-link {
+ text-decoration: none;
+ color: #000;
+}
+
+.tag {
+ background-color: #696969;
+}
+
+.tag-val-done {
+ background-color: #007f16;
+ background-color: #00782d;
+ background-color: #006400;
+}
+
+.tag-val-needsreview {
+ background-color: #a4ff00;
+ color: #000 !important;
+}
+
+.tag-val-inreview {
+ background-color: #3056bf;
+}
+
+.tag-val-todo {
+ background-color: #a60c00;
+ background-color: #d0006e;
+ background-color: #8B0000;
+}
+
+.tag-val-wip {
+ background-color: #a66e00;
+ background-color: #ff550f;
+}
+
+.tag-type-1 {
+}
+
+.tag-type-2 { /* #hashtags */
+ background-color: #2a4580;
+ background-color: #696969;
+}
+
+.tag-type-dep {
+ display: none;
+}
+
+.tag-type-milestone {
+ background-color: #00008B;
+ background-color: #06276f;
+ background-color: #a4ff00; /* nice colour! */
+ /* color: #000 !important; */
+ background-color: #002ca6;
+ background-color: #3056bf;
+ background-color: #898989;
+}
+
+.tag-type-priority {
+ background-color: #481254;
+}
+
+.tag-type-zuser {
+ background-color: #4573d5;
+ background-color: #696969;
+}
+
+#plan-tags a, #site-tags a {
+ margin-bottom: 0.7em;
+}
+
+#plan-container {
+ margin-top: 1.2em;
+ margin-bottom: 2.4em;
+}
+
+.plan-help {
+ font-size: 0.9em;
+ font-weight: bold;
+ text-align: right;
+ margin-bottom: 1.4em;
+}
+
+.container {
+ padding-left: 20px;
+}
+
+.container blockquote {
+ padding: 0 0 0 30px;
+}
+
+.container > p:first-child {
+ font-weight: bold;
+ font-family: "museo-1", "museo-2", Verdana;
+ padding-bottom: 0;
+}
+
+.sidepic {
+ padding-top: 50px;
+ text-align: center;
+}
+
+a#main_download {
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ border-radius: 5px;
+ margin-left: 10%;
+ margin-right: 10%;
+ padding: 5px;
+ display: block;
+ color: white;
+ background-color: #0b0;
+}
\ No newline at end of file
Added: pypy/extradoc/pypy.org/download.html
==============================================================================
--- (empty file)
+++ pypy/extradoc/pypy.org/download.html Tue Mar 9 18:25:52 2010
@@ -0,0 +1,221 @@
+
+
+
+ PyPy :: Download and install
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Download and install
+
Here are the various binaries of PyPy 1.2 that we provide for x86 Linux,
+Mac OS/X or Windows.
+
+
The release 1.2 of PyPy supports Python version 2.5 .
+If you are interested in helping
+with 2.6, 2.7 or 3.x features, contact us !
+
+
“JIT Compiler” version
+
These binaries include a Just-in-Time compiler. They only work on
+32-bit x86 (IA-32) CPUs that have the SSE2 instruction set (most of
+them do, nowadays), as well as on any x86-64 machine in the 32-bit
+compatibility mode.
+
+Linux binary
+Mac OS/X binary
+Windows binary (this version is alpha software!)
+
+
If your CPU is really old, it may not have SSE2. In this case, you need
+to translate yourself with the option --jit-backend=x86-without-sse2 .
+
If your CPU is a 64-bit machine and you want to translate a 32-bit
+version of PyPy yourself, here are hints .
+
If you want to help us with implementing the 64-bit JIT backend,
+contact us !
+
+
+
“No JIT” version
+
WARNING! Unless you really want to try this out, we recommend the JIT
+version.
+
This version still has a few advantages over the JIT Compiler version.
+Notably, for Python programs that require large amounts of memory (at
+least a few hundred MBs), the following version of pypy-c runs them
+by requiring generally 1.5x or 2x less memory than CPython. These
+binaries work on 32-bit x86 (IA-32) CPUs as well as x86-64 CPUs
+in the 32-bit compatibility mode.
+
+Linux binary
+Mac OS/X binary
+Windows binary
+
+
If your CPU is a 64-bit machine and you want to translate a 32-bit
+version of PyPy yourself, here are hints .
+
If you want to help us with finishing the implementation of the native
+64-bit version (there are a few known issues, like missing code in
+ctypes to implement calls to C functions), contact us or
+donate money !
+
+
+
“Sandbox” version
+
A special safe version. Read the docs about sandboxing . These
+binaries work on 32-bit x86 (IA-32) CPUs as well as x86-64 CPUs
+in the 32-bit compatibility mode.
+
+Linux binary
+Mac OS/X binary
+Windows binary
+
+
It is also possible to translate a version that includes both
+sandboxing and the JIT compiler, although as the JIT is relatively
+complicated, this reduce a bit the level of confidence we can put in it.
+
If your CPU is a 64-bit machine and you want to translate a 32-bit
+version of PyPy yourself, here are hints .
+
The native 64-bit version needs testing and careful reviewing;
+contact us !
+
+
+
“Stackless” version
+
Provides Stackless extensions, as well as greenlets . These
+binaries work on 32-bit x86 (IA-32) CPUs as well as x86-64 CPUs
+in the 32-bit compatibility mode.
+
+Linux binary
+Mac OS/X binary
+Windows binary
+
+
It is not possible right now to combine Stackless features with the JIT.
+
If your CPU is a 64-bit machine and you want to translate a 32-bit
+version of PyPy yourself, here are hints .
+
For the native 64-bit version, see the issues of the no jit version. .
+
+
+
Building from source
+
+Get the source code. The following packages contain the source at
+the same revision as the above binaries:
+
+Or you can checkout the current trunk using Subversion (the trunk
+usually works and is of course more up-to-date):
+
+svn co http://codespeak.net/svn/pypy/trunk pypy-dist
+
+
+Enter the goal directory:
+
+cd pypy-dist/pypy/translator/goal
+
+
+Run the translate.py script. Here are the common combinations
+of options:
+
+python translate.py -Ojit # get the JIT version
+python translate.py -O2 # get the no-jit version
+python translate.py --sandbox # get the sandbox version
+python translate.py --stackless # get the stackless version
+python translate.py -Ojit --backend=cli # only for branch/cli-jit
+
+
+Enjoy Mandelbrot :-) It takes on the order of one hour to
+finish the translation, and 1.3 GB of RAM on a 32-bit system.
+(Do not start a translation on a machine with 1GB or less!)
+
+
+
+
Note on building a 32-bit version on 64-bit systems
+
To build 32-bit versions of pypy-c you need to run translate.py
+in a 32-bit version of Python. You can check with:
+
+$ python
+Python 2.6.2 (...)
+>>> import sys
+>>> sys.maxint
+
+
This prints 9223372036854775807 in 64-bit versions and 2147483647 in
+32-bit versions.
+
On Linux, you may have to compile yourself a 32-bit Python, e.g.:
+
+cd Python-2.6.4
+CC="gcc -m32" LDFLAGS="-L/lib32 -L/usr/lib32 \
+ -L`pwd`/lib32 -Wl,-rpath,/lib32 -Wl,-rpath,/usr/lib32" \
+ ./configure
+make
+# and then use this ./python to run translate.py
+
+
On Mac OS/X: the easiest is to systematically use Python 2.5 when
+working with PyPy. Indeed, the standard Python 2.5 runs in 32-bit mode.
+
On Windows, I only know about the solution of installing a 32-bit Python
+manually.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Added: pypy/extradoc/pypy.org/image/header-background.png
==============================================================================
Binary file. No diff available.
Added: pypy/extradoc/pypy.org/image/pypy-logo.png
==============================================================================
Binary file. No diff available.
Modified: pypy/extradoc/pypy.org/index.html
==============================================================================
--- pypy/extradoc/pypy.org/index.html (original)
+++ pypy/extradoc/pypy.org/index.html Tue Mar 9 18:25:52 2010
@@ -1,16 +1,93 @@
-
+
-
-
-
-
-
-
-
- you should be redirected to
-
- http://codespeak.net/pypy/dist/pypy/
-
-
-
+
+ PyPy :: PyPy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+