[pypy-svn] r9551 - pypy/dist/pypy/interpreter
arigo at codespeak.net
arigo at codespeak.net
Tue Mar 1 17:48:04 CET 2005
Author: arigo
Date: Tue Mar 1 17:48:04 2005
New Revision: 9551
Modified:
pypy/dist/pypy/interpreter/pycode.py
Log:
Frame subclasses creation is NOT_RPYTHON.
Modified: pypy/dist/pypy/interpreter/pycode.py
==============================================================================
--- pypy/dist/pypy/interpreter/pycode.py (original)
+++ pypy/dist/pypy/interpreter/pycode.py Tue Mar 1 17:48:04 2005
@@ -50,21 +50,20 @@
frame_classes = {}
-def frame_class(choose):
- if frame_classes:
- return frame_classes[choose]
- else:
- from pypy.interpreter.pyopcode import PyInterpFrame
- from pypy.interpreter.nestedscope import PyNestedScopeFrame
- from pypy.interpreter.generator import GeneratorFrame
-
- frame_classes[0] = PyInterpFrame
- frame_classes[NESTED] = PyNestedScopeFrame
- frame_classes[GENERATOR] = type('PyGeneratorFrame', (PyInterpFrame,),
- GeneratorFrame.__dict__.copy())
- frame_classes[NESTED|GENERATOR] = type('PyNestedScopeGeneratorFrame', (PyNestedScopeFrame,),
- GeneratorFrame.__dict__.copy())
- return frame_classes[choose]
+def setup_frame_classes():
+ "NOT_RPYTHON"
+ from pypy.interpreter.pyopcode import PyInterpFrame
+ from pypy.interpreter.nestedscope import PyNestedScopeFrame
+ from pypy.interpreter.generator import GeneratorFrame
+
+ frame_classes[0] = PyInterpFrame
+ frame_classes[NESTED] = PyNestedScopeFrame
+ frame_classes[GENERATOR] = type('PyGeneratorFrame',
+ (PyInterpFrame,),
+ GeneratorFrame.__dict__.copy())
+ frame_classes[NESTED|GENERATOR] = type('PyNestedScopeGeneratorFrame',
+ (PyNestedScopeFrame,),
+ GeneratorFrame.__dict__.copy())
class PyCode(eval.Code):
"CPython-style code objects."
@@ -139,12 +138,14 @@
def create_frame(self, space, w_globals, closure=None):
"Create an empty PyFrame suitable for this code object."
# select the appropriate kind of frame
+ if not frame_classes:
+ setup_frame_classes() # lazily
choose = 0
if self.co_cellvars or self.co_freevars:
choose |= NESTED
if self.co_flags & CO_GENERATOR:
choose |= GENERATOR
- Frame = frame_class(choose)
+ Frame = frame_classes[choose]
return Frame(space, self, w_globals, closure)
signature = cpython_code_signature
More information about the Pypy-commit
mailing list