#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.

Reply via email to