# This isn't specifically related to function attributes, but it does test a
# core dump regression in funcobject.c
del another.func_defaults
+
+def foo():
+ pass
+
+def bar():
+ pass
+
+def temp():
+ print 1
+
+if foo==bar: raise TestFailed
+
+d={}
+d[foo] = 1
+
+foo.func_code = temp.func_code
+
+d[foo]
+
try: raise AClass, b
except BClass, v:
- if v != b: raise TestFailed
-else: raise TestFailed
+ if v != b: raise TestFailed, "v!=b"
+else: raise TestFailed, "no exception"
try: raise b
except AClass, v:
- if v != b: raise TestFailed
+ if v != b: raise TestFailed, "v!=b AClass"
# not enough arguments
try: raise BClass, a
try: raise DClass, a
except DClass, v:
if not isinstance(v, DClass):
- raise TestFailed
+ raise TestFailed, "v not DClass"
print '2.3 comparing function objects'
f = eval('lambda: None')
g = eval('lambda: None')
-if f != g: raise TestFailed
+if f == g: raise TestFailed, "functions should not be same"
f = eval('lambda a: a')
g = eval('lambda a: a')
-if f != g: raise TestFailed
+if f == g: raise TestFailed, "functions should not be same"
f = eval('lambda a=1: a')
g = eval('lambda a=1: a')
-if f != g: raise TestFailed
+if f == g: raise TestFailed, "functions should not be same"
f = eval('lambda: 0')
g = eval('lambda: 1')
return PyString_FromString(buf);
}
-static int
-func_compare(PyFunctionObject *f, PyFunctionObject *g)
-{
- int c;
- if (f->func_globals != g->func_globals)
- return (f->func_globals < g->func_globals) ? -1 : 1;
- if (f->func_defaults != g->func_defaults) {
- if (f->func_defaults == NULL)
- return -1;
- if (g->func_defaults == NULL)
- return 1;
- c = PyObject_Compare(f->func_defaults, g->func_defaults);
- if (c != 0)
- return c;
- }
- return PyObject_Compare(f->func_code, g->func_code);
-}
-
-static long
-func_hash(PyFunctionObject *f)
-{
- long h,x;
- h = PyObject_Hash(f->func_code);
- if (h == -1) return h;
- x = _Py_HashPointer(f->func_globals);
- if (x == -1) return x;
- h ^= x;
- if (h == -1) h = -2;
- return h;
-}
-
static int
func_traverse(PyFunctionObject *f, visitproc visit, void *arg)
{
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
- (cmpfunc)func_compare, /*tp_compare*/
+ 0, /*tp_compare*/
(reprfunc)func_repr, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
- (hashfunc)func_hash, /*tp_hash*/
+ 0, /*tp_hash*/
0, /*tp_call*/
0, /*tp_str*/
(getattrofunc)func_getattro, /*tp_getattro*/