From c6ba54641bcf5e44fa914476d72455a524ed172f Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Sun, 10 Apr 2005 22:24:13 +0000 Subject: added xcode project cleaner error reporting added generic numpy support (not working) use lock count instead of message queuing to avoid py->py messaging deadlock fixing strange gcc behavior fixes for maxmsp support for buffer objects (preliminary) fixed reference count bug use optimized version updates for DSP processing adjust pd and py files for correct argument passing more optimizations fixed numarray headers little restructuring svn path=/trunk/; revision=2708 --- externals/grill/py/pd/sig-1.pd | 8 +- externals/grill/py/pd/sig-2.pd | 46 +-- externals/grill/py/py.xcode/project.pbxproj | 516 ++++++++++++++++++++++++++++ externals/grill/py/scripts/sig.py | 14 +- externals/grill/py/source/clmeth.cpp | 2 +- externals/grill/py/source/main.cpp | 5 +- externals/grill/py/source/main.h | 1 + externals/grill/py/source/modmeth.cpp | 1 + externals/grill/py/source/py.cpp | 2 +- externals/grill/py/source/pybuffer.cpp | 46 +-- externals/grill/py/source/pydsp.cpp | 28 +- externals/grill/py/source/pyext.cpp | 7 +- 12 files changed, 612 insertions(+), 64 deletions(-) create mode 100644 externals/grill/py/py.xcode/project.pbxproj (limited to 'externals/grill') diff --git a/externals/grill/py/pd/sig-1.pd b/externals/grill/py/pd/sig-1.pd index 88d38e89..61342810 100644 --- a/externals/grill/py/pd/sig-1.pd +++ b/externals/grill/py/pd/sig-1.pd @@ -1,11 +1,11 @@ -#N canvas 52 147 659 311 12; +#N canvas 52 147 663 315 12; #X obj 56 234 dac~; #X msg 523 211 \; pd dsp 1; #X obj 524 184 loadbang; #X obj 194 114 hsl 128 15 0.01 1 1 1 empty empty gain -2 -6 0 8 -225271 --1 -1 0 1; +-1 -1 11200 1; #X obj 89 116 noise~; -#X msg 28 117 reload; +#X msg 21 116 reload; #X obj 16 13 cnv 15 600 40 empty empty py/pyext 10 22 0 24 -260818 -1 0; #X text 213 32 http://grrrr.org/ext; @@ -13,7 +13,7 @@ #X text 17 66 This demonstrates signal support. See the sig.py file. ; #X obj 191 131 nbx 5 14 0.001 1 1 0 empty empty empty 0 -6 0 10 -225271 --1 -1 0.001 256; +-1 -1 0.58047 256; #X msg 192 148 set gain \$1; #X text 123 202 message inlets \, outlets; #X text 123 217 signal inlets \, outlets; diff --git a/externals/grill/py/pd/sig-2.pd b/externals/grill/py/pd/sig-2.pd index 0e641600..699154d8 100644 --- a/externals/grill/py/pd/sig-2.pd +++ b/externals/grill/py/pd/sig-2.pd @@ -1,23 +1,23 @@ -#N canvas 56 67 659 311 12; -#X obj 121 246 dac~; -#X msg 523 211 \; pd dsp 1; -#X obj 524 184 loadbang; -#X obj 266 134 hsl 128 15 0 1 0 1 empty empty pan -2 -6 0 8 -225271 --1 -1 6500 1; -#X obj 92 126 noise~; -#X msg 31 127 reload; -#X obj 16 13 cnv 15 600 40 empty empty py/pyext 10 22 0 24 -260818 --1 0; -#X text 213 32 http://grrrr.org/ext; -#X text 213 16 Python script objects \, (C)2003-2005 Thomas Grill; -#X text 17 66 This demonstrates signal support. See the sig.py file. -; -#X obj 92 179 pyext~ 1 0 1 2 sig pan; -#X text 185 202 message inlets \, outlets; -#X text 183 218 signal inlets \, outlets; -#X connect 2 0 1 0; -#X connect 3 0 10 1; -#X connect 4 0 10 0; -#X connect 5 0 10 0; -#X connect 10 0 0 0; -#X connect 10 1 0 1; +#N canvas 56 67 663 315 12; +#X obj 121 246 dac~; +#X msg 523 211 \; pd dsp 1; +#X obj 524 184 loadbang; +#X obj 266 134 hsl 128 15 0 1 0 1 empty empty pan -2 -6 0 8 -225271 +-1 -1 4700 1; +#X obj 100 127 noise~; +#X msg 31 127 reload; +#X obj 16 13 cnv 15 600 40 empty empty py/pyext 10 22 0 24 -260818 +-1 0; +#X text 213 32 http://grrrr.org/ext; +#X text 213 16 Python script objects \, (C)2003-2005 Thomas Grill; +#X text 17 66 This demonstrates signal support. See the sig.py file. +; +#X obj 92 179 pyext~ 1 0 1 2 sig pan; +#X text 185 202 message inlets \, outlets; +#X text 183 218 signal inlets \, outlets; +#X connect 2 0 1 0; +#X connect 3 0 10 1; +#X connect 4 0 10 0; +#X connect 5 0 10 0; +#X connect 10 0 0 0; +#X connect 10 1 0 1; diff --git a/externals/grill/py/py.xcode/project.pbxproj b/externals/grill/py/py.xcode/project.pbxproj new file mode 100644 index 00000000..3bc57f99 --- /dev/null +++ b/externals/grill/py/py.xcode/project.pbxproj @@ -0,0 +1,516 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 39; + objects = { + 089C1669FE841209C02AAC07 = { + buildSettings = { + }; + buildStyles = ( + 4F9091AC011F3BD104CA0E50, + 4F9091AD011F3BD104CA0E50, + ); + hasScannedForEncodings = 1; + isa = PBXProject; + mainGroup = 089C166AFE841209C02AAC07; + projectDirPath = ""; + targets = ( + E90E52E508092505001341AC, + ); + }; + 089C166AFE841209C02AAC07 = { + children = ( + 08FB77ADFE841716C02AAC07, + 089C1671FE841209C02AAC07, + 19C28FB4FE9D528D11CA2CBB, + ); + isa = PBXGroup; + name = py; + refType = 4; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 = { + children = ( + E90E52D208091F79001341AC, + E90E521108091CA5001341AC, + E90E51FD08091A06001341AC, + E90E51FB080919EC001341AC, + ); + isa = PBXGroup; + name = "External Frameworks and Libraries"; + refType = 4; + sourceTree = ""; + }; + 08FB77ADFE841716C02AAC07 = { + children = ( + E90E51DB08091989001341AC, + E90E51DC08091989001341AC, + E90E51DD08091989001341AC, + E90E51DE08091989001341AC, + E90E51DF08091989001341AC, + E90E51E008091989001341AC, + E90E51E108091989001341AC, + E90E51E208091989001341AC, + E90E51E308091989001341AC, + E90E51E408091989001341AC, + E90E51E508091989001341AC, + E90E51E608091989001341AC, + E90E51E708091989001341AC, + E90E51E808091989001341AC, + E90E51E908091989001341AC, + E90E51EA08091989001341AC, + ); + isa = PBXGroup; + name = Source; + refType = 4; + sourceTree = ""; + }; +//080 +//081 +//082 +//083 +//084 +//190 +//191 +//192 +//193 +//194 + 19C28FB4FE9D528D11CA2CBB = { + children = ( + E90E52E608092505001341AC, + ); + isa = PBXGroup; + name = Products; + refType = 4; + sourceTree = ""; + }; +//190 +//191 +//192 +//193 +//194 +//4F0 +//4F1 +//4F2 +//4F3 +//4F4 + 4F9091AC011F3BD104CA0E50 = { + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "$(GCC_PREPROCESSOR_DEFINITIONS) FLEXT_DEBUG"; + OPTIMIZATION_CFLAGS = "-O0"; + ZERO_LINK = YES; + }; + isa = PBXBuildStyle; + name = Development; + }; + 4F9091AD011F3BD104CA0E50 = { + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + ZERO_LINK = NO; + }; + isa = PBXBuildStyle; + name = Deployment; + }; +//4F0 +//4F1 +//4F2 +//4F3 +//4F4 +//E90 +//E91 +//E92 +//E93 +//E94 + E90E51DB08091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = bound.cpp; + path = source/bound.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51DC08091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = clmeth.cpp; + path = source/clmeth.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51DD08091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = main.cpp; + path = source/main.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51DE08091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = main.h; + path = source/main.h; + refType = 4; + sourceTree = ""; + }; + E90E51DF08091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = modmeth.cpp; + path = source/modmeth.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E008091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = py.cpp; + path = source/py.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E108091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = pyargs.cpp; + path = source/pyargs.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E208091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = pybuffer.cpp; + path = source/pybuffer.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E308091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = pybuffer.h; + path = source/pybuffer.h; + refType = 4; + sourceTree = ""; + }; + E90E51E408091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = pydsp.cpp; + path = source/pydsp.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E508091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = pyext.cpp; + path = source/pyext.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E608091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = pyext.h; + path = source/pyext.h; + refType = 4; + sourceTree = ""; + }; + E90E51E708091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = pyprefix.h; + path = source/pyprefix.h; + refType = 4; + sourceTree = ""; + }; + E90E51E808091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = pysymbol.cpp; + path = source/pysymbol.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51E908091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = pysymbol.h; + path = source/pysymbol.h; + refType = 4; + sourceTree = ""; + }; + E90E51EA08091989001341AC = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = register.cpp; + path = source/register.cpp; + refType = 4; + sourceTree = ""; + }; + E90E51FB080919EC001341AC = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Python.framework; + path = /System/Library/Frameworks/Python.framework; + refType = 0; + sourceTree = ""; + }; + E90E51FD08091A06001341AC = { + isa = PBXFileReference; + lastKnownFileType = archive.ar; + name = "libflext-pd_t.a"; + path = "/usr/local/lib/libflext-pd_t.a"; + refType = 0; + sourceTree = ""; + }; + E90E521108091CA5001341AC = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = ApplicationServices.framework; + path = /System/Library/Frameworks/ApplicationServices.framework; + refType = 0; + sourceTree = ""; + }; + E90E52D208091F79001341AC = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = vecLib.framework; + path = /System/Library/Frameworks/vecLib.framework; + refType = 0; + sourceTree = ""; + }; + E90E52E208092505001341AC = { + buildActionMask = 2147483647; + files = ( + E90E52E908092581001341AC, + E90E52EA08092581001341AC, + E90E52EB08092581001341AC, + E90E52EC08092581001341AC, + E90E52ED08092581001341AC, + ); + isa = PBXHeadersBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + E90E52E308092505001341AC = { + buildActionMask = 2147483647; + files = ( + E90E52EE0809258A001341AC, + E90E52EF0809258A001341AC, + E90E52F00809258A001341AC, + E90E52F10809258A001341AC, + E90E52F20809258A001341AC, + E90E52F30809258A001341AC, + E90E52F40809258A001341AC, + E90E52F50809258A001341AC, + E90E52F60809258A001341AC, + E90E52F70809258A001341AC, + E90E52F80809258A001341AC, + ); + isa = PBXSourcesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + E90E52E408092505001341AC = { + buildActionMask = 2147483647; + files = ( + E90E535B08092593001341AC, + E90E535C08092593001341AC, + E90E535D08092593001341AC, + E90E535E08092593001341AC, + ); + isa = PBXFrameworksBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + E90E52E508092505001341AC = { + buildPhases = ( + E90E52E208092505001341AC, + E90E52E308092505001341AC, + E90E52E408092505001341AC, + ); + buildRules = ( + ); + buildSettings = { + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = pd_darwin; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_MODEL_CPU = G4; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = source/pyprefix.h; + GCC_PREPROCESSOR_DEFINITIONS = "FLEXT_SYS=2 FLEXT_THREADS"; + HEADER_SEARCH_PATHS = "/usr/local/include/flext $(PDApp)/src"; + INSTALL_PATH = "$(PDApp)/extra"; + LIBRARY_STYLE = BUNDLE; + OPTIMIZATION_CFLAGS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = "-bundle_loader $(PDApp)/bin/pd"; + OTHER_REZFLAGS = ""; + PRODUCT_NAME = py; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; + }; + dependencies = ( + ); + isa = PBXNativeTarget; + name = py; + productName = py; + productReference = E90E52E608092505001341AC; + productType = "com.apple.product-type.library.dynamic"; + }; + E90E52E608092505001341AC = { + explicitFileType = "compiled.mach-o.dylib"; + includeInIndex = 0; + isa = PBXFileReference; + path = py.pd_darwin; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; + E90E52E908092581001341AC = { + fileRef = E90E51DE08091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52EA08092581001341AC = { + fileRef = E90E51E308091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52EB08092581001341AC = { + fileRef = E90E51E608091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52EC08092581001341AC = { + fileRef = E90E51E708091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52ED08092581001341AC = { + fileRef = E90E51E908091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52EE0809258A001341AC = { + fileRef = E90E51DB08091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52EF0809258A001341AC = { + fileRef = E90E51DC08091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F00809258A001341AC = { + fileRef = E90E51DD08091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F10809258A001341AC = { + fileRef = E90E51DF08091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F20809258A001341AC = { + fileRef = E90E51E008091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F30809258A001341AC = { + fileRef = E90E51E108091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F40809258A001341AC = { + fileRef = E90E51E208091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F50809258A001341AC = { + fileRef = E90E51E408091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F60809258A001341AC = { + fileRef = E90E51E508091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F70809258A001341AC = { + fileRef = E90E51E808091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E52F80809258A001341AC = { + fileRef = E90E51EA08091989001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E535B08092593001341AC = { + fileRef = E90E51FB080919EC001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E535C08092593001341AC = { + fileRef = E90E51FD08091A06001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E535D08092593001341AC = { + fileRef = E90E521108091CA5001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + E90E535E08092593001341AC = { + fileRef = E90E52D208091F79001341AC; + isa = PBXBuildFile; + settings = { + }; + }; + }; + rootObject = 089C1669FE841209C02AAC07; +} diff --git a/externals/grill/py/scripts/sig.py b/externals/grill/py/scripts/sig.py index 23fc4c60..8aa1ce65 100644 --- a/externals/grill/py/scripts/sig.py +++ b/externals/grill/py/scripts/sig.py @@ -39,7 +39,10 @@ class gain(pyext._class): def _signal(self): # Multiply input vector by gain and copy to output - self._outvec(0)[:] = self._invec(0)*self.gain + try: + self._outvec(0)[:] = self._invec(0)*self.gain + except: + pass class gain2(pyext._class): @@ -48,6 +51,10 @@ class gain2(pyext._class): gain = 0 def _dsp(self): + if not self._arraysupport(): + print "No DSP support" + return False + # cache vectors in this scope self.invec = self._invec(0) self.outvec = self._outvec(0) @@ -56,6 +63,7 @@ class gain2(pyext._class): self._signal = self.signal1 else: self._signal = self.signal2 + return True def signal1(self): # Multiply signal vector in place @@ -78,6 +86,10 @@ class pan(pyext._class): self.fl = math.cos(x) self.fr = math.sin(x) + def _dsp(self): + # if _dsp is present it must return True to enable DSP + return pyext._arraysupport() + def _signal(self): # Multiply input vector by gain and copy to output iv = self._invec(0) diff --git a/externals/grill/py/source/clmeth.cpp b/externals/grill/py/source/clmeth.cpp index 267d2da9..3f856f57 100644 --- a/externals/grill/py/source/clmeth.cpp +++ b/externals/grill/py/source/clmeth.cpp @@ -80,7 +80,7 @@ PyObject* pyext::pyext__del__(PyObject *,PyObject *args) PyObject* pyext::pyext_setattr(PyObject *,PyObject *args) { - PyObject *self,*name,*val,*ret = NULL; + PyObject *self,*name,*val; if(!PyArg_ParseTuple(args, "OOO:test_foo", &self,&name,&val)) { // handle error ERRINTERNAL(); diff --git a/externals/grill/py/source/main.cpp b/externals/grill/py/source/main.cpp index 608ecdd7..fadb0173 100644 --- a/externals/grill/py/source/main.cpp +++ b/externals/grill/py/source/main.cpp @@ -160,10 +160,11 @@ FLEXT_LIB_SETUP(py,pybase::lib_setup) pybase::pybase() - : module(NULL),detach(0) + : module(NULL) #ifdef FLEXT_THREADS , shouldexit(false),thrcount(0),stoptick(0) #endif + , detach(0) { PyThreadState *state = PyLockSys(); Py_INCREF(module_obj); @@ -244,7 +245,7 @@ void pybase::m__doc(PyObject *obj) } else { // copy string before newline to temp buffer and post - int l = nl-s; + unsigned int l = nl-s; if(l >= sizeof(buf)) l = sizeof buf-1; strncpy(buf,s,l); // copy all but newline buf[l] = 0; diff --git a/externals/grill/py/source/main.h b/externals/grill/py/source/main.h index 538e577d..b828f47b 100644 --- a/externals/grill/py/source/main.h +++ b/externals/grill/py/source/main.h @@ -107,6 +107,7 @@ protected: static PyObject *py_priority(PyObject *,PyObject *args); #endif + static PyObject *py_arraysupport(PyObject *,PyObject *args); static PyObject *py_samplerate(PyObject *,PyObject *args); static PyObject *py_blocksize(PyObject *,PyObject *args); diff --git a/externals/grill/py/source/modmeth.cpp b/externals/grill/py/source/modmeth.cpp index 983176bf..33f0fc7b 100644 --- a/externals/grill/py/source/modmeth.cpp +++ b/externals/grill/py/source/modmeth.cpp @@ -19,6 +19,7 @@ PyMethodDef pybase::func_tbl[] = { "_priority", pybase::py_priority, METH_VARARGS,"Set priority of current thread" }, #endif + { "_arraysupport", pybase::py_arraysupport, METH_NOARGS,"Query Python array support" }, { "_samplerate", pybase::py_samplerate, METH_NOARGS,"Get system sample rate" }, { "_blocksize", pybase::py_blocksize, METH_NOARGS,"Get system block size" }, diff --git a/externals/grill/py/source/py.cpp b/externals/grill/py/source/py.cpp index 44d7a608..93309b37 100644 --- a/externals/grill/py/source/py.cpp +++ b/externals/grill/py/source/py.cpp @@ -122,7 +122,7 @@ void pyobj::Setup(t_classid c) } pyobj::pyobj(int argc,const t_atom *argv): - function(NULL),funname(NULL),withfunction(false) + funname(NULL),function(NULL),withfunction(false) { AddInAnything(2); AddOutAnything(); diff --git a/externals/grill/py/source/pybuffer.cpp b/externals/grill/py/source/pybuffer.cpp index 42e23557..0893b983 100644 --- a/externals/grill/py/source/pybuffer.cpp +++ b/externals/grill/py/source/pybuffer.cpp @@ -15,43 +15,47 @@ WARRANTIES, see the file, "license.txt," in this distribution. #if defined(PY_NUMERIC) #define PY_ARRAYS 1 - - #if FLEXT_OS == FLEXT_OS_MAC - #include - #else - #include - #endif #elif defined(PY_NUMARRAY) #define PY_ARRAYS 1 #define NA +#endif + +#ifdef PY_ARRAYS #ifdef NA #if FLEXT_OS == FLEXT_OS_MAC - #include + #include #else - #include + #include #endif + +static NumarrayType numtype = tAny; +inline bool arrsupport() { return numtype != tAny; } + #else #if FLEXT_OS == FLEXT_OS_MAC #include #else #include #endif + +static PyArray_TYPES numtype = PyArray_NOTYPE; +inline bool arrsupport() { return numtype != PyArray_NOTYPE; } #endif #endif +PyObject *pybase::py_arraysupport(PyObject *self,PyObject *args) +{ + PyObject *ret; #ifdef PY_ARRAYS - -#ifdef NA -static NumarrayType numtype = tAny; -inline bool arrsupport() { return numtype != tAny; } + ret = Py_True; #else -static PyArray_TYPES numtype = PyArray_NOTYPE; -inline bool arrsupport() { return numtype != PyArray_NOTYPE; } -#endif - + ret = Py_False; #endif + Py_INCREF(ret); + return ret; +} // PD defines a T_OBJECT symbol @@ -408,13 +412,13 @@ static PyObject *buffer_repeat(pySamplebuffer *self,int rep) static PySequenceMethods buffer_as_seq = { - (inquiry)buffer_length, /* inquiry sq_length; /* __len__ */ + (inquiry)buffer_length, /* inquiry sq_length; __len__ */ (binaryfunc)buffer_concat, /* __add__ */ (intargfunc)buffer_repeat, /* __mul__ */ - (intargfunc)buffer_item, /* intargfunc sq_item; /* __getitem__ */ - (intintargfunc)buffer_slice, /* intintargfunc sq_slice; /* __getslice__ */ - (intobjargproc)buffer_ass_item, /* intobjargproc sq_ass_item; /* __setitem__ */ - (intintobjargproc)buffer_ass_slice, /* intintobjargproc sq_ass_slice; /* __setslice__ */ + (intargfunc)buffer_item, /* intargfunc sq_item; __getitem__ */ + (intintargfunc)buffer_slice, /* intintargfunc sq_slice; __getslice__ */ + (intobjargproc)buffer_ass_item, /* intobjargproc sq_ass_item; __setitem__ */ + (intintobjargproc)buffer_ass_slice, /* intintobjargproc sq_ass_slice; __setslice__ */ }; static PyObject *buffer_iter(PyObject *obj) diff --git a/externals/grill/py/source/pydsp.cpp b/externals/grill/py/source/pydsp.cpp index 28d7d49b..cecefbe2 100644 --- a/externals/grill/py/source/pydsp.cpp +++ b/externals/grill/py/source/pydsp.cpp @@ -47,10 +47,12 @@ bool pydsp::DoInit() if(pyobj) { dspfun = PyObject_GetAttrString(pyobj,"_dsp"); // get ref - if(dspfun && !PyMethod_Check(dspfun)) { + if(!dspfun) + PyErr_Clear(); + else if(!PyMethod_Check(dspfun)) { Py_DECREF(dspfun); dspfun = NULL; - } + } } return true; } @@ -118,10 +120,13 @@ bool pydsp::CbDsp() NewBuffers(); + bool dodsp = true; if(dspfun) { PyObject *ret = PyObject_CallObject(dspfun,NULL); - if(ret) + if(ret) { + dodsp = PyObject_IsTrue(ret); Py_DECREF(ret); + } else { #ifdef FLEXT_DEBUG PyErr_Print(); @@ -135,11 +140,18 @@ bool pydsp::CbDsp() // _signal can be assigned in _dsp // optimizations may be done there to assign the right _signal version Py_XDECREF(sigfun); - sigfun = PyObject_GetAttrString(pyobj,"_signal"); // get ref - if(sigfun && !PyMethod_Check(sigfun)) { - Py_DECREF(sigfun); - sigfun = NULL; - } + + if(dodsp) { + sigfun = PyObject_GetAttrString(pyobj,"_signal"); // get ref + if(!sigfun) + PyErr_Clear(); + else if(!PyMethod_Check(sigfun)) { + Py_DECREF(sigfun); + sigfun = NULL; + } + } + else + sigfun = NULL; PyUnlock(state); return sigfun != NULL; diff --git a/externals/grill/py/source/pyext.cpp b/externals/grill/py/source/pyext.cpp index 2fd0ee22..eb58d1a0 100644 --- a/externals/grill/py/source/pyext.cpp +++ b/externals/grill/py/source/pyext.cpp @@ -97,7 +97,7 @@ void pyext::SetThis() { // remember the this pointer PyObject *th = PyLong_FromVoidPtr(this); - int ret = PyObject_SetAttrString(pyobj,"_this",th); // ref is taken + /*int ret =*/ PyObject_SetAttrString(pyobj,"_this",th); // ref is taken } @@ -105,10 +105,11 @@ PyObject *pyext::class_obj = NULL; PyObject *pyext::class_dict = NULL; pyext::pyext(int argc,const t_atom *argv,bool sig): - pyobj(NULL),pythr(NULL), + methname(NULL), + pyobj(NULL), inlets(-1),outlets(-1), siginlets(0),sigoutlets(0), - methname(NULL) + pythr(NULL) { #ifdef FLEXT_THREADS FLEXT_ADDTIMER(stoptmr,tick); -- cgit v1.2.1