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.
