aboutsummaryrefslogtreecommitdiff
path: root/externals
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-12-12 00:18:42 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-12-12 00:18:42 +0000
commit8ac2ac31abb94663c66596ae2ceb55a6c778b972 (patch)
tree8006dcf30cffa60c0a4f4429c8f772ec055ffba9 /externals
parentd1297bad7d860014ff6a4aa3ce66002125c7d0ac (diff)
__str__ method for pyext, to enable print self calls
added message bundle functionality (pyext.Bundle class) enable symbol binding for all callables (not only functions and methods) small optimizations and fixes enable optimization of Python code in reease build _isthreaded is now a data member instead of a method more safety for calls where association python-pd has already been removed fixes for pthreads V2 svn path=/trunk/; revision=4190
Diffstat (limited to 'externals')
-rw-r--r--externals/grill/py/py.vcproj10
-rw-r--r--externals/grill/py/readme.txt1
-rw-r--r--externals/grill/py/source/clmeth.cpp4
-rw-r--r--externals/grill/py/source/modmeth.cpp32
-rw-r--r--externals/grill/py/source/pybase.cpp5
-rw-r--r--externals/grill/py/source/pybase.h1
-rw-r--r--externals/grill/py/source/pyext.h4
-rw-r--r--externals/grill/py/source/pysymbol.cpp4
8 files changed, 48 insertions, 13 deletions
diff --git a/externals/grill/py/py.vcproj b/externals/grill/py/py.vcproj
index 50d989c8..25b2ec33 100644
--- a/externals/grill/py/py.vcproj
+++ b/externals/grill/py/py.vcproj
@@ -85,7 +85,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="C:\data\prog\packs\pthreads\include;c:\programme\audio\pd\src;..\flext\source;c:\programme\prog\Python24\include"
+ AdditionalIncludeDirectories="C:\data\prog\packs\pthreads\include;&quot;c:\data\pd\pd-cvs\src&quot;;..\flext\source;c:\programme\prog\Python24\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PY_EXPORTS;FLEXT_SYS=2;FLEXT_THREADS;PY_NUMARRAY"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -105,7 +105,7 @@
OutputFile="$(outdir)/py.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
- AdditionalLibraryDirectories="&quot;C:\data\prog\packs\Python-2.4\PCbuild&quot;;C:\data\prog\packs\pthreads\lib;c:/programme/audio/pd/bin"
+ AdditionalLibraryDirectories="&quot;C:\data\prog\packs\Python-2.4\PCbuild&quot;;C:\data\prog\packs\pthreads\lib;&quot;c:\data\pd\pd-cvs\bin&quot;"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(outdir)/py.pdb"
SubSystem="2"
@@ -1049,6 +1049,12 @@
RelativePath=".\source\pybase.h">
</File>
<File
+ RelativePath=".\source\pybundle.cpp">
+ </File>
+ <File
+ RelativePath=".\source\pybundle.h">
+ </File>
+ <File
RelativePath="source\register.cpp">
<FileConfiguration
Name="PD Debug|Win32">
diff --git a/externals/grill/py/readme.txt b/externals/grill/py/readme.txt
index 5ca1876e..31f4d2a3 100644
--- a/externals/grill/py/readme.txt
+++ b/externals/grill/py/readme.txt
@@ -114,6 +114,7 @@ Version history:
- ADD: __str__ method for pyext, to enable print self calls
- ADD: enable symbol binding for all callables (not only functions and methods)
- ADD: Buffer.resize(frames,keep=1,zero=1) method
+- ADD: py.Bundle class to support flext message bundles
0.2.0:
- ADD: handling of Python threads
diff --git a/externals/grill/py/source/clmeth.cpp b/externals/grill/py/source/clmeth.cpp
index c8d38f81..be003291 100644
--- a/externals/grill/py/source/clmeth.cpp
+++ b/externals/grill/py/source/clmeth.cpp
@@ -210,10 +210,10 @@ PyObject *pyext::pyext_outlet(PyObject *,PyObject *args)
Py_INCREF(val);
}
else
- val = PySequence_GetSlice(args,2,sz); // new ref
+ val = PyTuple_GetSlice(args,2,sz); // new ref
#endif
- int o = PyInt_AsLong(outl);
+ int o = PyInt_AS_LONG(outl);
if(o >= 1 && o <= ext->Outlets()) {
// offset outlet by signal outlets
o += ext->sigoutlets;
diff --git a/externals/grill/py/source/modmeth.cpp b/externals/grill/py/source/modmeth.cpp
index 44299b0c..a611690f 100644
--- a/externals/grill/py/source/modmeth.cpp
+++ b/externals/grill/py/source/modmeth.cpp
@@ -118,6 +118,7 @@ PyObject *pybase::py_send(PyObject *,PyObject *args)
) {
PyObject *val;
+#if 0
bool tp =
sz == 2 &&
PySequence_Check(
@@ -126,28 +127,47 @@ PyObject *pybase::py_send(PyObject *,PyObject *args)
if(!tp)
val = PySequence_GetSlice(args,1,sz); // new ref
+#else
+ if(sz == 2) {
+ val = PyTuple_GET_ITEM(args,1); // borrow reference
+ Py_INCREF(val);
+ }
+ else
+ val = PySequence_GetSlice(args,1,sz); // new ref
+#endif
AtomListStatic<16> lst;
const t_symbol *sym = GetPyArgs(lst,val);
+ Py_DECREF(val);
+
if(sym) {
bool ok = Forward(recv,sym,lst.Count(),lst.Atoms());
#ifdef FLEXT_DEBUG
if(!ok)
post("py/pyext - Receiver doesn't exist");
#endif
+ Py_INCREF(Py_None);
+ return Py_None;
}
- else if(PyErr_Occurred())
+/*
+ else if(PyErr_Occurred())
PyErr_Print();
else
post("py/pyext - No data to send");
-
- if(!tp) Py_DECREF(val);
+*/
+ else {
+ FLEXT_ASSERT(PyErr_Occurred());
+ return NULL;
+ }
}
+/*
else
post("py/pyext - Send name is invalid");
-
- Py_INCREF(Py_None);
- return Py_None;
+*/
+ else {
+ PyErr_SetString(PyExc_ValueError,"py/pyext - Send name is invalid");
+ return NULL;
+ }
}
#ifdef FLEXT_THREADS
diff --git a/externals/grill/py/source/pybase.cpp b/externals/grill/py/source/pybase.cpp
index bdc76099..f20328d8 100644
--- a/externals/grill/py/source/pybase.cpp
+++ b/externals/grill/py/source/pybase.cpp
@@ -94,6 +94,7 @@ const t_symbol *pybase::sym_response = NULL;
void initsymbol();
void initsamplebuffer();
+void initbundle();
void pybase::lib_setup()
{
@@ -186,6 +187,10 @@ void pybase::lib_setup()
initsamplebuffer();
PyModule_AddObject(module_obj,"Buffer",(PyObject *)&pySamplebuffer_Type);
+ // add message bundle type
+ initbundle();
+ PyModule_AddObject(module_obj,"Bundle",(PyObject *)&pyBundle_Type);
+
// -------------------------------------------------------------
FLEXT_SETUP(pyobj);
diff --git a/externals/grill/py/source/pybase.h b/externals/grill/py/source/pybase.h
index 59a1d062..3645a7af 100644
--- a/externals/grill/py/source/pybase.h
+++ b/externals/grill/py/source/pybase.h
@@ -14,6 +14,7 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#include "main.h"
#include "pysymbol.h"
#include "pybuffer.h"
+#include "pybundle.h"
class pybase
: public flext
diff --git a/externals/grill/py/source/pyext.h b/externals/grill/py/source/pyext.h
index 672fe5f1..4696c72c 100644
--- a/externals/grill/py/source/pyext.h
+++ b/externals/grill/py/source/pyext.h
@@ -44,6 +44,8 @@ public:
int Inlets() const { return inlets; }
int Outlets() const { return outlets; }
+ static pyext *GetThis(PyObject *self);
+
protected:
virtual bool Init();
@@ -87,8 +89,6 @@ protected:
virtual PyObject *GetSig(int ix,bool in);
- static pyext *GetThis(PyObject *self);
-
private:
static void Setup(t_classid);
diff --git a/externals/grill/py/source/pysymbol.cpp b/externals/grill/py/source/pysymbol.cpp
index be7d3139..502606af 100644
--- a/externals/grill/py/source/pysymbol.cpp
+++ b/externals/grill/py/source/pysymbol.cpp
@@ -36,8 +36,10 @@ static int symbol_init(PyObject *self, PyObject *args, PyObject *kwds)
((pySymbol *)self)->sym = pySymbol_AS_SYMBOL(arg);
else if(PyString_Check(arg))
((pySymbol *)self)->sym = flext::MakeSymbol(PyString_AS_STRING(arg));
- else
+ else {
+ PyErr_SetString(PyExc_TypeError,"string or symbol argument expected");
ret = -1;
+ }
Py_DECREF(arg);
return ret;