diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2005-01-11 04:59:27 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2005-01-11 04:59:27 +0000 |
commit | f1558e3a9297c6a4fefa9d399a7c9d067d859aa3 (patch) | |
tree | d06d5c6cb9badc428a2ed4d3352f7bad6bfbf1f7 /externals/grill/py/source/main.cpp | |
parent | ead9ba14ab569e5644e2deeffc436c31b53ea141 (diff) |
added symbol type
fixed incorrect unbinding of instance methods
fixes for symbol type
little restructuring
svn path=/trunk/; revision=2489
Diffstat (limited to 'externals/grill/py/source/main.cpp')
-rw-r--r-- | externals/grill/py/source/main.cpp | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/externals/grill/py/source/main.cpp b/externals/grill/py/source/main.cpp index 636435b3..33200c8b 100644 --- a/externals/grill/py/source/main.cpp +++ b/externals/grill/py/source/main.cpp @@ -56,6 +56,8 @@ void py::FreeThreadState() #endif +void initsymbol(); + void py::lib_setup() { post(""); @@ -76,8 +78,7 @@ void py::lib_setup() Py_Initialize(); #ifdef FLEXT_DEBUG -// Py_DebugFlag = 1; - Py_VerboseFlag = 1; +// Py_VerboseFlag = 1; #endif #ifdef FLEXT_THREADS @@ -99,6 +100,18 @@ void py::lib_setup() PyModule_AddStringConstant(module_obj,"__doc__",(char *)py_doc); + // add symbol type + initsymbol(); + PyModule_AddObject(module_obj,"Symbol",(PyObject *)&pySymbol_Type); + + // pre-defined symbols + PyModule_AddObject(module_obj,"_s_",(PyObject *)pySymbol__); + PyModule_AddObject(module_obj,"_s_bang",(PyObject *)pySymbol_bang); + PyModule_AddObject(module_obj,"_s_list",(PyObject *)pySymbol_list); + PyModule_AddObject(module_obj,"_s_symbol",(PyObject *)pySymbol_symbol); + PyModule_AddObject(module_obj,"_s_float",(PyObject *)pySymbol_float); + PyModule_AddObject(module_obj,"_s_int",(PyObject *)pySymbol_int); + // redirect stdout PyObject* py_out; py_out = Py_InitModule("stdout", StdOut_Methods); @@ -124,6 +137,16 @@ PyObject *py::module_obj = NULL; PyObject *py::module_dict = NULL; +void py::Setup(t_classid c) +{ + FLEXT_CADDMETHOD_(c,0,"doc",m_doc); + FLEXT_CADDMETHOD_(c,0,"dir",m_dir); +#ifdef FLEXT_THREADS + FLEXT_CADDATTR_VAR1(c,"detach",detach); + FLEXT_CADDMETHOD_(c,0,"stop",m_stop); +#endif +} + py::py(): module(NULL), detach(0),shouldexit(false),thrcount(0), @@ -150,7 +173,7 @@ py::~py() // Wait forever post("%s - Waiting for thread termination!",thisName()); - while(thrcount) Sleep(0.2f); + while(thrcount) Sleep(0.01f); post("%s - Okay, all threads have terminated",thisName()); } @@ -198,7 +221,7 @@ void py::m__doc(PyObject *obj) PyObject *docf = PyDict_GetItemString(obj,"__doc__"); // borrowed!!! if(docf && PyString_Check(docf)) { post(""); - const char *s = PyString_AsString(docf); + const char *s = PyString_AS_STRING(docf); // FIX: Python doc strings can easily be larger than 1k characters // -> split into separate lines @@ -226,6 +249,10 @@ void py::m__doc(PyObject *obj) } } +void py::m_click() +{ + // this should once open the editor.... +} void py::SetArgs(int argc,const t_atom *argv) { @@ -251,8 +278,7 @@ void py::ImportModule(const char *name) if(!name) return; module = PyImport_ImportModule((char *)name); // increases module_obj ref count by one - if (!module) { - + if(!module) { PyErr_Print(); dict = NULL; } @@ -264,7 +290,7 @@ void py::UnimportModule() { if(!module) return; - assert(dict && module_obj && module_dict); + FLEXT_ASSERT(dict && module_obj && module_dict); Py_DECREF(module); @@ -343,17 +369,12 @@ void py::AddToPath(const char *dir) if(dir && *dir) { PyObject *pobj = PySys_GetObject("path"); if(pobj && PyList_Check(pobj)) { - int i,n = PyList_Size(pobj); - for(i = 0; i < n; ++i) { - PyObject *pt = PyList_GetItem(pobj,i); // borrowed reference - if(PyString_Check(pt) && !strcmp(dir,PyString_AS_STRING(pt))) break; - } - if(i == n) { // string is not yet existent in path - PyObject *ps = PyString_FromString(dir); - PyList_Append(pobj,ps); - } + PyObject *ps = PyString_FromString(dir); + if(!PySequence_Contains(pobj,ps)) + PyList_Append(pobj,ps); // makes new reference + Py_DECREF(ps); } - PySys_SetObject("path",pobj); + PySys_SetObject("path",pobj); // steals reference to pobj } } @@ -378,9 +399,10 @@ PyObject* py::StdOut_Write(PyObject* self, PyObject* args) // should always be a tuple FLEXT_ASSERT(PyTuple_Check(args)); - int sz = PyTuple_Size(args); + const int sz = PyTuple_GET_SIZE(args); + for(int i = 0; i < sz; ++i) { - PyObject *val = PyTuple_GetItem(args,i); // borrowed reference + PyObject *val = PyTuple_GET_ITEM(args,i); // borrowed reference PyObject *str = PyObject_Str(val); // new reference char *cstr = PyString_AS_STRING(str); char *lf = strchr(cstr,'\n'); |