static O time(O f) {
long time = sysNow();
O o = callF(f);
done2_always(str(f), time);
ret o;
}
static A time(F0 f) {
ret (A) time((O) f);
}
static A time(IF0 f) {
ret (A) time((O) f);
}
static A time(S msg, IF0 f) {
long time = sysNow();
A o = f.get();
done2_always(msg, time);
ret o;
}
svoid time(S msg default str(f), Runnable f) {
time(msg, runnableToIF0(f));
}