<< Back to previous view

[CTYP-45] Confusing error message when using clojure.core/defprotocol instead of clojure.core.typed/defprotocol> Created: 04/Sep/13  Updated: 25/Sep/13  Resolved: 08/Sep/13

Status: Closed
Project: core.typed
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Timo Mihaljov Assignee: Ambrose Bonnaire-Sergeant
Resolution: Completed Votes: 0
Labels: None

Clojure 1.5, core.typed 0.2.2


Type checking a namespace using clojure.core/defprotocol instead of clojure.core.typed/defprotocol> results in the following error:

Exception in thread "main" java.lang.AssertionError: Assert failed: 4: Cannot set! (U nil clojure.lang.MethodImplCache) to Any

        (set! (. f__5866__auto__ __methodImplCache) cache__5865__auto__)
(sub/subtype? (-> cval expr-type ret-t) (-> ctarget expr-type ret-t))

Here's a minimal project demonstrating the problem: https://github.com/noidi/core.typed-record-problem

Although the user guide mentions defprotocol>, it's very easy to run into this error by accident, and the error message does not give the user any hints as to what might be wrong. In the long term it would be best if core.typed could deal with clojure.core/defprotocol. As a stopgap measure, maybe core.typed could detect this error and instruct the user to use clojure.core.typed/defprotocol> instead?

Comment by Ambrose Bonnaire-Sergeant [ 08/Sep/13 6:05 AM ]

The first error is now about the protocol var being unannotated, which I'm happy enough should give people hints as to how to fix the error.


Fixed with: https://github.com/clojure/core.typed/commit/f65a3d20ac35c955c1014c79c72167c480f9509d

Generated at Tue Sep 02 19:11:28 CDT 2014 using JIRA 4.4#649-r158309.