svoid runInQAndWait(Q q, Runnable r) { if (r == null) ret; if (isInQ(q)) ret with callF(r); final new Flag done; final new Var error; q.add(r { try { callF(r); } catch e { error.set(e); } finally { done.raise(); } }); done.waitUntilUp(); if (error.has()) throw rethrow(error!); }