sclass TimeoutException_Inner extends RuntimeExceptionWithCustomStackTrace {
  Thread thread;
  double timeoutSeconds;
  O function;

  *(double *timeoutSeconds,
    O *function,
    Thread *thread) {
    super("Timeout after " + iceil(timeoutSeconds) + "s by " + shorten_str(function),
      new Throwable("Caller"),
      thread.getStackTrace());
  }
}