static int wrap_private(Eprog prog, FuncWrap w, char *name) { static int wraplevel = 0; if (wraplevel < locallevel /* && strcmp(name, "(anon)") != 0 */) { int owl = wraplevel; wraplevel = locallevel; scanhashtable(paramtab, 0, 0, 0, scopeprivate, PM_UNSET); runshfunc(prog, w, name); scanhashtable(paramtab, 0, 0, 0, scopeprivate, 0); wraplevel = owl; return 0; } return 1; }
static int comp_wrapper(Eprog prog, FuncWrap w, char *name) { if (incompfunc != 1) return 1; else { char *orest, *opre, *osuf, *oipre, *oisuf, **owords, **oredirs; char *oqipre, *oqisuf, *oq, *oqi, *oqs, *oaq; zlong ocur; unsigned int runset = 0, kunset = 0, m, sm; Param *pp; m = CP_WORDS | CP_REDIRS | CP_CURRENT | CP_PREFIX | CP_SUFFIX | CP_IPREFIX | CP_ISUFFIX | CP_QIPREFIX | CP_QISUFFIX; for (pp = comprpms, sm = 1; m; pp++, m >>= 1, sm <<= 1) { if ((m & 1) && ((*pp)->node.flags & PM_UNSET)) runset |= sm; } if (compkpms[CPN_RESTORE]->node.flags & PM_UNSET) kunset = CP_RESTORE; orest = comprestore; comprestore = ztrdup("auto"); ocur = compcurrent; opre = ztrdup(compprefix); osuf = ztrdup(compsuffix); oipre = ztrdup(compiprefix); oisuf = ztrdup(compisuffix); oqipre = ztrdup(compqiprefix); oqisuf = ztrdup(compqisuffix); oq = ztrdup(compquote); oqi = ztrdup(compquoting); oqs = ztrdup(compqstack); oaq = ztrdup(autoq); owords = zarrdup(compwords); oredirs = zarrdup(compredirs); runshfunc(prog, w, name); if (comprestore && !strcmp(comprestore, "auto")) { compcurrent = ocur; zsfree(compprefix); compprefix = opre; zsfree(compsuffix); compsuffix = osuf; zsfree(compiprefix); compiprefix = oipre; zsfree(compisuffix); compisuffix = oisuf; zsfree(compqiprefix); compqiprefix = oqipre; zsfree(compqisuffix); compqisuffix = oqisuf; zsfree(compquote); compquote = oq; zsfree(compquoting); compquoting = oqi; zsfree(compqstack); compqstack = oqs; zsfree(autoq); autoq = oaq; freearray(compwords); freearray(compredirs); compwords = owords; compredirs = oredirs; comp_setunset(CP_COMPSTATE | (~runset & (CP_WORDS | CP_REDIRS | CP_CURRENT | CP_PREFIX | CP_SUFFIX | CP_IPREFIX | CP_ISUFFIX | CP_QIPREFIX | CP_QISUFFIX)), (runset & CP_ALLREALS), (~kunset & CP_RESTORE), (kunset & CP_ALLKEYS)); } else { comp_setunset(CP_COMPSTATE, 0, (~kunset & CP_RESTORE), (kunset & CP_RESTORE)); zsfree(opre); zsfree(osuf); zsfree(oipre); zsfree(oisuf); zsfree(oqipre); zsfree(oqisuf); zsfree(oq); zsfree(oqi); zsfree(oqs); zsfree(oaq); freearray(owords); freearray(oredirs); } zsfree(comprestore); comprestore = orest; return 0; } }
static int zprof_wrapper(Eprog prog, FuncWrap w, char *name) { int active = 0; struct sfunc sf, *sp; Pfunc f = NULL; Parc a = NULL; struct timeval tv; struct timezone dummy; double prev = 0, now; if (zprof_module && !(zprof_module->node.flags & MOD_UNLOAD)) { active = 1; if (!(f = findpfunc(name))) { f = (Pfunc) zalloc(sizeof(*f)); f->name = ztrdup(name); f->calls = 0; f->time = f->self = 0.0; f->next = calls; calls = f; ncalls++; } if (stack) { if (!(a = findparc(stack->p, f))) { a = (Parc) zalloc(sizeof(*a)); a->from = stack->p; a->to = f; a->calls = 0; a->time = a->self = 0.0; a->next = arcs; arcs = a; narcs++; } } sf.prev = stack; sf.p = f; stack = &sf; f->calls++; tv.tv_sec = tv.tv_usec = 0; gettimeofday(&tv, &dummy); sf.beg = prev = ((((double) tv.tv_sec) * 1000.0) + (((double) tv.tv_usec) / 1000.0)); } runshfunc(prog, w, name); if (active) { if (zprof_module && !(zprof_module->node.flags & MOD_UNLOAD)) { tv.tv_sec = tv.tv_usec = 0; gettimeofday(&tv, &dummy); now = ((((double) tv.tv_sec) * 1000.0) + (((double) tv.tv_usec) / 1000.0)); f->self += now - sf.beg; for (sp = sf.prev; sp && sp->p != f; sp = sp->prev); if (!sp) f->time += now - prev; if (a) { a->calls++; a->self += now - sf.beg; } stack = sf.prev; if (stack) { stack->beg += now - prev; if (a) a->time += now - prev; } } else stack = sf.prev; } return 0; }