[PD-cvs] pd/src m_class.c,1.3.4.7.2.22.2.2,1.3.4.7.2.22.2.3
Mathieu Bouchard
matju at users.sourceforge.net
Fri Dec 8 05:51:30 CET 2006
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13347
Modified Files:
Tag: desiredata
m_class.c
Log Message:
shorter code
Index: m_class.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_class.c,v
retrieving revision 1.3.4.7.2.22.2.2
retrieving revision 1.3.4.7.2.22.2.3
diff -C2 -d -r1.3.4.7.2.22.2.2 -r1.3.4.7.2.22.2.3
*** m_class.c 5 Dec 2006 23:38:22 -0000 1.3.4.7.2.22.2.2
--- m_class.c 8 Dec 2006 04:51:28 -0000 1.3.4.7.2.22.2.3
***************
*** 5,9 ****
#define PD_CLASS_DEF
#include "desire.h"
- #include "m_imp.h"
#include "s_stuff.h"
#include <stdlib.h>
--- 5,8 ----
***************
*** 743,800 ****
int narg = 0;
t_pd *bonzo;
!
! /* check for messages that are handled by fixed slots in the class
! structure. We don't catch "pointer" though so that sending "pointer"
! to pd_objectmaker doesn't require that we supply a pointer value. */
! if (s == &s_float)
! {
! if (!argc) (*c->c_floatmethod)(x, 0.);
! else if (argv->a_type == A_FLOAT)
! (*c->c_floatmethod)(x, argv->a_w.w_float);
else goto badarg;
return;
}
! if (s == &s_bang)
! {
! (*c->c_bangmethod)(x);
return;
}
! if (s == &s_list)
! {
! (*c->c_listmethod)(x, s, argc, argv);
return;
}
! if (s == &s_symbol)
! {
! if (argc && argv->a_type == A_SYMBOL)
! (*c->c_symbolmethod)(x, argv->a_w.w_symbol);
! else
! (*c->c_symbolmethod)(x, &s_);
return;
}
! for (i = c->c_nmethod, m = c->c_methods; i--; m++)
! if (m->me_name == s)
! {
wp = m->me_arg;
! if (*wp == A_GIMME)
! {
! if (x == &pd_objectmaker)
! pd_set_newest(((t_newgimme)(m->me_fun))(s, argc, argv));
! else (*((t_messgimme)(m->me_fun)))(x, s, argc, argv);
return;
}
if (argc > MAXPDARG) argc = MAXPDARG;
if (x != &pd_objectmaker) *(ap++) = (t_int)x, narg++;
! while (wanttype = *wp++)
! {
! switch (wanttype)
! {
case A_POINTER:
if (!argc) goto badarg;
! else
! {
! if (argv->a_type == A_POINTER)
! *ap = (t_int)(argv->a_w.w_gpointer);
! else goto badarg;
argc--;
argv++;
--- 742,782 ----
int narg = 0;
t_pd *bonzo;
! /* check for messages that are handled by fixed slots in the class
! structure. We don't catch "pointer" though so that sending "pointer"
! to pd_objectmaker doesn't require that we supply a pointer value. */
! if (s == &s_float) {
! if (!argc) c->c_floatmethod(x, 0.);
! else if (argv->a_type == A_FLOAT) c->c_floatmethod(x, argv->a_w.w_float);
else goto badarg;
return;
}
! if (s == &s_bang) {
! c->c_bangmethod(x);
return;
}
! if (s == &s_list) {
! c->c_listmethod(x, s, argc, argv);
return;
}
! if (s == &s_symbol) {
! c->c_symbolmethod(x, argc && argv->a_type==A_SYMBOL ? argv->a_w.w_symbol : &s_);
return;
}
! for (i = c->c_nmethod, m = c->c_methods; i--; m++) if (m->me_name == s) {
wp = m->me_arg;
! if (*wp == A_GIMME) {
! if (x == &pd_objectmaker) pd_set_newest(((t_newgimme)(m->me_fun))(s, argc, argv));
! else ((t_messgimme)(m->me_fun))(x, s, argc, argv);
return;
}
if (argc > MAXPDARG) argc = MAXPDARG;
if (x != &pd_objectmaker) *(ap++) = (t_int)x, narg++;
! while (wanttype = *wp++) {
! switch (wanttype) {
case A_POINTER:
if (!argc) goto badarg;
! else {
! if (argv->a_type!=A_POINTER) goto badarg;
! *ap = (t_int)(argv->a_w.w_gpointer);
argc--;
argv++;
***************
*** 807,815 ****
case A_DEFFLOAT:
if (!argc) *dp = 0;
! else
! {
! if (argv->a_type == A_FLOAT)
! *dp = argv->a_w.w_float;
! else goto badarg;
argc--;
argv++;
--- 789,795 ----
case A_DEFFLOAT:
if (!argc) *dp = 0;
! else {
! if (argv->a_type!=A_FLOAT) goto badarg;
! *dp = argv->a_w.w_float;
argc--;
argv++;
***************
*** 821,832 ****
case A_DEFSYM:
if (!argc) *ap = (t_int)(&s_);
! else
! {
! if (argv->a_type == A_SYMBOL)
! *ap = (t_int)(argv->a_w.w_symbol);
! /* if it's an unfilled "dollar" argument it appears
! as zero here; cheat and bash it to the null
! symbol. Unfortunately, this lets real zeros
! pass as symbols too, which seems wrong... */
else if (x == &pd_objectmaker && argv->a_type == A_FLOAT
&& argv->a_w.w_float == 0)
--- 801,810 ----
case A_DEFSYM:
if (!argc) *ap = (t_int)(&s_);
! else {
! if (argv->a_type == A_SYMBOL) *ap = (t_int)(argv->a_w.w_symbol);
! /* if it's an unfilled "dollar" argument it appears
! as zero here; cheat and bash it to the null
! symbol. Unfortunately, this lets real zeros
! pass as symbols too, which seems wrong... */
else if (x == &pd_objectmaker && argv->a_type == A_FLOAT
&& argv->a_w.w_float == 0)
***************
*** 840,873 ****
}
}
! switch (narg)
! {
! case 0 : bonzo = (*(t_fun0)(m->me_fun))
! (ad[0], ad[1], ad[2], ad[3], ad[4]); break;
! case 1 : bonzo = (*(t_fun1)(m->me_fun))
! (ai[0], ad[0], ad[1], ad[2], ad[3], ad[4]); break;
! case 2 : bonzo = (*(t_fun2)(m->me_fun))
! (ai[0], ai[1], ad[0], ad[1], ad[2], ad[3], ad[4]); break;
! case 3 : bonzo = (*(t_fun3)(m->me_fun))
! (ai[0], ai[1], ai[2], ad[0], ad[1], ad[2], ad[3], ad[4]); break;
! case 4 : bonzo = (*(t_fun4)(m->me_fun))
! (ai[0], ai[1], ai[2], ai[3],
! ad[0], ad[1], ad[2], ad[3], ad[4]); break;
! case 5 : bonzo = (*(t_fun5)(m->me_fun))
! (ai[0], ai[1], ai[2], ai[3], ai[4],
! ad[0], ad[1], ad[2], ad[3], ad[4]); break;
! case 6 : bonzo = (*(t_fun6)(m->me_fun))
! (ai[0], ai[1], ai[2], ai[3], ai[4], ai[5],
! ad[0], ad[1], ad[2], ad[3], ad[4]); break;
default: bonzo = 0;
}
! if (x == &pd_objectmaker)
! pd_set_newest(bonzo);
return;
}
! (*c->c_anymethod)(x, s, argc, argv);
return;
badarg:
! pd_error(x, "Bad arguments for message '%s' to object '%s'",
! s->s_name, c->c_name->s_name);
}
--- 818,839 ----
}
}
! switch (narg) {
! #define REST ad[0],ad[1],ad[2],ad[3],ad[4]
! case 0 : bonzo = ((t_fun0)(m->me_fun))( REST); break;
! case 1 : bonzo = ((t_fun1)(m->me_fun))(ai[0], REST); break;
! case 2 : bonzo = ((t_fun2)(m->me_fun))(ai[0],ai[1], REST); break;
! case 3 : bonzo = ((t_fun3)(m->me_fun))(ai[0],ai[1],ai[2], REST); break;
! case 4 : bonzo = ((t_fun4)(m->me_fun))(ai[0],ai[1],ai[2],ai[3], REST); break;
! case 5 : bonzo = ((t_fun5)(m->me_fun))(ai[0],ai[1],ai[2],ai[3],ai[4], REST); break;
! case 6 : bonzo = ((t_fun6)(m->me_fun))(ai[0],ai[1],ai[2],ai[3],ai[4],ai[5],REST); break;
default: bonzo = 0;
}
! if (x == &pd_objectmaker) pd_set_newest(bonzo);
return;
}
! c->c_anymethod(x, s, argc, argv);
return;
badarg:
! pd_error(x, "Bad arguments for message '%s' to object '%s'", s->s_name, c->c_name->s_name);
}
More information about the Pd-cvs
mailing list