eval-form treated only a reader LIST (a Janet array) as a call; a runtime-built list — a plist or lazy-seq from cons/concat/list or ~@ (list?/seq? true but array? false) — fell through to self-eval. So (eval (cons '+ '(1 2))) returned the list as data instead of 3, and a macro whose output contained such a subform left it unevaluated. Add a plist?/lazy-seq? branch that coerces to the element array via d-realize and dispatches through eval-list; an empty list self-evals. The analyzer already punts these forms to the interpreter (analyze's :else -> uncompilable -> interpreter fallback), so this one interpreter branch fixes the correctness bug across the eval and macro-expansion paths; compiling them directly (vs punting) would be a separate perf change. Verified: conformance 355/355, syntax-quote ~@ splice, list values unchanged. |
||
|---|---|---|
| .. | ||
| bench | ||
| clojure-stdlib/clojure | ||
| integration | ||
| spec | ||
| support | ||
| unit | ||