[pypy-svn] rev 863 - in pypy/trunk/src/pypy/objspace/ann: . test
gvanrossum at codespeak.net
gvanrossum at codespeak.net
Sat Jun 21 17:56:57 CEST 2003
Author: gvanrossum
Date: Sat Jun 21 17:56:57 2003
New Revision: 863
Modified:
pypy/trunk/src/pypy/objspace/ann/objspace.py
pypy/trunk/src/pypy/objspace/ann/test/test_simple.py
Log:
Make a better test and make it work.
Modified: pypy/trunk/src/pypy/objspace/ann/objspace.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/ann/objspace.py (original)
+++ pypy/trunk/src/pypy/objspace/ann/objspace.py Sat Jun 21 17:56:57 2003
@@ -1,6 +1,9 @@
-from __future__ import nested_scopes
+import sys
import operator
-from pypy.interpreter.baseobjspace import *
+
+from pypy.interpreter.baseobjspace \
+ import ObjSpace, OperationError, NoValue, PyPyError
+from pypy.interpreter.pycode import PyByteCode
class W_Object:
@@ -40,11 +43,16 @@
def unwrap(self, w_obj):
if isinstance(w_obj, W_Constant):
return w_obj.value
- else:
+ elif isinstance(w_obj, W_Object):
raise AnnException, "Cannot unwrap %r" % w_obj
+ else:
+ raise TypeError, "not wrapped: %s" % repr(w_obj)
def newtuple(self, args_w):
- return W_Anything()
+ for w_arg in args_w:
+ if not isinstance(w_arg, W_Constant):
+ return W_Anything()
+ return self.wrap(tuple(map(self.unwrap, args_w)))
def newdict(self, items_w):
for w_key, w_value in items_w:
@@ -65,10 +73,57 @@
def newfunction(self, *stuff):
return W_Anything()
+ def call(self, w_func, w_args, w_kwds):
+ func = self.unwrap(w_func) # Would be bad it it was W_Anything
+ code = func.func_code
+ bytecode = PyByteCode()
+ bytecode._from_code(code)
+ w_locals = bytecode.build_arguments(self,
+ w_args,
+ w_kwds,
+ self.wrap(func.func_defaults),
+ self.wrap(()))
+ w_result = bytecode.eval_code(self,
+ self.wrap(func.func_globals),
+ w_locals)
+ return w_result
+
+ def getattr(self, w_obj, w_name):
+ try:
+ obj = self.unwrap(w_obj)
+ name = self.unwrap(w_name)
+ except AnnException:
+ return W_Anything()
+ else:
+ try:
+ return self.wrap(getattr(obj, name))
+ except:
+ return self.reraise()
+
+ def len(self, w_obj):
+ try:
+ obj = self.unwrap(w_obj)
+ except AnnException:
+ return W_Anything()
+ else:
+ return self.wrap(len(obj))
+ def is_true(self, w_obj):
+ obj = self.unwrap(w_obj)
+ return bool(obj)
+
+ def reraise(self):
+ t, v = sys.exc_info()[:2]
+ raise OperationError(self.wrap(t), self.wrap(v))
def make_op(name, symbol, arity, specialnames):
-
+
+ if not hasattr(operator, name):
+ return # Can't do it
+
+ if hasattr(AnnotationObjSpace, name):
+ return # Shouldn't do it
+
def generic_operator(space, *args_w):
assert len(args_w) == arity, "got a wrong number of arguments"
for w_arg in args_w:
@@ -77,10 +132,12 @@
else:
# all arguments are constants, call the operator now
op = getattr(operator, name)
- return op(*[space.unwrap(w_arg) for w_arg in args_w])
+ args = [space.unwrap(w_arg) for w_arg in args_w]
+ result = op(*args)
+ return space.wrap(result)
return W_Anything()
-
+
setattr(AnnotationObjSpace, name, generic_operator)
for line in ObjSpace.MethodTable:
Modified: pypy/trunk/src/pypy/objspace/ann/test/test_simple.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/ann/test/test_simple.py (original)
+++ pypy/trunk/src/pypy/objspace/ann/test/test_simple.py Sat Jun 21 17:56:57 2003
@@ -22,13 +22,20 @@
def setUp(self):
self.space = AnnotationObjSpace()
- def test_simple1(self):
+ def dont_test_simple1(self):
x = self.codetest('''
def f(i):
return i+1
''', 'f', [W_Anything()])
self.assert_(isinstance(x, W_Anything))
+ def test_simple2(self):
+ x = self.codetest('''
+def f(i):
+ return i+1
+''', 'f', [self.space.wrap(5)])
+ self.assertEquals(self.space.unwrap(x), 6)
+
if __name__ == '__main__':
test.main()
More information about the Pypy-commit
mailing list