[pypy-svn] r4842 - pypy/branch/src-newobjectmodel/pypy/interpreter

hpk at codespeak.net hpk at codespeak.net
Thu Jun 3 09:19:43 CEST 2004


Author: hpk
Date: Thu Jun  3 09:19:40 2004
New Revision: 4842

Modified:
   pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py
   pypy/branch/src-newobjectmodel/pypy/interpreter/generator.py
   pypy/branch/src-newobjectmodel/pypy/interpreter/typedef.py
Log:
moved generator to typedef-descriptor scheme 



Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py	Thu Jun  3 09:19:40 2004
@@ -3,7 +3,7 @@
 from pypy.interpreter.miscutils import Stack, getthreadlocals
 import pypy.module
 
-__all__ = ['ObjSpace', 'OperationError', 'NoValue']
+__all__ = ['ObjSpace', 'OperationError', 'NoValue', 'Wrappable']
 
 
 class Wrappable(object):

Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/generator.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/generator.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/generator.py	Thu Jun  3 09:19:40 2004
@@ -44,10 +44,10 @@
         self.frame = frame
         self.running = False
 
-    def pypy_iter(self):
+    def descr__iter__(self):
         return self.space.wrap(self)
 
-    def pypy_next(self):
+    def descr_next(self):
         # raise NoValue when exhausted
         if self.running:
             space = self.frame.space
@@ -66,21 +66,16 @@
         finally:
             self.running = False
 
+    # XXX the next two methods we don't really want here, 
+    #     it appears to be there for trivial object space 
     def next(self):
         try:
-            return self.pypy_next()
+            return self.descr_next() # 
         except NoValue:
             raise OperationError(self.space.w_StopIteration,
                                  self.space.w_None)
     app_next = gateway.interp2app(next)
 
-    def pypy_getattr(self, w_attr):
-        # XXX boilerplate that should disappear at some point
-        attr = self.space.unwrap(w_attr)
-        if attr == 'next':
-            return self.space.wrap(self.app_next)
-        raise OperationError(self.space.w_AttributeError, w_attr)
-
     # XXX the following is for TrivialObjSpace only, when iteration is
     # done by C code (e.g. when calling 'list(g())').
     def __iter__(self):

Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/typedef.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/typedef.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/typedef.py	Thu Jun  3 09:19:40 2004
@@ -53,6 +53,7 @@
 from pypy.interpreter.module import Module
 from pypy.interpreter.function import Function, Method
 from pypy.interpreter.pytraceback import PyTraceback
+from pypy.interpreter.generator import GeneratorIterator 
 
 Code.typedef = TypeDef('internal-code',
     co_name = attrproperty('co_name'),
@@ -117,3 +118,10 @@
     tb_lineno = attrproperty('tb_line'),
     tb_next   = attrproperty('tb_next'),
     )
+
+GeneratorIterator.typedef = TypeDef("generator",
+    next       = interp2app(GeneratorIterator.descr_next.im_func),
+    __iter__   = interp2app(GeneratorIterator.descr__iter__.im_func),
+    gi_running = attrproperty('running'), 
+    gi_frame   = attrproperty('frame'), 
+)



More information about the Pypy-commit mailing list