[CLJ-1226] set! of a deftype field using field-access syntax causes ClassCastException Created: 26/Jun/13 Updated: 12/Oct/15 Resolved: 12/Oct/15
|Affects Version/s:||Release 1.7|
|Fix Version/s:||Release 1.8|
|Labels:||compiler, deftype, interop|
|Patch:||Code and Test|
set! can be used to set a public field on an instance with (set! (.field inst) val). This does not work inside a protocol function defined on a deftype with a mutable field for an instance of that type itself.
Cause: The type assigned in the bytecode at this point is the compile_stub type, not the expected class type.
Approach: Use getType(targetClass) instead of Type.getType(targetClass)
|Comment by Nicola Mometto [ 27/Jun/13 5:30 AM ]|
This patch offers a better workaround for
|Comment by Nicola Mometto [ 25/Mar/15 4:39 PM ]|
Updated patch to apply to current master
|Comment by Fogus [ 07/Aug/15 3:10 PM ]|
Straight-forward fix and test.
|Comment by Rich Hickey [ 08/Aug/15 10:05 AM ]|
Screeners - please make sure the patch has an Approach section that explains how and why the patch will fix the problem. Symptom is X and now after patch behavior is Y is not good enough.