[pypy-svn] r76282 - pypy/branch/interplevel-array/pypy/module/_demo

fijal at codespeak.net fijal at codespeak.net
Mon Jul 19 19:41:21 CEST 2010


Author: fijal
Date: Mon Jul 19 19:41:18 2010
New Revision: 76282

Added:
   pypy/branch/interplevel-array/pypy/module/_demo/interp_demo.py
Modified:
   pypy/branch/interplevel-array/pypy/module/_demo/__init__.py
   pypy/branch/interplevel-array/pypy/module/_demo/demo.py
Log:
A shot at multimethods for user-supplied types. Not working so far


Modified: pypy/branch/interplevel-array/pypy/module/_demo/__init__.py
==============================================================================
--- pypy/branch/interplevel-array/pypy/module/_demo/__init__.py	(original)
+++ pypy/branch/interplevel-array/pypy/module/_demo/__init__.py	Mon Jul 19 19:41:18 2010
@@ -4,13 +4,10 @@
     """A demo built-in module based on ctypes."""
 
     interpleveldefs = {
-        'measuretime'      : 'demo.measuretime',
-        'sieve'            : 'demo.sieve',
-        'MyType'           : 'demo.W_MyType',
+        'tp' : 'interp_demo.w_type',
     }
 
     appleveldefs = {
-        'DemoError'        : 'app_demo.DemoError',
     }
 
     # Used in tests

Modified: pypy/branch/interplevel-array/pypy/module/_demo/demo.py
==============================================================================
--- pypy/branch/interplevel-array/pypy/module/_demo/demo.py	(original)
+++ pypy/branch/interplevel-array/pypy/module/_demo/demo.py	Mon Jul 19 19:41:18 2010
@@ -6,69 +6,3 @@
 from pypy.rpython.tool import rffi_platform
 import sys, math
 
-time_t = rffi_platform.getsimpletype('time_t', '#include <time.h>', rffi.LONG)
-
-time = rffi.llexternal('time', [rffi.VOIDP], time_t, includes=['time.h'])
-
-def get(space, name):
-    w_module = space.getbuiltinmodule('_demo')
-    return space.getattr(w_module, space.wrap(name))
-
-
-def measuretime(space, repetitions, w_callable):
-    if repetitions <= 0:
-        w_DemoError = get(space, 'DemoError')
-        msg = "repetition count must be > 0"
-        raise OperationError(w_DemoError, space.wrap(msg))
-    starttime = time(None)
-    for i in range(repetitions):
-        space.call_function(w_callable)
-    endtime = time(None)
-    return space.wrap(endtime - starttime)
-measuretime.unwrap_spec = [ObjSpace, int, W_Root]
-
-def sieve(space, n):
-    lst = range(2, n + 1)
-    head = 0
-    while 1:
-        first = lst[head]
-        if first > math.sqrt(n) + 1:
-            lst_w = [space.newint(i) for i in lst]
-            return space.newlist(lst_w)
-        newlst = []
-        for element in lst:
-            if element <= first:
-                newlst.append(element)
-            elif element % first != 0:
-                newlst.append(element)
-        lst = newlst
-        head += 1
-sieve.unwrap_spec = [ObjSpace, int]
- 
-class W_MyType(Wrappable):
-    def __init__(self, space, x=1):
-        self.space = space
-        self.x = x
-
-    def multiply(self, w_y):
-        space = self.space
-        y = space.int_w(w_y)
-        return space.wrap(self.x * y)
-
-    def fget_x(space, self):
-        return space.wrap(self.x)
-
-    def fset_x(space, self, w_value):
-        self.x = space.int_w(w_value)
-
-def mytype_new(space, w_subtype, x):
-    return space.wrap(W_MyType(space, x))
-mytype_new.unwrap_spec = [ObjSpace, W_Root, int]
-
-getset_x = GetSetProperty(W_MyType.fget_x, W_MyType.fset_x, cls=W_MyType)
-
-W_MyType.typedef = TypeDef('MyType',
-    __new__ = interp2app(mytype_new),
-    x = getset_x,
-    multiply = interp2app(W_MyType.multiply),
-)

Added: pypy/branch/interplevel-array/pypy/module/_demo/interp_demo.py
==============================================================================
--- (empty file)
+++ pypy/branch/interplevel-array/pypy/module/_demo/interp_demo.py	Mon Jul 19 19:41:18 2010
@@ -0,0 +1,31 @@
+
+from pypy.interpreter.baseobjspace import ObjSpace, W_Root, Wrappable
+from pypy.objspace.std.stdtypedef import SMM, StdTypeDef
+from pypy.objspace.std.register_all import register_all
+
+def w_type(space, arg):
+    if arg == 0:
+        return space.wrap(W_Zero())
+    else:
+        return space.wrap(W_One())
+w_type.unwrap_spec = [ObjSpace, int]
+
+type_repr = SMM('__repr__', 1, 'a docstring')
+
+type_typedef = StdTypeDef("tp",
+                          __new__ = w_type)
+type_typedef.registermethods(globals())
+
+class W_Zero(Wrappable):
+    typedef = type_typedef
+
+class W_One(Wrappable):
+    typedef = type_typedef
+
+def repr__Zero(space, w_zero):
+    return space.wrap("zero")
+
+def repr__One(space, w_one):
+    return space.wrap("one")
+
+register_all(locals(), globals())



More information about the Pypy-commit mailing list