Author: Ronan Lamy <ronan.l...@gmail.com> Branch: annotator Changeset: r68737:65cb99edd161 Date: 2014-01-05 03:30 +0100 http://bitbucket.org/pypy/pypy/changeset/65cb99edd161/
Log: use operations instead of FlowObjSpace methods everywhere diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py --- a/rpython/flowspace/flowcontext.py +++ b/rpython/flowspace/flowcontext.py @@ -730,7 +730,7 @@ def YIELD_VALUE(self, _): assert self.pycode.is_generator w_result = self.popvalue() - self.space.yield_(w_result) + op.yield_(w_result).eval(self) # XXX yield expressions not supported. This will blow up if the value # isn't popped straightaway. self.pushvalue(None) @@ -790,13 +790,13 @@ def GET_ITER(self, oparg): w_iterable = self.popvalue() - w_iterator = self.space.iter(w_iterable) + w_iterator = op.iter(w_iterable).eval(self) self.pushvalue(w_iterator) def FOR_ITER(self, target): w_iterator = self.peekvalue() try: - w_nextitem = self.space.next(w_iterator) + w_nextitem = op.next(w_iterator).eval(self) except Raise as e: w_exc = e.w_exc if not self.space.exception_match(w_exc.w_type, @@ -825,7 +825,7 @@ # directly call manager.__enter__(), don't use special lookup functions # which don't make sense on the RPython type system. w_manager = self.peekvalue() - w_exit = self.space.getattr(w_manager, const("__exit__")) + w_exit = op.getattr(w_manager, const("__exit__")).eval(self) self.settopvalue(w_exit) w_result = self.space.call_method(w_manager, "__enter__") block = WithBlock(self, target) @@ -949,7 +949,7 @@ # This opcode was added with pypy-1.8. Here is a simpler # version, enough for annotation. last_val = self.popvalue() - self.pushvalue(self.space.newlist()) + self.pushvalue(op.newlist().eval(self)) self.pushvalue(last_val) def call_function(self, oparg, w_star=None, w_starstar=None): @@ -1005,7 +1005,7 @@ if not self.guessbool(op.bool(w_correct).eval(self)): w_exc = self.exc_from_raise(const(ValueError), const(None)) raise Raise(w_exc) - return [self.space.getitem(w_iterable, const(i)) + return [op.getitem(w_iterable, const(i)).eval(self) for i in range(expected_length)] def UNPACK_SEQUENCE(self, itemcount): @@ -1016,7 +1016,7 @@ def slice(self, w_start, w_end): w_obj = self.popvalue() - w_result = self.space.getslice(w_obj, w_start, w_end) + w_result = op.getslice(w_obj, w_start, w_end).eval(self) self.pushvalue(w_result) def SLICE_0(self, oparg): @@ -1038,7 +1038,7 @@ def storeslice(self, w_start, w_end): w_obj = self.popvalue() w_newvalue = self.popvalue() - self.space.setslice(w_obj, w_start, w_end, w_newvalue) + op.setslice(w_obj, w_start, w_end, w_newvalue).eval(self) def STORE_SLICE_0(self, oparg): self.storeslice(self.space.w_None, self.space.w_None) @@ -1058,7 +1058,7 @@ def deleteslice(self, w_start, w_end): w_obj = self.popvalue() - self.space.delslice(w_obj, w_start, w_end) + op.delslice(w_obj, w_start, w_end).eval(self) def DELETE_SLICE_0(self, oparg): self.deleteslice(self.space.w_None, self.space.w_None) @@ -1095,14 +1095,14 @@ w_key = self.popvalue() w_value = self.popvalue() w_dict = self.peekvalue() - self.space.setitem(w_dict, w_key, w_value) + op.setitem(w_dict, w_key, w_value).eval(self) def STORE_SUBSCR(self, oparg): "obj[subscr] = newvalue" w_subscr = self.popvalue() w_obj = self.popvalue() w_newvalue = self.popvalue() - self.space.setitem(w_obj, w_subscr, w_newvalue) + op.setitem(w_obj, w_subscr, w_newvalue).eval(self) def BUILD_SLICE(self, numargs): if numargs == 3: @@ -1113,27 +1113,27 @@ raise BytecodeCorruption w_end = self.popvalue() w_start = self.popvalue() - w_slice = self.space.newslice(w_start, w_end, w_step) + w_slice = op.newslice(w_start, w_end, w_step).eval(self) self.pushvalue(w_slice) def DELETE_SUBSCR(self, oparg): "del obj[subscr]" w_subscr = self.popvalue() w_obj = self.popvalue() - self.space.delitem(w_obj, w_subscr) + op.delitem(w_obj, w_subscr).eval(self) def BUILD_TUPLE(self, itemcount): items = self.popvalues(itemcount) - w_tuple = self.space.newtuple(*items) + w_tuple = op.newtuple(*items).eval(self) self.pushvalue(w_tuple) def BUILD_LIST(self, itemcount): items = self.popvalues(itemcount) - w_list = self.space.newlist(*items) + w_list = op.newlist(*items).eval(self) self.pushvalue(w_list) def BUILD_MAP(self, itemcount): - w_dict = self.space.newdict() + w_dict = op.newdict().eval(self) self.pushvalue(w_dict) def NOP(self, *args): diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py --- a/rpython/flowspace/objspace.py +++ b/rpython/flowspace/objspace.py @@ -8,8 +8,7 @@ from inspect import CO_NEWLOCALS from rpython.flowspace.argument import CallSpec -from rpython.flowspace.model import (Constant, Variable, checkgraph, const, - FSException) +from rpython.flowspace.model import Constant, Variable, checkgraph, const from rpython.flowspace.bytecode import HostCode from rpython.flowspace.operation import op from rpython.flowspace.flowcontext import (FlowSpaceFrame, fixeggblocks, @@ -110,13 +109,13 @@ assert isinstance(w_module, Constant) assert isinstance(w_name, Constant) try: - return self.getattr(w_module, w_name) + return op.getattr(w_module, w_name).eval(self.frame) except FlowingError: exc = ImportError("cannot import name '%s'" % w_name.value) raise Raise(const(exc)) def call_method(self, w_obj, methname, *arg_w): - w_meth = self.getattr(w_obj, const(methname)) + w_meth = op.getattr(w_obj, const(methname)).eval(self.frame) return self.call_function(w_meth, *arg_w) def call_function(self, w_func, *args_w): @@ -163,13 +162,6 @@ return const(value) -for cls in [op.getitem, op.getattr, - op.getslice, op.setslice, op.delslice, op.yield_, op.iter, op.next, - op.newlist, op.newtuple, op.newdict, op.setitem, op.delitem]: - if getattr(FlowObjSpace, cls.opname, None) is None: - setattr(FlowObjSpace, cls.opname, cls.make_sc()) - - def build_flow(func, space=FlowObjSpace()): """ Create the flow graph for the function. diff --git a/rpython/flowspace/specialcase.py b/rpython/flowspace/specialcase.py --- a/rpython/flowspace/specialcase.py +++ b/rpython/flowspace/specialcase.py @@ -42,7 +42,8 @@ if w_default is not None: return space.appcall(getattr, w_obj, w_index, w_default) else: - return space.getattr(w_obj, w_index) + from rpython.flowspace.operation import op + return op.getattr(w_obj, w_index).eval(space.frame) @register_flow_sc(open) def sc_open(space, *args_w): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit