Open dmg46664 opened 1 month ago
Add ^:macro-support
to the defn name
@cgrand And for defn-
and def
(reading between the lines) 😆
Hi @cgrand ,
I tried the following in core.cljd
(def
^{:macro true
:macro-support true <------------ here
:doc "Same as (def name (fn [params* ] exprs*)) or (def
name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
to the var metadata. prepost-map defines a map with optional keys
:pre and :post that contain collections of pre or post conditions."
:arglists '([name doc-string? attr-map? [params*] prepost-map? body]
[name doc-string? attr-map? ([params*] prepost-map? body)+ attr-map?])}
defn (fn defn [&form &env fname & fdecl]
but this didn't solve it. No doubt I'm bulldozing my way through, not understanding the larger framework. 🤔
So before I go down rabbit holes I thought I'd ask if there are resources that describe:
cljs
https://www.youtube.com/watch?v=kBKIGj1_WAo)Perhaps a doc/working-on-the-compiler.md
?
Edit: Seems the same was asked here https://github.com/Tensegritics/ClojureDart/issues/16
Describe the bug
Clojure dart is not able to handle this scenario where a function is defined and used in a subsequent macro.
To Reproduce
Expected behavior
This should work.
No doubt because of ClojureDart's two phase macro-expansion, it's not aware of the function defined a few lines above.
This is something that is possible in
cljs
, so presumably the two phases need to work more in parallel than in sequence, or effectively behave as such.Assume you're aware of
cljs
quirks https://code.thheller.com/blog/shadow-cljs/2019/10/12/clojurescript-macros.html but these require defining aliases etc.Additional context
I was trying to convert the
specter
library and came across a problem running the following code.Pointing
cljd
at moreclj
code will highlight more differences with the language. More reason to champion the following suggestion ;-) https://clojurians.slack.com/archives/C03A6GE8D32/p1729680676173319I suggest this difference go under the
Completeness status
of the project given the difference with Clojure core.