2024 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于 页面,了解有关如何使用本工作的更多信息。

+1
编译器
已关闭

大家,你好 :)

今天早上我遇到了我觉得可能是编译器错误的问题,想知道这是否应该提交给 JIRA?

以下是我认为的最小化复现实例

(defprotocol P
  (^double p1 [p a])
  (^double p2 [p a]))

(let [p (reify P)]
  (min 0.0
       (case :p1
         :p1 (p1 p :foo)
         :p2 (p2 p :foo))))

错误

1. Caused by java.lang.ArrayIndexOutOfBoundsException
   Index -1 out of bounds for length 0

                Frame.java: 1262  clojure.asm.Frame/merge
                Frame.java: 1238  clojure.asm.Frame/merge
         MethodWriter.java: 1604  clojure.asm.MethodWriter/computeAllFrames
         MethodWriter.java: 1540  clojure.asm.MethodWriter/visitMaxs

...(我有完整的跟踪信息可以发送,或者上面的代码片段应该可以在 REPL 中工作)

以下任何一种方法都可以消除这个错误

  • 移除类型提示
  • 在 case 中添加 nil 作为默认值
  • 使协议函数成为常规的类型提示 defn
  • casemin 中提升出来(移除 min

我已经成功重构原始代码以解决这个问题,但请告诉我是否应该创建一个 JIRA 工单。

谢谢

詹姆斯

已关闭,备注为:已修复在 Clojure 1.12.0-beta1 中

1 答案

+1

https://clojure.atlassian.net/browse/CLJ-2698 创建了工单

如有需要,请随时评论。
谢谢!

...