/[ascend]/trunk/models/johnpye/extpy/extpy.c
ViewVC logotype

Diff of /trunk/models/johnpye/extpy/extpy.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 873 by johnpye, Thu Oct 5 14:51:49 2006 UTC revision 874 by johnpye, Thu Oct 5 15:13:22 2006 UTC
# Line 79  ExtMethodRun extpy_invokemethod; Line 79  ExtMethodRun extpy_invokemethod;
79      argument to Python?      argument to Python?
80  */  */
81  int extpy_invokemethod(struct Instance *context, struct gl_list_t *args, void *user_data){  int extpy_invokemethod(struct Instance *context, struct gl_list_t *args, void *user_data){
82      PyObject *fn;      PyObject *fn, *arglist, *result;
83      /* cast user data to PyObject pointer */      /* cast user data to PyObject pointer */
84    
85        CONSOLE_DEBUG("USER_DATA IS AT %p",user_data);
86    
87      fn = (PyObject *) user_data;      fn = (PyObject *) user_data;
88    
89      ERROR_REPORTER_HERE(ASC_USER_NOTE,"RUNNING PYTHON METHOD");      ERROR_REPORTER_HERE(ASC_USER_NOTE,"RUNNING PYTHON METHOD");
90      CONSOLE_DEBUG("RUNNING PYTHON METHOD...");      CONSOLE_DEBUG("RUNNING PYTHON METHOD...");
91      return 1;  
92        PyErr_Clear();
93    
94        if(!PyCallable_Check(fn)){
95            ERROR_REPORTER_HERE(ASC_PROG_ERR,"user_data is not a PyCallable");
96            return 1;
97        }
98    
99        arglist = Py_BuildValue("(i)", 666);
100        result = PyEval_CallObject(fn, arglist);
101        Py_DECREF(arglist);
102        if(PyErr_Occurred()){
103            ERROR_REPORTER_HERE(ASC_PROG_ERR,"Failed running python method");
104            return 1;
105        }
106    
107        return 0;
108  }  }
109    
110  /*------------------------------------------------------------------------------  /*------------------------------------------------------------------------------
# Line 112  static PyObject *extpy_registermethod(Py Line 131  static PyObject *extpy_registermethod(Py
131          PyErr_SetString(PyExc_TypeError,"parameter must be callable");          PyErr_SetString(PyExc_TypeError,"parameter must be callable");
132          return NULL;          return NULL;
133      }      }
     Py_INCREF(fn);  
134    
135      CONSOLE_DEBUG("FOUND FN=%p",fn);      CONSOLE_DEBUG("FOUND FN=%p",fn);
136    
# Line 133  static PyObject *extpy_registermethod(Py Line 151  static PyObject *extpy_registermethod(Py
151          CONSOLE_DEBUG("DOCSTRING: %s",cdocstring);          CONSOLE_DEBUG("DOCSTRING: %s",cdocstring);
152      }      }
153    
154      res = CreateUserFunctionMethod(cname,extpy_invokemethod,nargs,cdocstring,fn);      res = CreateUserFunctionMethod(cname,extpy_invokemethod,nargs,cdocstring,(void *)fn);
155        CONSOLE_DEBUG("PYTHON FUNCTION IS AT %p",fn);
156        Py_INCREF(fn);
157        CONSOLE_DEBUG("PYTHON FUNCTION IS AT %p",fn);
158    
159      CONSOLE_DEBUG("EXTPY INVOKER IS AT %p",extpy_invokemethod);      CONSOLE_DEBUG("EXTPY INVOKER IS AT %p",extpy_invokemethod);
160    

Legend:
Removed from v.873  
changed lines
  Added in v.874

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22