/* setpref.c
*
* COPYRIGHT (c) 1996 AT&T Research.
*/
#include "ml-base.h"
#include "ml-c.h"
#include "ml-values.h"
#include "ml-objects.h"
#include "ml-globals.h"
#include "cfun-proto-list.h"
#include "profile.h"
extern void EnableProfSignals (void);
extern void DisableProfSignals (void);
/* _ml_Prof_setpref : word array option -> unit
*
* Set the profile array reference; NONE means that there is no array.
*/
ml_val_t _ml_Prof_setpref (ml_state_t *msp, ml_val_t arg)
{
#ifdef OPSYS_UNIX
bool_t enabled = (ProfCntArray != ML_unit);
int i;
if (arg != OPTION_NONE) {
ProfCntArray = OPTION_get(arg);
if (! enabled) {
/* add ProfCntArray to the C roots */
CRoots[NumCRoots++] = &ProfCntArray;
/* enable profiling signals */
EnableProfSignals ();
}
}
else if (enabled) {
/* remove ProfCntArray from the C roots */
for (i = 0; i < NumCRoots; i++) {
if (CRoots[i] == &ProfCntArray) {
CRoots[i] = CRoots[--NumCRoots];
break;
}
}
/* disable profiling signals */
DisableProfSignals ();
ProfCntArray = ML_unit;
}
return ML_unit;
#else
return RAISE_ERROR(msp, "time profiling not supported");
#endif
} /* end of _ml_Prof_setpref */
syntax highlighted by Code2HTML, v. 0.9.1