I found a minimal case:
(defprotocol A (f [x]))
(deftype T [ ^{:unsynchronized-mutable true} ^int a] A
(f [x] (loop [c 0]
(set! a c))))
(class: user/T, method: f signature: ()Ljava/lang/Object;) Expecting
to find integer on stack
The problem disappear with let instead of loop.
It seems that Clojure creates c as a long a long and do not put a
conversion before setting to the int variable.
(deftype T [ ^{:unsynchronized-mutable true} ^int a] A
(f [x] (loop [c 0]
(set! a (int c)))))
works without trouble.
Notably, doing (loop [c (int 0)] .... does not help.
Is it known or should I report the bug?
(I don't mind casting by hand for this case, but at least the error
message should be clearer)
Best,
Nicolas.
--
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