#1, CLJS macros must use fully-qualified vars. It is possible to resolve using analyzer state, but that requires internal knowledge of the CLJS compiler. #2, it would be going to whatever the binding of *out* is in the current thread, likely it's ending up in the compiled CLJS source code because of how the compiler works :-).
There's no difference to the CLJS compiler and emitted code whether that code ends up running in Rhino or a browser. On Thu, May 29, 2014 at 11:02 AM, Nahuel Greco <[email protected]> wrote: > I know ClojureScript doesn't support run-time Vars, but reading the CLJS > code I thought it supported Vars at compile-time, when all is executed > inside the CLJ/JVM runtime. The following code compiles without > assertexceptions for CLJ/JVM but when compiling CLJS the > assert in the macro fails: > > ;;; src/p/macros.clj ;;; > (ns p.macros) > > (defmacro check-var-at-compile-time [v] > (println "evaluating macro for" v) > (assert (resolve v) (str "Var " v " not found at ns " *ns*))) > > ;;; src/p/core.clj - compiles ok;;; > (ns p.core [:require p.macros]) > > (def v1 3) > (p.macros/check-var-at-compile-time v1) > > (defn foo [] > (def v2 4) > (p.macros/check-var-at-compile-time v2)) > > ;;; src-cljs/p/core.cljs - fails at compilation ;;; > (ns p.core [:require p.macros]) > > (def v1 3) > (p.macros/check-var-at-compile-time v1) > > (defn foo [] > (def v2 4) > (p.macros/check-var-at-compile-time v2)) > > In CLJ the vars are found and the println message is printed to the > console when you compile it using lein run or by requiring the ns at the > REPL. In CLJS the assertion fails in compile-time with "Assert failed: > Var v1 not found at ns p.core" and no println message is shown. So: > > 1- There is a way for macros to access compile-time Vars? > 2- When you compile the CLJS code by using lein cljsbuild once, where the > println output from the macro at compile time is going? (a > minor annoyance) > > Saludos, > Nahuel Greco. > > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to the Google Groups > "ClojureScript" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/clojurescript. > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
