с использованием функции с рекурсией: (хвостовой вызов будет оптимизирован;))
void whileLoop(bool delegate() cond,void delegate() fun){
if(cond()){
fun();
whileLoop(cond,fun);
}
}
замыкания следует использовать с этим
или с использованием чрезмерно / недоиспользованного goto
startloop:if(!condition)goto endloop;
//code
goto startloop;
endloop:;