Author: Ronan Lamy <ronan.l...@gmail.com> Branch: less-stringly-ops Changeset: r66241:ce7a9656676d Date: 2013-05-05 04:15 +0100 http://bitbucket.org/pypy/pypy/changeset/ce7a9656676d/
Log: Move guessbool() call out of space.is_true() diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py --- a/rpython/flowspace/flowcontext.py +++ b/rpython/flowspace/flowcontext.py @@ -129,7 +129,7 @@ def append(self, operation): raise NotImplementedError - def guessbool(self, frame, w_condition, **kwds): + def guessbool(self, frame, w_condition): raise AssertionError("cannot guessbool(%s)" % (w_condition,)) @@ -211,7 +211,7 @@ [str(s) for s in self.listtoreplay[self.index:]])) self.index += 1 - def guessbool(self, frame, w_condition, **kwds): + def guessbool(self, frame, w_condition): assert self.index == len(self.listtoreplay) frame.recorder = self.nextreplayer return self.booloutcome @@ -432,8 +432,10 @@ self.last_exception = FSException(data[-2], data[-1]) self.blockstack = state.blocklist[:] - def guessbool(self, w_condition, **kwds): - return self.recorder.guessbool(self, w_condition, **kwds) + def guessbool(self, w_condition): + if isinstance(w_condition, Constant): + return w_condition.value + return self.recorder.guessbool(self, w_condition) def do_operation(self, name, *args_w): spaceop = SpaceOperation(name, args_w, Variable()) @@ -738,34 +740,34 @@ def JUMP_IF_FALSE(self, target): # Python <= 2.6 only w_cond = self.peekvalue() - if not self.space.is_true(w_cond): + if not self.guessbool(self.space.is_true(w_cond)): return target def JUMP_IF_TRUE(self, target): # Python <= 2.6 only w_cond = self.peekvalue() - if self.space.is_true(w_cond): + if self.guessbool(self.space.is_true(w_cond)): return target def POP_JUMP_IF_FALSE(self, target): w_value = self.popvalue() - if not self.space.is_true(w_value): + if not self.guessbool(self.space.is_true(w_value)): return target def POP_JUMP_IF_TRUE(self, target): w_value = self.popvalue() - if self.space.is_true(w_value): + if self.guessbool(self.space.is_true(w_value)): return target def JUMP_IF_FALSE_OR_POP(self, target): w_value = self.peekvalue() - if not self.space.is_true(w_value): + if not self.guessbool(self.space.is_true(w_value)): return target self.popvalue() def JUMP_IF_TRUE_OR_POP(self, target): w_value = self.peekvalue() - if self.space.is_true(w_value): + if self.guessbool(self.space.is_true(w_value)): return target self.popvalue() diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py --- a/rpython/flowspace/objspace.py +++ b/rpython/flowspace/objspace.py @@ -90,7 +90,7 @@ return build_flow(func, self) def is_w(self, w_one, w_two): - return self.is_true(self.is_(w_one, w_two)) + return self.frame.guessbool(self.is_true(self.is_(w_one, w_two))) is_ = None # real version added by add_operations() id = None # real version added by add_operations() @@ -133,7 +133,7 @@ return FSException(w_type, w_value) def exception_issubclass_w(self, w_cls1, w_cls2): - return self.is_true(self.issubtype(w_cls1, w_cls2)) + return self.frame.guessbool(self.is_true(self.issubtype(w_cls1, w_cls2))) def exception_match(self, w_exc_type, w_check_class): """Checks if the given exception type matches 'w_check_class'.""" @@ -200,7 +200,7 @@ else: w_len = self.len(w_iterable) w_correct = self.eq(w_len, const(expected_length)) - if not self.is_true(w_correct): + if not self.frame.guessbool(self.is_true(w_correct)): e = self.exc_from_raise(self.w_ValueError, self.w_None) raise e return [self.frame.do_operation('getitem', w_iterable, const(i)) @@ -208,13 +208,13 @@ # ____________________________________________________________ def not_(self, w_obj): - return const(not self.is_true(w_obj)) + return const(not self.frame.guessbool(self.is_true(w_obj))) def is_true(self, w_obj): if w_obj.foldable(): - return bool(w_obj.value) + return const(bool(w_obj.value)) w_truthvalue = self.frame.do_operation('bool', w_obj) - return self.frame.guessbool(w_truthvalue) + return w_truthvalue def iter(self, w_iterable): if isinstance(w_iterable, Constant): @@ -264,7 +264,7 @@ return self.frame.do_op(op.getattr(w_obj, w_name)) def isinstance_w(self, w_obj, w_type): - return self.is_true(self.isinstance(w_obj, w_type)) + return self.frame.guessbool(self.is_true(self.isinstance(w_obj, w_type))) def import_name(self, name, glob=None, loc=None, frm=None, level=-1): try: _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit