static void fin_c(bindes *bd) {int i; FILE *fh, *fp; cmeta *cm; cm = bd->data; FREE(cm->enums); FREE(cm->structs); FREE(cm->unions); FREE(cm); /* finish off the C file */ /* finish off the header file */ fh = bd->fp[1]; fprintf(fh, "#endif\n"); fprintf(fh, "\n"); for (i = 0; i < NF; i++) {fp = bd->fp[i]; if (fp != NULL) {fclose_safe(fp); bd->fp[i] = NULL;};}; return;}
void profileWrite (GC_state s, GC_profileData p, const char *fileName) { FILE *f; const char* kind; if (DEBUG_PROFILE) fprintf (stderr, "profileWrite("FMTPTR",%s)\n", (uintptr_t)p, fileName); f = fopen_safe (fileName, "wb"); writeString (f, "MLton prof\n"); switch (s->profiling.kind) { case PROFILE_ALLOC: kind = "alloc\n"; break; case PROFILE_COUNT: kind = "count\n"; break; case PROFILE_NONE: die ("impossible PROFILE_NONE"); // break; case PROFILE_TIME_FIELD: kind = "time\n"; break; case PROFILE_TIME_LABEL: kind = "time\n"; break; default: kind = ""; assert (FALSE); } writeString (f, kind); writeString (f, s->profiling.stack ? "stack\n" : "current\n"); writeUint32X (f, s->magic); writeNewline (f); writeUintmaxU (f, p->total); writeString (f, " "); writeUintmaxU (f, p->totalGC); writeNewline (f); writeUint32U (f, s->sourceMaps.sourcesLength); writeNewline (f); for (GC_sourceIndex i = 0; i < s->sourceMaps.sourcesLength; i++) writeProfileCount (s, f, p, (GC_profileMasterIndex)i); writeUint32U (f, s->sourceMaps.sourceNamesLength); writeNewline (f); for (GC_sourceNameIndex i = 0; i < s->sourceMaps.sourceNamesLength; i++) writeProfileCount (s, f, p, (GC_profileMasterIndex)(i + s->sourceMaps.sourcesLength)); fclose_safe (f); }