diff --git a/src/builtin_functions.c b/src/builtin_functions.c index d3f691b795b44944ee1aba9f6a4340e5710ad490..beae1c977c0a4f8cbbde2728bb8ef33d9ce90446 100644 --- a/src/builtin_functions.c +++ b/src/builtin_functions.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: builtin_functions.c,v 1.168 1999/05/02 08:11:32 hubbe Exp $"); +RCSID("$Id: builtin_functions.c,v 1.169 1999/05/11 18:56:32 mirar Exp $"); #include "interpret.h" #include "svalue.h" #include "pike_macros.h" @@ -38,6 +38,7 @@ RCSID("$Id: builtin_functions.c,v 1.168 1999/05/02 08:11:32 hubbe Exp $"); #include "cyclic.h" #include "signal_handler.h" #include "security.h" +#include "builtin_functions.h" #ifdef HAVE_POLL #ifdef HAVE_POLL_H @@ -67,7 +68,11 @@ void f_equal(INT32 args) push_int(i); } +#ifdef DEBUG_MALLOC +void _f_aggregate(INT32 args) +#else void f_aggregate(INT32 args) +#endif { struct array *a; #ifdef PIKE_DEBUG @@ -3972,7 +3977,11 @@ void init_builtin_efuns(void) ADD_EFUN("add_constant",f_add_constant,tFunc(tStr tOr(tVoid,tMix),tVoid),OPT_SIDE_EFFECT); /* function(0=mixed ...:array(0)) */ +#ifdef DEBUG_MALLOC + ADD_EFUN("aggregate",_f_aggregate,tFuncV(,tSetvar(0,tMix),tArr(tVar(0))),OPT_TRY_OPTIMIZE); +#else ADD_EFUN("aggregate",f_aggregate,tFuncV(,tSetvar(0,tMix),tArr(tVar(0))),OPT_TRY_OPTIMIZE); +#endif /* function(0=mixed ...:multiset(0)) */ ADD_EFUN("aggregate_multiset",f_aggregate_multiset,tFuncV(,tSetvar(0,tMix),tSet(tVar(0))),OPT_TRY_OPTIMIZE); diff --git a/src/builtin_functions.h b/src/builtin_functions.h index 52ce5ff0568149f1951fb6c9e28ebfacead396df..a3c0970a1ba55c82b36e9e51cc4fb31628f31da3 100644 --- a/src/builtin_functions.h +++ b/src/builtin_functions.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: builtin_functions.h,v 1.8 1998/12/16 07:49:34 hubbe Exp $ + * $Id: builtin_functions.h,v 1.9 1999/05/11 18:56:34 mirar Exp $ */ #ifndef BUILTIN_EFUNS_H #define BUILTIN_EFUNS_H @@ -15,8 +15,14 @@ #include "callback.h" /* Prototypes begin here */ -void f_equal(INT32 args); +#ifdef DEBUG_MALLOC +void _f_aggregate(INT32 args); +#define f_aggregate(X) do { _f_aggregate(X); debug_malloc_touch(sp[-1].u.refs); } while (0) +#else void f_aggregate(INT32 args); +#endif + +void f_equal(INT32 args); void f_trace(INT32 args); void f_hash(INT32 args); void f_copy_value(INT32 args);