Does anyone have an idea for what I might do to diagnose/fix this? Is this
just a misunderstanding on my part? If not I'll file a bug against
definline.


On 21 June 2013 18:04, Colin Fleming <[email protected]> wrote:

> So this has just happened to me again:
>
> Clojure 1.5.1
> (plugin.psi/symbol? 2)
> => false
> (filter plugin.psi/symbol? [1 2 3])
> => (1 2 3)
> ((var-get #'plugin.psi/symbol?) 2)
> => (clojure.core/instance?
> org.jetbrains.plugins.clojure.psi.api.symbols.ClSymbol 2)
>
> What that looks like to me is that the macro fn (i.e. the one that is
> usually in the :inline meta) is being stored in the var. So when it's used
> by filter, it always returns true. Does anyone have any idea what else I
> could try to debug this? I'll leave the REPL session open so I can try any
> suggestions.
>
> I just tried this, looks like the fns are not the same, at least, but they
> do have the same effect:
>
> (meta #'plugin.psi/symbol?)
> => {:inline plugin.psi$symbol_QMARK_@3781ff7f, :ns plugin.psi, :name
> symbol?, :arglists ([element]), :column 1, :line 35, :file "plugin/psi.clj"}
> (= plugin.psi/symbol?
>    (:inline (meta #'plugin.psi/symbol?)))
> => false
> plugin.psi/symbol?
> => plugin.psi$symbol_QMARK_@4ccc75ae
> ((:inline (meta #'plugin.psi/symbol?)) 2)
> => (clojure.core/instance?
> org.jetbrains.plugins.clojure.psi.api.symbols.ClSymbol 2)
>
>
>
> On 20 June 2013 22:48, Colin Fleming <[email protected]> wrote:
>
>> ClSymbol is a Java class. I don't get the replacement warning because
>> I've excluded that symbol explicitly in my ns declaration using
>> :refer-clojure :exclude.
>>
>> I haven't done a 'lein clean' because I'm not using lein, but I have
>> rebuilt various times. However, sometimes it will work and sometimes it
>> won't. I just tried this now, and I've been unable to reproduce. I guess
>> I'll keep working tomorrow and see if it crops up again. If I see it again
>> I'm going to try ((var-get #'symbol?) 2) to see if the results from the
>> function differ from the macroexpanded version.
>>
>>
>>
>>
>> On 20 June 2013 22:21, Jim - FooBar(); <[email protected]> wrote:
>>
>>> On 20/06/13 10:59, Colin Fleming wrote:
>>>
>>>> Because this tests for something different - that the element is an
>>>> instance of ClSymbol. It's not testing the same thing as the core version.
>>>> I qualify it (psi/symbol? in the examples above) to distinguish it from the
>>>> core one.
>>>>
>>>> Basically, I'm trying to use definline to allow me to have a more
>>>> Clojure-y API without having the performance hit of tons of tiny function
>>>> calls.
>>>>
>>>> I agree that this is unlikely to be a bug in Clojure and is probably
>>>> something I'm missing, but I can't figure it out.
>>>>
>>>
>>> right I see...so if ClSymbol is a defrecord/deftype I don't see anything
>>> wrong with your code...when you do (in-ns 'plugin.psi) do you get a warning
>>> that core/symbol? is being replaced by psi/symbol?  ?
>>>
>>> what you tried on your repl works fine on mine:
>>>
>>> user=> (defrecord FOO [a])
>>> user.FOO
>>>
>>> user=> (definline foo? [e]
>>>   #_=>   `(instance? FOO ~e))
>>> #'user/foo?
>>>
>>> user=> (foo? 2)
>>> false
>>>
>>> user=> (filter foo? [1 2 3])
>>> ()
>>>
>>> user=> (filter foo? [(FOO. 1) 2 3])
>>> (#user.FOO{:a 1})
>>>
>>> Did you try 'lein clean' to get rid of already compiled classes? I'm
>>> suspecting you have different versions of the same class lying around
>>> because of what you said about compiling and recompiling...
>>>
>>> Jim
>>>
>>>
>>>
>>>
>>>
>>> --
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to [email protected]
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscribe@**googlegroups.com<clojure%[email protected]>
>>> For more options, visit this group at
>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>> --- You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to 
>>> clojure+unsubscribe@**googlegroups.com<clojure%[email protected]>
>>> .
>>> For more options, visit 
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to