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.

Reply via email to