macroexpand-first analyzer order; one macro path; defmacro/letfn fixes
The analyzer checked special forms before expanding macros, the reverse of the canonical read -> macroexpand -> analyze order (Clojure/CLJS analyze-seq). Move macroexpansion to the front of analyze-list. Knock-on fixes: - letfn was both a (broken) macro expanding to let* AND a primitive special (analyze-letfn, proper letrec*). Macroexpand-first surfaced the macro, breaking mutual recursion; remove the macro, keep letfn a primitive. - defmacro is now compiled by the analyzer (a :set-var-style :defmacro node that defs the expander fn via the fn macro — so destructuring arglists desugar — and marks the var a macro), so a non-top-level (when … (defmacro …)) works. The runtime spine's separate top-level defmacro interception is removed: one path. SCI load 162 -> 202/218.
This commit is contained in:
parent
e6ee17b055
commit
f18ae3bd46
8 changed files with 402 additions and 383 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue