[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