Mercurial > fife-parpg
view engine/swigwrappers/python/fife.i.templ @ 164:5b04a7d3ded6
typo fix
some missing event (de)registrations
ability to capture one event multiple times (instead of only having one slot, we have groups and each group has an own slot, the default group is "default" so we are backward compatible
author | spq@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Wed, 15 Oct 2008 14:57:04 +0000 |
parents | 98541d3b9220 |
children | 10a5f9e6c03f |
line wrap: on
line source
%module(directors="1") fife %include "std_string.i" %include "std_vector.i" %include "std_pair.i" %include "std_list.i" %include "std_map.i" %include "std_set.i" %include "typemaps.i" %include "exception.i" /** * Some materials to understand exception handling: * * Basics about python exceptions: * http://docs.python.org/tut/node10.html * Python exception handling in C APIs * http://docs.python.org/api/exceptions.html * http://docs.python.org/api/exceptionHandling.html * SWIG exception handling * http://www.swig.org/Doc1.3/Customization.html#exception * http://www.swig.org/Doc1.3/SWIGPlus.html#SWIGPlus_exception_specifications * http://www.swig.org/Doc1.3/Python.html#Python_nn36 */ %feature("autodoc", "1"); // 0 == no param types, 1 == show param types namespace std { %template(StringVector) vector<std::string>; %template(UintVector) vector<unsigned int>; %template(IntVector) vector<int>; %template(FloatVector) vector<float>; %template(DoubleVector) vector<double>; %template(BoolVector) vector<bool>; %template(UintUintPair) pair<unsigned int, unsigned int>; %template(UintUintPairVector) vector<std::pair<unsigned int, unsigned int> >; }; %{ #include "util/base/exception.h" static void handleDirectorException() { PyObject* exception = NULL; PyObject* value = NULL; PyObject* traceback = NULL; PyErr_Fetch(&exception, &value, &traceback); PyErr_NormalizeException(&exception, &value, &traceback); if (exception) { PySys_SetObject("last_type", exception); PySys_SetObject("last_value", value); PySys_SetObject("last_traceback", traceback); PyObject* d = PyModule_GetDict (PyImport_AddModule ("__main__")); PyDict_SetItemString(d, "exc_type", exception); PyDict_SetItemString(d, "exc_value", value); PyDict_SetItemString(d, "exc_traceback", traceback ? traceback : Py_None); char buf[1024]; sprintf (buf, "\n\ import traceback\n\ s = \"\"\n\ for filename, line, function, text in traceback.extract_tb(exc_traceback):\n\ s = s + ' File \"%%s\", line %%d, in %%s\\n %%s' %% (filename, line, function, text)\n\ if s[-1] != '\\n': s = s + '\\n'\n\ for l in traceback.format_exception_only(exc_type, exc_value):\n\ s = s + ' ' + l\n\ if s[-1] != '\\n': s = s + '\\n'\n\ print s\n\ "); PyObject* e = PyRun_String(buf, Py_file_input, d, d); if (!e) { PyErr_Print(); } Py_XDECREF(e); Py_XDECREF(d); Py_XDECREF(exception); Py_XDECREF(value); Py_XDECREF(traceback); } } #define _FIFE_EXC_HANDLER(_fife_exc_type, _converted_type) \ catch (FIFE::_fife_exc_type& _e) { \ PyErr_Clear(); \ SWIG_exception(_converted_type, _e.getMessage().c_str()); \ } #define _FIFE_DIRECTOR_EXC_HANDLER() \ catch (Swig::DirectorException &_e) { \ PyErr_Clear(); \ SWIG_exception(SWIG_RuntimeError, "Catched director exception"); \ } %} %feature("director:except") { if ($$error != NULL) { handleDirectorException(); throw Swig::DirectorMethodException(); } } %exception { try { $$action } _FIFE_DIRECTOR_EXC_HANDLER() _FIFE_EXC_HANDLER(Exception, SWIG_RuntimeError) } $inclusions %include engine/swigwrappers/python/extensions.i.templ