[pypy-commit] pypy py3k: merge default
pjenvey
noreply at buildbot.pypy.org
Wed Jun 26 21:56:39 CEST 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r65010:f9806d05ed7c
Date: 2013-06-26 12:53 -0700
http://bitbucket.org/pypy/pypy/changeset/f9806d05ed7c/
Log: merge default
diff --git a/pypy/interpreter/error.py b/pypy/interpreter/error.py
--- a/pypy/interpreter/error.py
+++ b/pypy/interpreter/error.py
@@ -30,12 +30,12 @@
w_cause = None
def __init__(self, w_type, w_value, tb=None, w_cause=None):
- assert w_type is not None
self.setup(w_type, w_value)
self._application_traceback = tb
self.w_cause = w_cause
def setup(self, w_type, w_value=None):
+ assert w_type is not None
from pypy.objspace.std.typeobject import W_TypeObject
self.w_type = w_type
self._w_value = w_value
@@ -395,7 +395,6 @@
self.xstrings = strings
for i, _, attr in entries:
setattr(self, attr, args[i])
- assert w_type is not None
self.setup(w_type)
def _compute_value(self, space):
@@ -422,6 +421,18 @@
_fmtcache2[formats] = OpErrFmt
return OpErrFmt, strings
+class OpErrFmtNoArgs(OperationError):
+
+ def __init__(self, w_type, value):
+ self.setup(w_type)
+ self._value = value
+
+ def get_w_value(self, space):
+ w_value = self._w_value
+ if w_value is None:
+ self._w_value = w_value = space.wrap(self._value)
+ return w_value
+
def get_operationerr_class(valuefmt):
try:
result = _fmtcache[valuefmt]
@@ -444,6 +455,8 @@
%T - The result of space.type(w_arg).getname(space)
"""
+ if not len(args):
+ return OpErrFmtNoArgs(w_type, valuefmt)
OpErrFmt, strings = get_operationerr_class(valuefmt)
return OpErrFmt(w_type, strings, *args)
operationerrfmt._annspecialcase_ = 'specialize:arg(1)'
diff --git a/pypy/interpreter/test/test_error.py b/pypy/interpreter/test/test_error.py
--- a/pypy/interpreter/test/test_error.py
+++ b/pypy/interpreter/test/test_error.py
@@ -37,6 +37,14 @@
operr3 = operationerrfmt("w_type2", "a %s b %s c", "bar", "4b")
assert operr3.__class__ is not operr.__class__
+def test_operationerrfmt_noargs(space):
+ operr = operationerrfmt(space.w_AttributeError, "no attribute 'foo'")
+ operr.normalize_exception(space)
+ val = operr.get_w_value(space)
+ assert space.isinstance_w(val, space.w_AttributeError)
+ w_repr = space.repr(val)
+ assert space.str_w(w_repr) == "AttributeError(\"no attribute 'foo'\",)"
+
def test_operationerrfmt_T(space):
operr = operationerrfmt(space.w_AttributeError,
"'%T' object has no attribute '%s'",
diff --git a/pypy/objspace/std/dictmultiobject.py b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -191,8 +191,8 @@
space.raise_key_error(w_key)
def descr_reversed(self, space):
- raise OperationError(space.w_TypeError, space.wrap(
- 'argument to reversed() must be a sequence'))
+ raise operationerrfmt(space.w_TypeError,
+ 'argument to reversed() must be a sequence')
def descr_copy(self, space):
"""D.copy() -> a shallow copy of D"""
diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py
--- a/pypy/objspace/std/listobject.py
+++ b/pypy/objspace/std/listobject.py
@@ -1201,7 +1201,8 @@
def _safe_find(self, w_list, obj, start, stop):
l = self.unerase(w_list.lstorage)
for i in range(start, min(stop, len(l))):
- if l[i] == obj:
+ val = l[i]
+ if val == obj:
return i
raise ValueError
@@ -1521,18 +1522,6 @@
if reverse:
l.reverse()
- def _safe_find(self, w_list, obj, start, stop):
- from rpython.rlib.rfloat import isnan
- if not isnan(obj):
- return AbstractUnwrappedStrategy._safe_find(self, w_list, obj,
- start, stop)
- # unwrapped nan != nan, finding it requires more effort
- l = self.unerase(w_list.lstorage)
- for i in range(start, min(stop, len(l))):
- if isnan(l[i]):
- return i
- raise ValueError
-
class StringListStrategy(AbstractUnwrappedStrategy, ListStrategy):
_none_value = None
diff --git a/pypy/objspace/std/test/test_listobject.py b/pypy/objspace/std/test/test_listobject.py
--- a/pypy/objspace/std/test/test_listobject.py
+++ b/pypy/objspace/std/test/test_listobject.py
@@ -1274,10 +1274,6 @@
non_list = NonList()
assert [] != non_list
- def test_nan_containment(self):
- nan = float('nan')
- assert nan in [nan]
-
def test_issue1266(self):
l = list(range(1))
l.pop()
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -351,7 +351,8 @@
self.resumedata_memo = resume.ResumeDataLoopMemo(metainterp_sd)
self.bool_boxes = {}
self.producer = {}
- self.pendingfields = []
+ self.pendingfields = None # set temporarily to a list, normally by
+ # heap.py, as we're about to generate a guard
self.quasi_immutable_deps = None
self.opaque_pointers = {}
self.replaces_guard = {}
@@ -546,12 +547,14 @@
self.metainterp_sd.profiler.count(jitprof.Counters.OPT_OPS)
if op.is_guard():
self.metainterp_sd.profiler.count(jitprof.Counters.OPT_GUARDS)
+ pendingfields = self.pendingfields
+ self.pendingfields = None
if self.replaces_guard and op in self.replaces_guard:
self.replace_op(self.replaces_guard[op], op)
del self.replaces_guard[op]
return
else:
- op = self.store_final_boxes_in_guard(op)
+ op = self.store_final_boxes_in_guard(op, pendingfields)
elif op.can_raise():
self.exception_might_have_happened = True
if op.result:
@@ -571,12 +574,13 @@
else:
assert False
- def store_final_boxes_in_guard(self, op):
+ def store_final_boxes_in_guard(self, op, pendingfields):
+ assert pendingfields is not None
descr = op.getdescr()
assert isinstance(descr, compile.ResumeGuardDescr)
modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
try:
- newboxes = modifier.finish(self, self.pendingfields)
+ newboxes = modifier.finish(self, pendingfields)
if len(newboxes) > self.metainterp_sd.options.failargs_limit:
raise resume.TagOverflow
except resume.TagOverflow:
diff --git a/rpython/jit/metainterp/optimizeopt/simplify.py b/rpython/jit/metainterp/optimizeopt/simplify.py
--- a/rpython/jit/metainterp/optimizeopt/simplify.py
+++ b/rpython/jit/metainterp/optimizeopt/simplify.py
@@ -7,7 +7,13 @@
def __init__(self, unroll):
self.last_label_descr = None
self.unroll = unroll
-
+
+ def emit_operation(self, op):
+ if op.is_guard():
+ if self.optimizer.pendingfields is None:
+ self.optimizer.pendingfields = []
+ Optimization.emit_operation(self, op)
+
def optimize_CALL_PURE(self, op):
args = op.getarglist()
self.emit_operation(ResOperation(rop.CALL, args, op.result,
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -27,7 +27,7 @@
snapshot0 = resume.Snapshot(None, [b0])
fdescr.rd_snapshot = resume.Snapshot(snapshot0, [b1])
#
- opt.store_final_boxes_in_guard(op)
+ opt.store_final_boxes_in_guard(op, [])
if op.getfailargs() == [b0, b1]:
assert list(fdescr.rd_numb.nums) == [tag(1, TAGBOX)]
assert list(fdescr.rd_numb.prev.nums) == [tag(0, TAGBOX)]
More information about the pypy-commit
mailing list