From 1ae6ddc0369982f0d7b6c9b2e9b62a750f99c7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Gr=C3=A4f?= <aggraef@gmail.com> Date: Sat, 18 Feb 2017 19:10:41 +0100 Subject: [PATCH] Backport rev. 5a58ca2b by msp from vanilla: patch 1990599 - allow recursive calls of new_anything(). --- pd/src/m_class.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pd/src/m_class.c b/pd/src/m_class.c index 85ca52349..f5926e98e 100644 --- a/pd/src/m_class.c +++ b/pd/src/m_class.c @@ -599,6 +599,7 @@ static t_symbol *addfileextent(t_symbol *s) return (gensym(namebuf)); } +#define MAXOBJDEPTH 1000 static int tryingalready; void canvas_popabstraction(t_canvas *x); @@ -613,14 +614,17 @@ int pd_setloadingabstraction(t_symbol *sym); doesn't know. Pd tries to load it as an extern, then as an abstraction. */ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv) { - if (tryingalready) return; + if (tryingalready>MAXOBJDEPTH){ + error("maximum object loading depth %d reached", MAXOBJDEPTH); + return; + } newest = 0; class_loadsym = s; if (sys_load_lib(canvas_getcurrent(), s->s_name)) { - tryingalready = 1; + tryingalready++; typedmess(dummy, s, argc, argv); - tryingalready = 0; + tryingalready--; return; } class_loadsym = 0; -- GitLab