Author: Ronan Lamy <[email protected]>
Branch: annotator
Changeset: r68756:a3a0e4f03ee8
Date: 2014-01-18 01:54 +0000
http://bitbucket.org/pypy/pypy/changeset/a3a0e4f03ee8/
Log: Kill FlowObjSpace. Finally!
diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -308,11 +308,10 @@
class FlowSpaceFrame(object):
opcode_method_names = host_bytecode_spec.method_names
- def __init__(self, space, graph, code):
+ def __init__(self, graph, code):
self.graph = graph
func = graph.func
self.pycode = code
- self.space = space
self.w_globals = Constant(func.func_globals)
self.blockstack = []
diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py
--- a/rpython/flowspace/objspace.py
+++ b/rpython/flowspace/objspace.py
@@ -4,9 +4,8 @@
from inspect import CO_NEWLOCALS
-from rpython.flowspace.model import Constant, Variable, checkgraph
+from rpython.flowspace.model import Variable, checkgraph
from rpython.flowspace.bytecode import HostCode
-from rpython.flowspace.operation import op
from rpython.flowspace.flowcontext import (FlowSpaceFrame, fixeggblocks)
from rpython.flowspace.generator import (tweak_generator_graph,
bootstrap_generator)
@@ -24,18 +23,7 @@
"the flag CO_NEWLOCALS set.")
-# ______________________________________________________________________
-class FlowObjSpace(object):
- """NOT_RPYTHON.
- The flow objspace space is used to produce a flow graph by recording
- the space operations that the interpreter generates when it interprets
- (the bytecode of) some function.
- """
- def build_flow(self, func):
- return build_flow(func, self)
-
-
-def build_flow(func, space=FlowObjSpace()):
+def build_flow(func):
"""
Create the flow graph for the function.
"""
@@ -50,7 +38,7 @@
w_value.rename(name)
return bootstrap_generator(graph)
graph = PyGraph(func, code)
- frame = space.frame = FlowSpaceFrame(space, graph, code)
+ frame = FlowSpaceFrame(graph, code)
frame.build_flow()
fixeggblocks(graph)
checkgraph(graph)
diff --git a/rpython/flowspace/operation.py b/rpython/flowspace/operation.py
--- a/rpython/flowspace/operation.py
+++ b/rpython/flowspace/operation.py
@@ -76,8 +76,8 @@
@classmethod
def make_sc(cls):
- def sc_operator(space, *args_w):
- return cls(*args_w).eval(space.frame)
+ def sc_operator(frame, *args_w):
+ return cls(*args_w).eval(frame)
return sc_operator
def eval(self, frame):
@@ -505,7 +505,7 @@
except (KeyError, TypeError):
pass
else:
- return sc(frame.space, *args_w)
+ return sc(frame, *args_w)
return frame.do_op(self)
@@ -521,6 +521,7 @@
except (KeyError, TypeError):
pass
else:
+ from rpython.flowspace.flowcontext import FlowingError
raise FlowingError(
"should not call %r with keyword arguments" % (fn,))
return frame.do_op(self)
diff --git a/rpython/flowspace/specialcase.py b/rpython/flowspace/specialcase.py
--- a/rpython/flowspace/specialcase.py
+++ b/rpython/flowspace/specialcase.py
@@ -7,7 +7,7 @@
"""Decorator triggering special-case handling of ``func``.
When the flow graph builder sees ``func``, it calls the decorated function
- with ``decorated_func(space, *args_w)``, where ``args_w`` is a sequence of
+ with ``decorated_func(frame, *args_w)``, where ``args_w`` is a sequence of
flow objects (Constants or Variables).
"""
def decorate(sc_func):
@@ -15,11 +15,10 @@
return decorate
@register_flow_sc(__import__)
-def sc_import(space, *args_w):
- assert len(args_w) > 0 and len(args_w) <= 5, 'import needs 1 to 5
arguments'
+def sc_import(frame, *args_w):
assert all(isinstance(arg, Constant) for arg in args_w)
args = [arg.value for arg in args_w]
- return space.frame.import_name(*args)
+ return frame.import_name(*args)
@register_flow_sc(locals)
def sc_locals(_, *args):
@@ -32,34 +31,34 @@
"own project.")
@register_flow_sc(isinstance)
-def sc_isinstance(space, w_instance, w_type):
+def sc_isinstance(frame, w_instance, w_type):
if w_instance.foldable() and w_type.foldable():
return const(isinstance(w_instance.value, w_type.value))
- return space.frame.appcall(isinstance, w_instance, w_type)
+ return frame.appcall(isinstance, w_instance, w_type)
@register_flow_sc(getattr)
-def sc_getattr(space, w_obj, w_index, w_default=None):
+def sc_getattr(frame, w_obj, w_index, w_default=None):
if w_default is not None:
- return space.frame.appcall(getattr, w_obj, w_index, w_default)
+ return frame.appcall(getattr, w_obj, w_index, w_default)
else:
from rpython.flowspace.operation import op
- return op.getattr(w_obj, w_index).eval(space.frame)
+ return op.getattr(w_obj, w_index).eval(frame)
@register_flow_sc(open)
-def sc_open(space, *args_w):
+def sc_open(frame, *args_w):
from rpython.rlib.rfile import create_file
- return space.frame.appcall(create_file, *args_w)
+ return frame.appcall(create_file, *args_w)
@register_flow_sc(os.tmpfile)
-def sc_os_tmpfile(space):
+def sc_os_tmpfile(frame):
from rpython.rlib.rfile import create_temp_rfile
- return space.frame.appcall(create_temp_rfile)
+ return frame.appcall(create_temp_rfile)
@register_flow_sc(os.remove)
-def sc_os_remove(space, *args_w):
+def sc_os_remove(frame, *args_w):
# on top of PyPy only: 'os.remove != os.unlink'
# (on CPython they are '==', but not identical either)
- return space.frame.appcall(os.unlink, *args_w)
+ return frame.appcall(os.unlink, *args_w)
# _________________________________________________________________________
# a simplified version of the basic printing routines, for RPython programs
diff --git a/rpython/flowspace/test/test_framestate.py
b/rpython/flowspace/test/test_framestate.py
--- a/rpython/flowspace/test/test_framestate.py
+++ b/rpython/flowspace/test/test_framestate.py
@@ -1,6 +1,5 @@
from rpython.flowspace.model import *
from rpython.rlib.unroll import SpecTag
-from rpython.flowspace.objspace import FlowObjSpace
from rpython.flowspace.flowcontext import FlowSpaceFrame
from rpython.flowspace.bytecode import HostCode
from rpython.flowspace.pygraph import PyGraph
@@ -13,7 +12,7 @@
pass
code = HostCode._from_code(func.func_code)
graph = PyGraph(func, code)
- frame = FlowSpaceFrame(FlowObjSpace(), graph, code)
+ frame = FlowSpaceFrame(graph, code)
# hack the frame
frame.setstate(graph.startblock.framestate)
frame.locals_stack_w[frame.pycode.co_nlocals-1] = Constant(None)
diff --git a/rpython/rlib/objectmodel.py b/rpython/rlib/objectmodel.py
--- a/rpython/rlib/objectmodel.py
+++ b/rpython/rlib/objectmodel.py
@@ -282,7 +282,7 @@
return False
@register_flow_sc(we_are_translated)
-def sc_we_are_translated(space):
+def sc_we_are_translated(frame):
return Constant(True)
@@ -706,7 +706,7 @@
class r_ordereddict(r_dict):
def _newdict(self):
from collections import OrderedDict
-
+
return OrderedDict()
class _r_dictkey(object):
diff --git a/rpython/rlib/rarithmetic.py b/rpython/rlib/rarithmetic.py
--- a/rpython/rlib/rarithmetic.py
+++ b/rpython/rlib/rarithmetic.py
@@ -516,12 +516,12 @@
r_uint = build_int('r_uint', False, LONG_BIT)
@register_flow_sc(r_uint)
-def sc_r_uint(space, w_value):
+def sc_r_uint(frame, w_value):
# (normally, the 32-bit constant is a long, and is not allowed to
# show up in the flow graphs at all)
if isinstance(w_value, Constant):
return Constant(r_uint(w_value.value))
- return space.frame.appcall(r_uint, w_value)
+ return frame.appcall(r_uint, w_value)
r_longlong = build_int('r_longlong', True, 64)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit