[CLJ-1399] missing field munging when recreating deftypes serialized in to byte code Created: 02/Apr/14 Updated: 19/Feb/15
to embed deftypes in the bytecode the compiler emits the value of each field, then emits a call to the deftypes underlying class's constructor.
to get a list of fields the compiler calls .getBasis.
the getBasis fields are the "clojure" level field names of the deftype, which the actual "jvm" level field names have been munged (replacing - with _, etc), so the compiler tries to generate code to set values on non-existent fields
you can work around this by using field names that don't require munging. a solution might be just calling munge in the emission of field sets of ITypes
|Comment by Kevin Downey [ 02/Apr/14 4:26 PM ]|
|Comment by Kevin Downey [ 02/Apr/14 4:39 PM ]|
this patch fixes the issue on the latest master for me
|Comment by Chas Emerick [ 02/Apr/14 4:57 PM ]|
FWIW, this was precipitated by real experience (I think I created the refheap paste). The workaround is easy (don't use dashes in field names of deftypes you want to return from data reader functions), but I wouldn't expect anyone to guess that that wasn't already oversensitized to munging edge cases.