ben
ben

Reputation: 113

can cljc single-file macro definitions to work with clojurescript?

I have clojurescript successfully importing macros from other namespaces. But I wonder whether a single-file construction is/should be possible with clojure 1.7, such that a macro can be defined and used. What I have tried does not work, but maybe I've missed a detail someplace.

(ns cljc.core)

#?(:cljs
(enable-console-print!))

#?(:clj
(defmacro list-macro [x y]
  `(list ~x ~y)))

(defn foo [a]
  (println (list-macro a a)))

(foo :a)

This form fails with list-macro being undefined when compiling cljs; if I remove the :clj guard around list-macro, then defmacro is undefined within the cljs compilation. Is there a way?

Upvotes: 10

Views: 3325

Answers (1)

Leon Grapenthin
Leon Grapenthin

Reputation: 9276

Yes, there is a way for a single file construction.

(ns cljc.core
  #?(:cljs (:require-macros [cljc.core :refer [list-macro]])))

#?(:clj
(defmacro list-macro [x y]
;; ...

Assumedly one of the next CLJS compiler versions will do the import automatically.

Upvotes: 14

Related Questions