[pypy-commit] pypy py3k: merge default
pjenvey
noreply at buildbot.pypy.org
Thu Sep 12 00:25:42 CEST 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r66919:f1e02da40fe0
Date: 2013-09-10 11:19 -0700
http://bitbucket.org/pypy/pypy/changeset/f1e02da40fe0/
Log: merge default
diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -418,7 +418,6 @@
bh_setfield_raw = bh_setfield_gc
bh_setfield_raw_i = bh_setfield_raw
- bh_setfield_raw_r = bh_setfield_raw
bh_setfield_raw_f = bh_setfield_raw
def bh_arraylen_gc(self, a, descr):
diff --git a/rpython/jit/backend/llsupport/gc.py b/rpython/jit/backend/llsupport/gc.py
--- a/rpython/jit/backend/llsupport/gc.py
+++ b/rpython/jit/backend/llsupport/gc.py
@@ -64,8 +64,6 @@
return True
def initialize(self):
pass
- def do_write_barrier(self, gcref_struct, gcref_newptr):
- pass
def can_use_nursery_malloc(self, size):
return False
def has_write_barrier_class(self):
@@ -135,9 +133,7 @@
def malloc_jitframe(self, frame_info):
""" Allocate a new frame, overwritten by tests
"""
- frame = jitframe.JITFRAME.allocate(frame_info)
- llop.gc_writebarrier(lltype.Void, frame)
- return frame
+ return jitframe.JITFRAME.allocate(frame_info)
class JitFrameDescrs:
def _freeze_(self):
@@ -547,17 +543,6 @@
hdr = llmemory.cast_adr_to_ptr(hdr_addr, self.HDRPTR)
hdr.tid = tid
- 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))
-
def can_use_nursery_malloc(self, size):
return size < self.max_size_of_young_obj
diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -247,6 +247,7 @@
else:
assert kind == history.REF
self.set_ref_value(ll_frame, num, arg)
+ llop.gc_writebarrier(lltype.Void, ll_frame)
ll_frame = func(ll_frame)
finally:
if not self.translate_support_code:
@@ -390,9 +391,11 @@
else:
raise NotImplementedError("size = %d" % size)
+ @specialize.argtype(1)
def read_ref_at_mem(self, gcref, ofs):
return llop.raw_load(llmemory.GCREF, gcref, ofs)
+ # non- at specialized: must only be called with llmemory.GCREF
def write_ref_at_mem(self, gcref, ofs, newvalue):
llop.raw_store(lltype.Void, gcref, ofs, newvalue)
# the write barrier is implied above
@@ -541,6 +544,7 @@
ofs, size, sign = self.unpack_fielddescr_size(fielddescr)
return self.read_int_at_mem(struct, ofs, size, sign)
+ @specialize.argtype(1)
def bh_getfield_gc_r(self, struct, fielddescr):
ofs = self.unpack_fielddescr(fielddescr)
return self.read_ref_at_mem(struct, ofs)
@@ -551,6 +555,7 @@
return self.read_float_at_mem(struct, ofs)
bh_getfield_raw_i = bh_getfield_gc_i
+ bh_getfield_raw_r = bh_getfield_gc_r
bh_getfield_raw_f = bh_getfield_gc_f
@specialize.argtype(1)
diff --git a/rpython/jit/backend/llsupport/test/test_gc.py b/rpython/jit/backend/llsupport/test/test_gc.py
--- a/rpython/jit/backend/llsupport/test/test_gc.py
+++ b/rpython/jit/backend/llsupport/test/test_gc.py
@@ -175,26 +175,6 @@
repr(basesize), repr(itemsize),
repr(ofs_length), p)]
- def test_do_write_barrier(self):
- gc_ll_descr = self.gc_ll_descr
- R = lltype.GcStruct('R')
- S = lltype.GcStruct('S', ('r', lltype.Ptr(R)))
- s = lltype.malloc(S)
- r = lltype.malloc(R)
- s_hdr = gc_ll_descr.gcheaderbuilder.new_header(s)
- s_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
- r_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, r)
- s_adr = llmemory.cast_ptr_to_adr(s)
- llmemory.cast_ptr_to_adr(r)
- #
- s_hdr.tid &= ~gc_ll_descr.GCClass.JIT_WB_IF_FLAG
- gc_ll_descr.do_write_barrier(s_gcref, r_gcref)
- assert self.llop1.record == [] # not called
- #
- s_hdr.tid |= gc_ll_descr.GCClass.JIT_WB_IF_FLAG
- gc_ll_descr.do_write_barrier(s_gcref, r_gcref)
- assert self.llop1.record == [('barrier', s_adr)]
-
def test_gen_write_barrier(self):
gc_ll_descr = self.gc_ll_descr
llop1 = self.llop1
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -264,8 +264,6 @@
def bh_setfield_raw_i(self, struct, newvalue, fielddescr):
raise NotImplementedError
- def bh_setfield_raw_r(self, struct, newvalue, fielddescr):
- raise NotImplementedError
def bh_setfield_raw_f(self, struct, newvalue, fielddescr):
raise NotImplementedError
diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -688,6 +688,10 @@
kind = getkind(RESULT)[0]
op1 = SpaceOperation('getfield_%s_%s%s' % (argname, kind, pure),
[v_inst, descr], op.result)
+ if op1.opname == 'getfield_raw_r':
+ # note: 'getfield_raw_r_pure' is used e.g. to load class
+ # attributes that are GC objects, so that one is supported.
+ raise Exception("getfield_raw_r (without _pure) not supported")
#
if immut in (IR_QUASIIMMUTABLE, IR_QUASIIMMUTABLE_ARRAY):
descr1 = self.cpu.fielddescrof(
@@ -720,6 +724,8 @@
descr = self.cpu.fielddescrof(v_inst.concretetype.TO,
c_fieldname.value)
kind = getkind(RESULT)[0]
+ if argname == 'raw' and kind == 'r':
+ raise Exception("setfield_raw_r not supported")
return SpaceOperation('setfield_%s_%s' % (argname, kind),
[v_inst, v_value, descr],
None)
diff --git a/rpython/jit/metainterp/blackhole.py b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -1263,14 +1263,15 @@
def bhimpl_getfield_raw_i(cpu, struct, fielddescr):
return cpu.bh_getfield_raw_i(struct, fielddescr)
@arguments("cpu", "i", "d", returns="r")
- def bhimpl_getfield_raw_r(cpu, struct, fielddescr):
+ def _bhimpl_getfield_raw_r(cpu, struct, fielddescr):
+ # only for 'getfield_raw_r_pure'
return cpu.bh_getfield_raw_r(struct, fielddescr)
@arguments("cpu", "i", "d", returns="f")
def bhimpl_getfield_raw_f(cpu, struct, fielddescr):
return cpu.bh_getfield_raw_f(struct, fielddescr)
bhimpl_getfield_raw_i_pure = bhimpl_getfield_raw_i
- bhimpl_getfield_raw_r_pure = bhimpl_getfield_raw_r
+ bhimpl_getfield_raw_r_pure = _bhimpl_getfield_raw_r
bhimpl_getfield_raw_f_pure = bhimpl_getfield_raw_f
@arguments("cpu", "r", "i", "d")
@@ -1290,9 +1291,6 @@
@arguments("cpu", "i", "i", "d")
def bhimpl_setfield_raw_i(cpu, struct, newvalue, fielddescr):
cpu.bh_setfield_raw_i(struct, newvalue, fielddescr)
- @arguments("cpu", "i", "r", "d")
- def bhimpl_setfield_raw_r(cpu, struct, newvalue, fielddescr):
- cpu.bh_setfield_raw_r(struct, newvalue, fielddescr)
@arguments("cpu", "i", "f", "d")
def bhimpl_setfield_raw_f(cpu, struct, newvalue, fielddescr):
cpu.bh_setfield_raw_f(struct, newvalue, fielddescr)
diff --git a/rpython/jit/metainterp/executor.py b/rpython/jit/metainterp/executor.py
--- a/rpython/jit/metainterp/executor.py
+++ b/rpython/jit/metainterp/executor.py
@@ -177,9 +177,8 @@
def do_setfield_raw(cpu, _, structbox, itembox, fielddescr):
struct = structbox.getint()
- if fielddescr.is_pointer_field():
- cpu.bh_setfield_raw_r(struct, itembox.getref_base(), fielddescr)
- elif fielddescr.is_float_field():
+ assert not fielddescr.is_pointer_field()
+ if fielddescr.is_float_field():
cpu.bh_setfield_raw_f(struct, itembox.getfloatstorage(), fielddescr)
else:
cpu.bh_setfield_raw_i(struct, itembox.getint(), fielddescr)
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -643,7 +643,6 @@
def _opimpl_getfield_raw_any(self, box, fielddescr):
return self.execute_with_descr(rop.GETFIELD_RAW, fielddescr, box)
opimpl_getfield_raw_i = _opimpl_getfield_raw_any
- opimpl_getfield_raw_r = _opimpl_getfield_raw_any
opimpl_getfield_raw_f = _opimpl_getfield_raw_any
@arguments("box", "descr")
@@ -657,7 +656,6 @@
def _opimpl_setfield_raw_any(self, box, valuebox, fielddescr):
self.execute_with_descr(rop.SETFIELD_RAW, fielddescr, box, valuebox)
opimpl_setfield_raw_i = _opimpl_setfield_raw_any
- opimpl_setfield_raw_r = _opimpl_setfield_raw_any
opimpl_setfield_raw_f = _opimpl_setfield_raw_any
@arguments("box", "box", "box", "descr")
diff --git a/rpython/rlib/rsre/rpy/__init__.py b/rpython/rlib/rsre/rpy/__init__.py
new file mode 100644
--- /dev/null
+++ b/rpython/rlib/rsre/rpy/__init__.py
@@ -0,0 +1,1 @@
+from ._sre import get_code
diff --git a/rpython/rlib/rsre/rpy.py b/rpython/rlib/rsre/rpy/_sre.py
rename from rpython/rlib/rsre/rpy.py
rename to rpython/rlib/rsre/rpy/_sre.py
--- a/rpython/rlib/rsre/rpy.py
+++ b/rpython/rlib/rsre/rpy/_sre.py
@@ -1,46 +1,24 @@
from rpython.rlib.rsre import rsre_char
-from rpython.rlib.rsre.rsre_core import match
from rpython.rlib.rarithmetic import intmask
-def get_hacked_sre_compile(my_compile):
- """Return a copy of the sre_compile module for which the _sre
- module is a custom module that has _sre.compile == my_compile
- and CODESIZE == rsre_char.CODESIZE.
- """
- import sre_compile, sre_constants, __builtin__, new
- sre_hacked = new.module("_sre_hacked")
- sre_hacked.compile = my_compile
- sre_hacked.MAGIC = sre_compile.MAGIC
- sre_hacked.CODESIZE = rsre_char.CODESIZE
- sre_hacked.MAXREPEAT = sre_constants.MAX_REPEAT
- sre_hacked.getlower = rsre_char.getlower
- def my_import(name, *args):
- if name == '_sre':
- return sre_hacked
- else:
- return default_import(name, *args)
- src = sre_compile.__file__
- if src.lower().endswith('.pyc') or src.lower().endswith('.pyo'):
- src = src[:-1]
- mod = new.module("sre_compile_hacked")
- default_import = __import__
- try:
- __builtin__.__import__ = my_import
- execfile(src, mod.__dict__)
- finally:
- __builtin__.__import__ = default_import
- return mod
+
+MAGIC = 20031017
+CODESIZE = rsre_char.CODESIZE
+getlower = rsre_char.getlower
+
class GotIt(Exception):
pass
-def my_compile(pattern, flags, code, *args):
+
+def compile(pattern, flags, code, *args):
raise GotIt([intmask(i) for i in code], flags, args)
-sre_compile_hacked = get_hacked_sre_compile(my_compile)
+
def get_code(regexp, flags=0, allargs=False):
+ from . import sre_compile
try:
- sre_compile_hacked.compile(regexp, flags)
+ sre_compile.compile(regexp, flags)
except GotIt, e:
pass
else:
diff --git a/lib-python/2.7/sre_compile.py b/rpython/rlib/rsre/rpy/sre_compile.py
copy from lib-python/2.7/sre_compile.py
copy to rpython/rlib/rsre/rpy/sre_compile.py
--- a/lib-python/2.7/sre_compile.py
+++ b/rpython/rlib/rsre/rpy/sre_compile.py
@@ -8,11 +8,11 @@
# See the sre.py file for information on usage and redistribution.
#
-"""Internal support module for sre"""
+"""Internal support module for sre (copied from CPython 2.7.3)"""
-import _sre, sys
-import sre_parse
-from sre_constants import *
+import sys
+from . import _sre, sre_parse
+from .sre_constants import *
assert _sre.MAGIC == MAGIC, "SRE module mismatch"
diff --git a/lib-python/2.7/sre_constants.py b/rpython/rlib/rsre/rpy/sre_constants.py
copy from lib-python/2.7/sre_constants.py
copy to rpython/rlib/rsre/rpy/sre_constants.py
--- a/lib-python/2.7/sre_constants.py
+++ b/rpython/rlib/rsre/rpy/sre_constants.py
@@ -9,7 +9,7 @@
# See the sre.py file for information on usage and redistribution.
#
-"""Internal support module for sre"""
+"""Internal support module for sre (copied from CPython 2.7.3)"""
# update when constants are added or removed
@@ -20,10 +20,8 @@
MAXREPEAT = 65535
# SRE standard exception (access as sre.error)
-# should this really be here?
-
-class error(Exception):
- pass
+# (use the real re.error exception class)
+from re import error
# operators
diff --git a/lib-python/2.7/sre_parse.py b/rpython/rlib/rsre/rpy/sre_parse.py
copy from lib-python/2.7/sre_parse.py
copy to rpython/rlib/rsre/rpy/sre_parse.py
--- a/lib-python/2.7/sre_parse.py
+++ b/rpython/rlib/rsre/rpy/sre_parse.py
@@ -8,19 +8,13 @@
# See the sre.py file for information on usage and redistribution.
#
-"""Internal support module for sre"""
+"""Internal support module for sre (copied from CPython 2.7.3)"""
# XXX: show string offset and offending character for all errors
import sys
-from sre_constants import *
-
-try:
- from __pypy__ import newdict
-except ImportError:
- assert '__pypy__' not in sys.builtin_module_names
- newdict = lambda _ : {}
+from .sre_constants import *
SPECIAL_CHARS = ".\\[{()*+?^$|"
REPEAT_CHARS = "*+?{"
@@ -74,7 +68,7 @@
self.flags = 0
self.open = []
self.groups = 1
- self.groupdict = newdict("module")
+ self.groupdict = {}
def opengroup(self, name=None):
gid = self.groups
self.groups = gid + 1
diff --git a/rpython/rlib/rsre/rsre_re.py b/rpython/rlib/rsre/rsre_re.py
--- a/rpython/rlib/rsre/rsre_re.py
+++ b/rpython/rlib/rsre/rsre_re.py
@@ -286,8 +286,8 @@
class Scanner:
# This class is copied directly from re.py.
def __init__(self, lexicon, flags=0):
- from sre_constants import BRANCH, SUBPATTERN
- import sre_parse
+ from rpython.rlib.rsre.rpy.sre_constants import BRANCH, SUBPATTERN
+ from rpython.rlib.rsre.rpy import sre_parse
self.lexicon = lexicon
# combine phrases into a compound pattern
p = []
diff --git a/rpython/rlib/rsre/test/test_char.py b/rpython/rlib/rsre/test/test_char.py
--- a/rpython/rlib/rsre/test/test_char.py
+++ b/rpython/rlib/rsre/test/test_char.py
@@ -48,7 +48,7 @@
assert not rsre_char.is_uni_word(ord(','))
def test_category():
- from sre_constants import CHCODES
+ from rpython.rlib.rsre.rpy.sre_constants import CHCODES
cat = rsre_char.category_dispatch
#
assert cat(CHCODES["category_digit"], ord('1'))
diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py
--- a/rpython/rtyper/rpbc.py
+++ b/rpython/rtyper/rpbc.py
@@ -596,6 +596,9 @@
def ll_str(self, none):
return llstr("None")
+ def get_ll_eq_function(self):
+ return None
+
def get_ll_hash_function(self):
return ll_none_hash
diff --git a/rpython/rtyper/test/test_rdict.py b/rpython/rtyper/test/test_rdict.py
--- a/rpython/rtyper/test/test_rdict.py
+++ b/rpython/rtyper/test/test_rdict.py
@@ -1051,6 +1051,13 @@
finally:
lltype._array._check_range = original_check_range
+ def test_dict_with_none_key(self):
+ def func(i):
+ d = {None: i}
+ return d[None]
+ res = self.interpret(func, [42])
+ assert res == 42
+
class TestStress:
More information about the pypy-commit
mailing list