@@ -17,7 +17,13 @@ namespace python {
1717/* *
1818 \brief plug a signal into another one.
1919*/
20- PyObject* plug (PyObject* /* self*/ , PyObject* args) {
20+ PyObject* plug (
21+ #if PY_MAJOR_VERSION >= 3
22+ PyObject* m, PyObject* args
23+ #else
24+ PyObject*, PyObject* args
25+ #endif
26+ ) {
2127 PyObject* objOut = NULL ;
2228 PyObject* objIn = NULL ;
2329 void * pObjOut;
@@ -40,10 +46,22 @@ PyObject* plug(PyObject* /*self*/, PyObject* args) {
4046
4147 pObjIn = PyCapsule_GetPointer (objIn, " dynamic_graph.Signal" );
4248 SignalBase<int >* signalIn = (SignalBase<int >*)pObjIn;
43- if (signalIn == NULL ) return NULL ;
49+ if (signalIn == NULL ) {
50+ struct module_state * st = GETSTATE (m);
51+ std::ostringstream oss;
52+ oss << " dgpy.plug in argument must be a dynamic_graph.Signal, not a " << PyCapsule_GetName (objIn);
53+ PyErr_SetString (st->dgpyError , oss.str ().c_str ());
54+ return NULL ;
55+ }
4456 pObjOut = PyCapsule_GetPointer (objOut, " dynamic_graph.Signal" );
4557 SignalBase<int >* signalOut = (SignalBase<int >*)pObjOut;
46- if (signalOut == NULL ) return NULL ;
58+ if (signalOut == NULL ) {
59+ struct module_state * st = GETSTATE (m);
60+ std::ostringstream oss;
61+ oss << " dgpy.plug out argument must be a dynamic_graph.Signal, not a " << PyCapsule_GetName (objOut);
62+ PyErr_SetString (st->dgpyError , oss.str ().c_str ());
63+ return NULL ;
64+ }
4765 std::ostringstream os;
4866
4967 try {
@@ -123,6 +141,14 @@ void initwrap(void)
123141 INITERROR;
124142 }
125143
144+ Py_XINCREF (st->dgpyError );
145+ if (PyModule_AddObject (module , " dgpyError" , st->dgpyError ) < 0 ) {
146+ Py_XDECREF (st->dgpyError );
147+ Py_CLEAR (st->dgpyError );
148+ Py_DECREF (module );
149+ return NULL ;
150+ }
151+
126152#if PY_MAJOR_VERSION >= 3
127153 return module ;
128154#endif
0 commit comments