All notable changes to meme-clj will be documented in this file.
The format is based on Keep a Changelog.
meme.alpha.collapsar): self-contained declarative rewrite engine (584 LOC) with phases, pipelines, head analysis, verified termination, and tower collapsememe.alpha.collapsar.meme): meme-to-Clojure and Clojure-to-meme conversion expressed as collapsar rule phases and procedural phasesmeme convert --pipeline classic|rewrite|collapsar selects the conversion pipeline; meme inspect --pipeline shows pipeline structurememe.alpha.convert): single dispatch point for all three pipelinesbenchmark_test.clj): benchmarks all three pipelines across 11 meme fixtures and 7,526 vendor forms from 7 real-world Clojure librariesregister! API for guest languages with custom preludes, rewrite rules, and parsers (meme.alpha.platform.registry)?x/??x pattern variables, cycle detection, and fixed-point iteration (meme.alpha.rewrite)meme.alpha.rewrite.tree)meme.alpha.pipeline.contract)nil(1 2) → (nil 1 2). Any value can be a head. Previously these were rejected artificially.clojure.core// now reads as one symbol (namespace clojure.core, name /). Previously split into two tokens.M suffix, BigInt N suffix, ##NaN/##Inf/##-Inf, tagged literals, named chars (\newline etc.), pr-str fallback for UUID/Date:read-cond :preserve during conversion, preserving #?(:clj ...) branches in outputstep-expand-syntax-quotes before eval, matching the user-code pathbuild-tree now validates expected delimiters after #? and #:ns prefixesdoc/development.mdMemeRaw, MemeSyntaxQuote, and other AST node defrecords satisfy (map? x), causing silent mishandling in expand-sq, normalize-bare-percent, find-percent-params, pp, and max-percent-n. All dispatch sites now guard with forms/raw?, forms/syntax-quote?, etc. before the (map? form) branch.#?@(:clj [2 3]) inside a collection now correctly splices elements ([1 #?@(:clj [2 3]) 4] produces [1 2 3 4], not [1 [2 3] 4]). Non-sequential splice values produce a clear error.+42N and +3/4 now parse correctly. BigInteger constructor rejects leading +; sign is now stripped before construction (matching hex/octal/radix branches).nil(x), true(x), false(x) are now valid meme syntax, producing the lists (nil x), (true x), (false x). The syntactic rule f(args) → (f args) applies uniformly regardless of head type.x `` now correctly produces double-quoting (code that generates the inner expansion), matching Clojure's behavior. Previously the inner expansion was returned directly, losing one nesting level.expand-sq, expand-syntax-quotes, expand-forms) moved from meme.alpha.parse.reader to new meme.alpha.parse.expander namespace.strip-internal-meta) and percent-param-type extracted to meme.alpha.forms to prevent drift between reader and printer.test-cljs to deploy job dependencies).Initial public alpha release.
:meme/sugar metadata preservationMemeSyntaxQuote), expanded before evalMemeRaw) for numbers/chars/strings with alternate notation:read-cond :preserve option for lossless reader conditional roundtrips:incomplete continuation protocol.memeCan you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |