[pypy-svn] r9539 - pypy/dist/pypy/interpreter

arigo at codespeak.net arigo at codespeak.net
Tue Mar 1 14:54:19 CET 2005


Author: arigo
Date: Tue Mar  1 14:54:19 2005
New Revision: 9539

Modified:
   pypy/dist/pypy/interpreter/generator.py
Log:
Cleaned up generator.py; moved the 'exhausted' flag to the GeneratorIterator 
class.


Modified: pypy/dist/pypy/interpreter/generator.py
==============================================================================
--- pypy/dist/pypy/interpreter/generator.py	(original)
+++ pypy/dist/pypy/interpreter/generator.py	Tue Mar  1 14:54:19 2005
@@ -17,7 +17,6 @@
 
     def run(self):
         "Build a generator-iterator."
-        self.exhausted = False
         return self.space.wrap(GeneratorIterator(self))
 
     ### extra opcodes ###
@@ -42,6 +41,7 @@
         self.space = frame.space
         self.frame = frame
         self.running = False
+        self.exhausted = False
 
     def descr__iter__(self):
         return self.space.wrap(self)
@@ -51,18 +51,15 @@
         if self.running:
             raise OperationError(space.w_ValueError,
                                  space.wrap('generator already executing'))
-        if self.frame.exhausted:
+        if self.exhausted:
             raise OperationError(space.w_StopIteration, space.w_None) 
         self.running = True
         try:
             try:
                 return self.frame.resume()
-            except OperationError, e:
-                self.frame.exhausted = True
-                if e.match(self.space, self.space.w_StopIteration):
-                    raise OperationError(space.w_StopIteration, space.w_None) 
-                else:
-                    raise
+            except OperationError:
+                self.exhausted = True
+                raise
         finally:
             self.running = False
 
@@ -80,5 +77,4 @@
 class SGeneratorReturn(ControlFlowException):
     """Signals a 'return' statement inside a generator."""
     def emptystack(self, frame):
-        frame.exhausted = True
         raise OperationError(frame.space.w_StopIteration, frame.space.w_None) 



More information about the Pypy-commit mailing list