;;;; Two macros whose bodies call each other, and the calls are real ones -- ;;;; outside any quasiquote, so each has to run while the other is being ;;;; compiled. A defmacro has to be compiled before the call it expands, so a ;;;; ring has no order to be compiled in: neither can go first and neither ;;;; becomes compilable by waiting. The pre-pass names them both. ;;;; ;;;; A call inside a quasiquote is a different thing and is not a cycle. It is ;;;; part of what the macro *answers*, expanded again after it returns, and two ;;;; macros can quasiquote each other forever without either needing the other ;;;; to exist first -- see macro-spin.flan, which is bounded rather than ;;;; refused. (defmacro ping [args] (pong args)) (defmacro pong [args] (ping args)) (defn main [] i32 (ping 1) 0)