]> granicus.if.org Git - python/commitdiff
In places where a ResObj is expected for PyArg_Parse and the object passed in isn...
authorJack Jansen <jack.jansen@cwi.nl>
Sun, 12 Dec 1999 22:57:29 +0000 (22:57 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sun, 12 Dec 1999 22:57:29 +0000 (22:57 +0000)
for appearance portability (and was needed anyway).

Mac/Modules/res/Resmodule.c
Mac/Modules/res/ressupport.py

index b5857e725bf4c78bc75a3d1720174bc5f1621af6..4f0f3c80174d40bb328dde53319deac8e860efa4 100644 (file)
@@ -74,6 +74,17 @@ ResObj_Convert(v, p_itself)
        PyObject *v;
        Handle *p_itself;
 {
+       if (!ResObj_Check(v))
+       {
+               PyObject *tmp;
+               if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) )
+               {
+                       *p_itself = ((ResourceObject *)tmp)->ob_itself;
+                       Py_DECREF(tmp);
+                       return 1;
+               }
+               PyErr_Clear();
+       }
        if (!ResObj_Check(v))
        {
                PyErr_SetString(PyExc_TypeError, "Resource required");
@@ -1388,17 +1399,26 @@ OptResObj_Convert(v, p_itself)
        PyObject *v;
        Handle *p_itself;
 {
+       PyObject *tmp;
+       
        if ( v == Py_None ) {
                *p_itself = NULL;
                return 1;
        }
-       if (!ResObj_Check(v))
+       if (ResObj_Check(v))
        {
-               PyErr_SetString(PyExc_TypeError, "Resource required");
-               return 0;
+               *p_itself = ((ResourceObject *)v)->ob_itself;
+               return 1;
        }
-       *p_itself = ((ResourceObject *)v)->ob_itself;
-       return 1;
+       /* If it isn't a resource yet see whether it is convertible */
+       if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) ) {
+               *p_itself = ((ResourceObject *)tmp)->ob_itself;
+               Py_DECREF(tmp);
+               return 1;
+       }
+       PyErr_Clear();
+       PyErr_SetString(PyExc_TypeError, "Resource required");
+       return 0;
 }
 
 
index 5d45f2ebd00dbe4018443e15a4fc7ca59bb4fa5f..c0466a7eb4532420a14bc99dac76a232ce313bd0 100644 (file)
@@ -44,17 +44,26 @@ OptResObj_Convert(v, p_itself)
        PyObject *v;
        Handle *p_itself;
 {
+       PyObject *tmp;
+       
        if ( v == Py_None ) {
                *p_itself = NULL;
                return 1;
        }
-       if (!ResObj_Check(v))
+       if (ResObj_Check(v))
        {
-               PyErr_SetString(PyExc_TypeError, "Resource required");
-               return 0;
+               *p_itself = ((ResourceObject *)v)->ob_itself;
+               return 1;
        }
-       *p_itself = ((ResourceObject *)v)->ob_itself;
-       return 1;
+       /* If it isn't a resource yet see whether it is convertible */
+       if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) ) {
+               *p_itself = ((ResourceObject *)tmp)->ob_itself;
+               Py_DECREF(tmp);
+               return 1;
+       }
+       PyErr_Clear();
+       PyErr_SetString(PyExc_TypeError, "Resource required");
+       return 0;
 }
 
 """
@@ -115,6 +124,20 @@ class ResDefiniton(GlobalObjectDefinition):
 
        def outputCheckNewArg(self):
                Output("if (itself == NULL) return PyMac_Error(resNotFound);")
+               
+       def outputCheckConvertArg(self):
+               # if it isn't a resource we may be able to coerce it
+               Output("if (!%s_Check(v))", self.prefix)
+               OutLbrace()
+               Output("PyObject *tmp;")
+               Output('if ( (tmp=PyObject_CallMethod(v, "as_Resource", "")) )')
+               OutLbrace()
+               Output("*p_itself = ((ResourceObject *)tmp)->ob_itself;")
+               Output("Py_DECREF(tmp);")
+               Output("return 1;")
+               OutRbrace()
+               Output("PyErr_Clear();")
+               OutRbrace()
 
        def outputGetattrHook(self):
                Output(getattrHookCode)