Hi,

In my project, caesium, I’m binding against libsodium using jnr-ffi. This 
involves creating an Interface with a bunch of methods. This all works 
swimmingly, most of the time.

I have two functions that differ only in their arguments being type hinted:

(defn secretbox-easy-to-byte-bufs-nocast!
  [^ByteBuffer out ^ByteBuffer msg ^ByteBuffer nonce ^ByteBuffer key]
  (.crypto_secretbox_easy sodium out msg (.remaining msg) nonce key)
  out)

(defn secretbox-easy-refl!
  [out msg nonce key]
  (.crypto_secretbox_easy sodium out msg (.remaining msg) nonce key)
  out)

When calling this function with direct byte buffers (and only with direct byte 
buffers!), the call fails. First few lines of traceback:

  actual: java.lang.IllegalArgumentException: No matching method found: 
crypto_secretbox_easy for class caesium.binding.Sodium$jnr$ffi$0
 at clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
    clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:28)
    caesium.crypto.secretbox$secretbox_easy_refl_BANG_.invokeStatic 
(secretbox.clj:85)

The type hinted version works fine.

Is this expected behavior, or a bug? I’m trying to measure how expensive 
reflection is, and wasn’t expecting this problem. DirectByteBuffer appears 
undocumented, but it is a subclass of MappedByteBuffer, implementing ByteBuffer.


lvh

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to