if ((item = (*sqf->sq_item)(seq, i)) == NULL) {
if (i < len)
goto Fail_1;
- if (PyErr_Occurred() == PyExc_IndexError) {
+ if (PyErr_ExceptionMatches(PyExc_IndexError)) {
PyErr_Clear();
break;
}
if (item == NULL) {
if (i < sqp->len)
goto Fail_0;
- if (PyErr_Occurred() ==
- PyExc_IndexError) {
+ if (PyErr_ExceptionMatches(
+ PyExc_IndexError))
+ {
PyErr_Clear();
Py_INCREF(Py_None);
item = Py_None;
for (i = 0; ; i++) {
x = (*sq->sq_item)(v, i); /* Implies INCREF */
if (x == NULL) {
- if (PyErr_Occurred() == PyExc_IndexError) {
+ if (PyErr_ExceptionMatches(PyExc_IndexError)) {
PyErr_Clear();
break;
}
}
if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
- if (PyErr_Occurred() == PyExc_IndexError) {
+ if (PyErr_ExceptionMatches(PyExc_IndexError)) {
PyErr_Clear();
break;
}
return d;
}
+static PyObject *
+builtin_isinstance(self, args)
+ PyObject *self;
+ PyObject *args;
+{
+ PyObject *inst;
+ PyObject *cls;
+ int retval;
+
+ if (!PyArg_ParseTuple(args, "OO", &inst, &cls))
+ return NULL;
+ if (!PyClass_Check(cls)) {
+ PyErr_SetString(PyExc_TypeError,
+ "second argument must be a class");
+ return NULL;
+ }
+
+ if (!PyInstance_Check(inst))
+ retval = 0;
+ else {
+ PyObject *inclass =
+ (PyObject*)((PyInstanceObject*)inst)->in_class;
+ retval = PyClass_IsSubclass(inclass, cls);
+ }
+ return PyInt_FromLong(retval);
+}
+
+
+static PyObject *
+builtin_issubclass(self, args)
+ PyObject *self;
+ PyObject *args;
+{
+ PyObject *derived;
+ PyObject *cls;
+ int retval;
+
+ if (!PyArg_ParseTuple(args, "OO", &derived, &cls))
+ return NULL;
+ if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
+ PyErr_SetString(PyExc_TypeError, "arguments must be classes");
+ return NULL;
+ }
+ /* shortcut */
+ if (!(retval = (derived == cls)))
+ retval = PyClass_IsSubclass(derived, cls);
+
+ return PyInt_FromLong(retval);
+}
+
+
static PyMethodDef builtin_methods[] = {
{"__import__", builtin___import__, 1},
{"abs", builtin_abs, 1},
{"input", builtin_input, 1},
{"intern", builtin_intern, 1},
{"int", builtin_int, 1},
+ {"isinstance", builtin_isinstance, 1},
+ {"issubclass", builtin_issubclass, 1},
{"len", builtin_len, 1},
{"list", builtin_list, 1},
{"locals", builtin_locals, 1},