[pypy-svn] r5542 - in pypy/trunk/src/pypy/interpreter: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Jul 13 11:58:39 CEST 2004
Author: arigo
Date: Tue Jul 13 11:58:37 2004
New Revision: 5542
Modified:
pypy/trunk/src/pypy/interpreter/gateway.py
pypy/trunk/src/pypy/interpreter/test/test_function.py
Log:
Checking the number of arguments in performance_shortcut_call().
Modified: pypy/trunk/src/pypy/interpreter/gateway.py
==============================================================================
--- pypy/trunk/src/pypy/interpreter/gateway.py (original)
+++ pypy/trunk/src/pypy/interpreter/gateway.py Tue Jul 13 11:58:37 2004
@@ -10,7 +10,7 @@
"""
-import types
+import types, sys
from pypy.interpreter import eval, pycode
from pypy.interpreter.function import Function, Method
from pypy.interpreter.baseobjspace import Wrappable
@@ -76,6 +76,11 @@
argnames[i] = a[2:]
self.sig = argnames, varargname, kwargname
+ self.minargs = len(argnames)
+ if self.starargs:
+ self.maxargs = sys.maxint
+ else:
+ self.maxargs = self.minargs
def create_frame(self, space, w_globals, closure=None):
return BuiltinFrame(space, self, w_globals)
@@ -91,6 +96,8 @@
if self.generalargs or args.kwds_w:
return None
args_w = args.args_w
+ if not (self.minargs <= len(args_w) <= self.maxargs):
+ return None
if self.ismethod:
if not args_w:
return None
@@ -114,6 +121,8 @@
else:
if args.kwds_w:
return None
+ if not (self.minargs <= 1+len(args.args_w) <= self.maxargs):
+ return None
if self.ismethod:
w_obj = space.unwrap(w_obj) # abuse name w_obj
if self.spacearg:
Modified: pypy/trunk/src/pypy/interpreter/test/test_function.py
==============================================================================
--- pypy/trunk/src/pypy/interpreter/test/test_function.py (original)
+++ pypy/trunk/src/pypy/interpreter/test/test_function.py Tue Jul 13 11:58:37 2004
@@ -136,6 +136,18 @@
meth = func.__get__(obj, object)
self.assertEquals(meth(), obj)
+ def test_call_builtin(self):
+ s = 'hello'
+ self.assertRaises(TypeError, len)
+ self.assertEquals(len(s), 5)
+ self.assertRaises(TypeError, len, s, s)
+ self.assertRaises(TypeError, len, s, s, s)
+ self.assertEquals(len(*[s]), 5)
+ self.assertEquals(len(s, *[]), 5)
+ self.assertRaises(TypeError, len, some_unknown_keyword=s)
+ self.assertRaises(TypeError, len, s, some_unknown_keyword=s)
+ self.assertRaises(TypeError, len, s, s, some_unknown_keyword=s)
+
class AppTestMethod(testit.AppTestCase):
def test_get(self):
More information about the Pypy-commit
mailing list