[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