Am I right that the following reflects a difference in Clojure macros from
Common Lisp macros, and if so, am I missing a workaround?
The context is my trying to create a cljs wrapper for the qooxdoo js
library, leveraging my model/cell dataflow framework written in all cljc.
It is going well and now I want to do some syntactic sugar, some of it
requiring macrology to defer evaluation.
uh-oh. Macros in cljs! Not a problem, I will just put them in a cljc
dedicated to these do I do not have to make any more code than necessary
cljc compatible.
Here is the full file with the problem:
(ns tiltontec.qxia.macros)
(defmacro hbox [[& hbox-args] & kids]
`(tiltontec.qxia.core/qx-make
::tiltontec.qxia.base/m.Composite
:layout (new js/qx.ui.mobile.layout.HBox)
~@hbox-args
:kids (c?kids ~@kids)))
Here is the error:
> Reloading Clojure file "/tiltontec/qxia/macros.cljc" failed.
>
> clojure.lang.Compiler$CompilerException: java.lang.RuntimeException:
>> Invalid token: ::tiltontec.qxia.base/m.Composite,
>> compiling:(tiltontec/qxia/macros.cljc:5:0)
>
> My understanding is that clj is somehow doing more than just the symbolic
manipulation to which I am accustomed with CL macros, such that it is
getting upset about not knowing the defined type.
I got clever and tried the same trick we use for deliberate variable
capture ~'tiltontec.qxia.base/m.Composite but the compiler saw thru my
little ruse and produced the same error.
Solution: I broke the types out of qxia.base.cljs into qxia.types.cljc so I
would not have to make the whole base.cljs compatible with cljc:
(ns tiltontec.qxia.macros
(:require [tiltontec.qxia.types]))
(defmacro hbox3 [[& hbox-args] & kids]
`(tiltontec.qxia.core/qx-make
::tiltontec.qxia.types/m.Composite
:layout (new js/qx.ui.mobile.layout.HBox)
~@hbox-args
:kids (tiltontec.model.family/c?kids ~@kids)))
-kt
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.