Author: Ronan Lamy <[email protected]>
Branch:
Changeset: r71467:67067c56ae1a
Date: 2014-05-11 22:01 +0100
http://bitbucket.org/pypy/pypy/changeset/67067c56ae1a/
Log: inline bootstrap_generator()
diff --git a/rpython/flowspace/generator.py b/rpython/flowspace/generator.py
--- a/rpython/flowspace/generator.py
+++ b/rpython/flowspace/generator.py
@@ -16,19 +16,16 @@
_attrs_ = ()
def make_generator_entry_graph(func):
+ # This is the first copy of the graph. We replace it with
+ # a small bootstrap graph.
code = HostCode._from_code(func.func_code)
graph = PyGraph(func, code)
block = graph.startblock
for name, w_value in zip(code.co_varnames, block.framestate.mergeable):
if isinstance(w_value, Variable):
w_value.rename(name)
- return bootstrap_generator(graph)
-
-
-def bootstrap_generator(graph):
- # This is the first copy of the graph. We replace it with
- # a small bootstrap graph.
- GeneratorIterator = make_generatoriterator_class(graph)
+ varnames = get_variable_names(graph.startblock.inputargs)
+ GeneratorIterator = make_generatoriterator_class(varnames)
replace_graph_with_bootstrap(GeneratorIterator, graph)
# We attach a 'next' method to the GeneratorIterator class
# that will invoke the real function, based on a second
@@ -42,11 +39,11 @@
tweak_generator_body_graph(GeneratorIterator.Entry, graph)
-def make_generatoriterator_class(graph):
+def make_generatoriterator_class(var_names):
class GeneratorIterator(object):
class Entry(AbstractPosition):
_immutable_ = True
- varnames = get_variable_names(graph.startblock.inputargs)
+ varnames = var_names
def __init__(self, entry):
self.current = entry
@@ -84,7 +81,7 @@
self.current = next_entry
return return_value
GeneratorIterator.next = next
- return func # for debugging
+ graph._tweaked_func = func # for testing
def get_variable_names(variables):
seen = set()
diff --git a/rpython/flowspace/test/test_generator.py
b/rpython/flowspace/test/test_generator.py
--- a/rpython/flowspace/test/test_generator.py
+++ b/rpython/flowspace/test/test_generator.py
@@ -1,8 +1,8 @@
from rpython.conftest import option
from rpython.flowspace.objspace import build_flow
from rpython.flowspace.model import Variable
-from rpython.flowspace.generator import (make_generatoriterator_class,
- replace_graph_with_bootstrap, get_variable_names, attach_next_method)
+from rpython.flowspace.generator import (
+ make_generator_entry_graph, get_variable_names)
from rpython.translator.simplify import join_blocks
@@ -93,14 +93,11 @@
yield n + 1
z -= 10
#
- graph = build_flow(f)
- GeneratorIterator = make_generatoriterator_class(graph)
- replace_graph_with_bootstrap(GeneratorIterator, graph)
- func1 = attach_next_method(GeneratorIterator, graph)
+ graph = make_generator_entry_graph(f)
+ func1 = graph._tweaked_func
if option.view:
graph.show()
- #
- assert func1._generator_next_method_of_ is GeneratorIterator
+ GeneratorIterator = graph._tweaked_func._generator_next_method_of_
assert hasattr(GeneratorIterator, 'next')
#
graph_next = build_flow(GeneratorIterator.next.im_func)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit