You already answered the println question, now I'm using spit inside the macro instead of println, let's forget about it. Now the problem is to access CLJS vars at compile time from the macro, not printing them :)
The issue seems to be reduced to the question if you can access the CLJS compiler state from a macro, to use utilities like cljs.core/resolve-var. Saludos, Nahuel Greco. On Sat, May 31, 2014 at 12:25 PM, Gary Trakhman <[email protected]> wrote: > We still have to consider that println won't work, even if it is possible > to resolve the var, so you'll have to use some other method to see the > data: > https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L897 > > > On Sat, May 31, 2014 at 11:21 AM, Gary Trakhman <[email protected]> > wrote: > >> Hrmmmmmm.. >> >> >> https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/analyzer.clj#L1397 >> >> Seems like it *could* be getting passed through somehow. >> >> Now I'm confused :-). >> >> >> >> >> On Sat, May 31, 2014 at 11:15 AM, Gary Trakhman <[email protected]> >> wrote: >> >>> Why are you bringing the built-in macro &env into this? >>> >>> Cljs.core/resolve-var refers to this env: >>> https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/env.clj#L39 >>> >>> AFAIK there is no link between them (I could be wrong). >>> >>> >>> On Sat, May 31, 2014 at 10:39 AM, Nahuel Greco <[email protected]> wrote: >>> >>>> I will reformulate: can you access the CLJS compiler state from a macro >>>> via &env or in another way to resolve CLJS vars? If yes, can you use >>>> cljs.core/resolve-var from a macro giving it that &env? Or the macros >>>> run completely isolated from the CLJS compiler state? >>>> >>>> Saludos, >>>> Nahuel Greco. >>>> >>>> >>>> On Sat, May 31, 2014 at 11:23 AM, Nahuel Greco <[email protected]> >>>> wrote: >>>> >>>>> Gary, maybe I'm misunderstanding you, but cljs.core/resolve-var >>>>> doesn't contradict your "the macro system has no knowledge of the CLJS >>>>> compiler internals" stance? What's the intent of that function (given that >>>>> trying it in my original example doesn't seems to be capable of resolving >>>>> the var)? It can access the vars defined in the CLJS side? >>>>> >>>>> Saludos, >>>>> Nahuel Greco. >>>>> >>>>> >>>>> On Sat, May 31, 2014 at 11:13 AM, Gary Trakhman < >>>>> [email protected]> wrote: >>>>> >>>>>> The other piece of the puzzle: >>>>>> >>>>>> cljs.core/resolve-var is in a CLJ namespace and uses compiler state: >>>>>> >>>>>> https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/core.clj#L681 >>>>>> >>>>>> >>>>>> On Sat, May 31, 2014 at 10:10 AM, Gary Trakhman < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> The key is in what you think you mean by 'available at >>>>>>> compile-time'. >>>>>>> >>>>>>> How could this be the case? >>>>>>> >>>>>>> The macro system has no knowledge of the CLJS compiler internals, >>>>>>> and the CLJS compiler does not try to project its state onto the clojure >>>>>>> namespace system. >>>>>>> >>>>>>> However, CLJ macros can return symbols in data that will eventually >>>>>>> make sense in a CLJS context, without having any knowledge of that CLJS >>>>>>> context, which is the case. >>>>>>> >>>>>>> >>>>>>> On Sat, May 31, 2014 at 9:47 AM, Nahuel Greco <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Thomas, this is an isolated test, the real case was creating a >>>>>>>> defmulti macro wrapper and a defmethod one, so in the mydefmulti >>>>>>>> macro I attach some metadata to the var defmulti defines and then >>>>>>>> I fetch it in the mydefmethod calls (by using resolve), all in >>>>>>>> compile-time. This works perfectly in the pure CLJ case but not in the >>>>>>>> CLJS >>>>>>>> one. The nested def in my original example was an extra >>>>>>>> experiment, because for testing I need to put nested def's inside >>>>>>>> deftest's, but note the problem manifests also with the top-level >>>>>>>> def, so nesting the def is not really the problem here. >>>>>>>> >>>>>>>> The vars needs to be defined on the CLJS side, I thought they were >>>>>>>> available at compile-time for the macros like in CLJ. So if standard >>>>>>>> resolve and his friends doesn't work, there is a way using the >>>>>>>> analyzer and &env from the macro to get that CLJS compile-time var >>>>>>>> and his metadata? I'm discovering functions like >>>>>>>> cljs.core/resolve-var but doing (cljs.core/resolve-var &env v) in >>>>>>>> the macro from my original example doesn't seems to resolve anything. >>>>>>>> >>>>>>>> I think for my real case there is a workaround by defining a (def >>>>>>>> my-metadata-for-cljs-vars (atom {})) in macros.clj and then update >>>>>>>> it in the mydefmulti calls using the fully qualified var sym as a >>>>>>>> key and the data (originally stored in the metadata) as the value, then >>>>>>>> read it from the mydefmacro calls. I think that will work, but I >>>>>>>> really want to know if resolving the CLJS var and getting his metadata >>>>>>>> from >>>>>>>> the macro is possible. >>>>>>>> >>>>>>>> >>>>>>>> Saludos, >>>>>>>> Nahuel Greco. >>>>>>>> >>>>>>>> >>>>>>>> On Sat, May 31, 2014 at 5:50 AM, Thomas Heller <[email protected] >>>>>>>> > wrote: >>>>>>>> >>>>>>>>> Hey, >>>>>>>>> >>>>>>>>> not sure what you are trying to achieve, since the compiler should >>>>>>>>> already warn you if a var is not found. Might not do so when nesting >>>>>>>>> defs. >>>>>>>>> def/defn are top level forms und should not be nested, especially no >>>>>>>>> def in >>>>>>>>> a defn. >>>>>>>>> >>>>>>>>> As for your question: the CLJS compiler supports vars in macros, >>>>>>>>> but only on the clojure side (eg. in your macros.clj). Your macros may >>>>>>>>> reference other vars from the CLJ world but know nothing about the >>>>>>>>> CLJS >>>>>>>>> world (expect maybe from &env). >>>>>>>>> >>>>>>>>> HTH, >>>>>>>>> /thomas >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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. >>>>>>>> >>>>>>> >>>>>>> >>>>>> -- >>>>>> 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. >>>> >>> >>> >> > -- > 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.
