diff --git a/pd/src/d_ugen.c b/pd/src/d_ugen.c index 55213566ec0aa6c3a209036f29d06630ca786588..da6c94aebe29b5cf588294741adb26a934e54067 100644 --- a/pd/src/d_ugen.c +++ b/pd/src/d_ugen.c @@ -686,15 +686,9 @@ void ugen_connect(t_dspcontext *dc, t_object *x1, int outno, t_object *x2, error("object with signal outlets but no DSP method?"); /* check if it's a "text" (i.e., object wasn't created) - if so fail silently */ - t_text *t2 = (t_text *)x2; - // The following only happens if the DAC is on while connecting - // objects. If this is not yet initialized object we don't - // really know if its inlet is signal or not, so we don't post - // the error. - if (pd_class(&t2->te_pd) != text_class || - (pd_class(&t2->te_pd) == text_class && t2->te_type == T_TEXT)) - pd_error(u1->u_obj, - "signal outlet connect to nonsignal inlet (ignored)"); + else if (!(x2 && (pd_class(&x2->ob_pd) == text_class))) + pd_error(u1->u_obj, + "signal outlet connect to nonsignal inlet (ignored)"); return; } if (sigoutno < 0 || sigoutno >= u1->u_nout || siginno >= u2->u_nin) @@ -743,7 +737,7 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u) is set. We don't yet know if a subcanvas will be "blocking" so there we delay new signal creation, which will be handled by calling signal_setborrowed in the ugen_done_graph routine below. */ - int nonewsigs = (class == canvas_class || + int nonewsigs = (class == canvas_class || ((class == vinlet_class) && !(dc->dc_reblock))); /* when we encounter a subcanvas or a signal outlet, suppress freeing the input signals as they may be "borrowed" for the super or sub diff --git a/pd/src/m_obj.c b/pd/src/m_obj.c index e8632a3d9f372a3914e8a8e10640f28bcea9131b..ad9d6c6cf68bf05dbd84ca03c900c2fc59902536 100644 --- a/pd/src/m_obj.c +++ b/pd/src/m_obj.c @@ -691,10 +691,12 @@ int obj_siginletindex(t_object *x, int m) { int n = 0; t_inlet *i; - if (x->ob_pd->c_firstin && x->ob_pd->c_floatsignalin) + if (x->ob_pd->c_firstin) { - if (!m--) return (0); - n++; + if (!m--) + return (0); + if (x->ob_pd->c_floatsignalin) + n++; } for (i = x->ob_inlet; i; i = i->i_next, m--) if (i->i_symfrom == &s_signal) @@ -750,21 +752,18 @@ int obj_issignaloutlet(t_object *x, int m) t_float *obj_findsignalscalar(t_object *x, int m) { - int n = 0; t_inlet *i; if (x->ob_pd->c_firstin && x->ob_pd->c_floatsignalin) { if (!m--) return (x->ob_pd->c_floatsignalin > 0 ? (t_float *)(((char *)x) + x->ob_pd->c_floatsignalin) : 0); - n++; } - for (i = x->ob_inlet; i; i = i->i_next, m--) + for (i = x->ob_inlet; i; i = i->i_next) if (i->i_symfrom == &s_signal) { - if (m == 0) + if (m-- == 0) return (&i->i_un.iu_floatsignalvalue); - n++; } return (0); }