[pypy-commit] pypy annotator: use operations instead of FlowObjSpace methods everywhere
rlamy
noreply at buildbot.pypy.org
Fri Jan 17 18:36:43 CET 2014
Author: Ronan Lamy <ronan.lamy at 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):
More information about the pypy-commit
mailing list