From 27992fb1ac4b86097a3fefa3b13f4d150a44aa03 Mon Sep 17 00:00:00 2001 From: mescalinum Date: Tue, 15 Nov 2011 07:49:20 +0000 Subject: fixed bug 3436716 svn path=/trunk/externals/loaders/tclpd/; revision=15748 --- tcl_class.c | 17 ++++++++++++++++- tcl_loader.c | 2 +- tclpd.h | 1 - 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/tcl_class.c b/tcl_class.c index 46870e8..fc4136d 100644 --- a/tcl_class.c +++ b/tcl_class.c @@ -94,10 +94,25 @@ t_tcl * tclpd_new(t_symbol *classsym, int ac, t_atom *at) { // lookup in class table const char *name = classsym->s_name; t_class *qlass = class_table_get(name); + while(!qlass) { + // try progressively skipping namespace/ prefixes (bug 3436716) + name = strchr(name, '/'); + if(!name || !*++name) break; + qlass = class_table_get(name); + } + if(!qlass) { + error("tclpd: class not found: %s", name); + return NULL; + } t_tcl *x = (t_tcl *)pd_new(qlass); + if(!x) { + error("tclpd: failed to create object of class %s", name); + return NULL; + } + + /* used for numbering proxy inlets: */ x->ninlets = 1 /* qlass->c_firstin ??? */; - x->x_glist = (t_glist *)canvas_getcurrent(); x->source_file = (char *)hashtable_get(source_table, name); if(!x->source_file) { diff --git a/tcl_loader.c b/tcl_loader.c index 8d07bf7..a572c43 100644 --- a/tcl_loader.c +++ b/tcl_loader.c @@ -69,7 +69,7 @@ found: verbose(-1, "tclpd loader: loading tcl file %s", filename); result = Tcl_EvalFile(tclpd_interp, filename); if(result == TCL_OK) { - source_table_add(objectname, filename); + source_table_add(classname, filename); verbose(0, "tclpd loader: loaded %s", filename); } else { error("tclpd loader: error trying to load %s", filename); diff --git a/tclpd.h b/tclpd.h index 1fddff7..20afc83 100644 --- a/tclpd.h +++ b/tclpd.h @@ -17,7 +17,6 @@ typedef struct _t_tcl { t_object o; int ninlets; /* used for proxy inlet count */ - t_glist *x_glist; char *source_file; -- cgit v1.2.1