@(do
   (set *gensym-counter* 0)

   (macro-time
     (defmacro whilst ((condition : result) . body)
       (let ((cblk (gensym "cnt-blk-"))
             (bblk (gensym "brk-blk-")))
         ^(macrolet ((break (value) ^(return-from ,',bblk ,value)))
            (symacrolet ((break (return-from ,bblk))
                         (continue (return-from ,cblk)))
              (block ,bblk
                (for () (,condition ,result) ()
                  (block ,cblk ,*body))))))))

   (let ((i 0))
     (whilst ((< i 100))
       (if (< (inc i) 20)
         continue)
       (if (> i 30)
         break)
       (prinl i)))

   (prinl
     (ignwarn
       (expand
         '(whilst ((< i 100))
            (if (< (inc i) 20)
              continue)
            (if (> i 30)
              break)
            (prinl i)))))

   (let ((i 0))
     (whilst ((< i 5))
       (inc i)
       (labels ((whilst () 'whilst))
         (let ((break 'break))
           (prinl (list (whilst) break)))))))