Closed
Description
dca288c introduced a bug that causes defining a conversion of type1 -> (seq-of type2) in a macro to fail, for example:
(ns example
(:require [byte-streams :as bs]))
(defmacro my-macro
[type]
`(bs/def-conversion [java.io.InputStream (bs/seq-of ~type)]
[_]
nil))
(my-macro java.util.Map)
It fails with the following stack trace:
Exception in thread "main" java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.Symbol
at clojure.core$ns_resolve.invoke(core.clj:3954)
at clojure.core$ns_resolve.invoke(core.clj:3951)
at clojure.core$resolve.invoke(core.clj:3960)
at byte_streams$abstract_type_descriptor.invoke(byte_streams.clj:70)
at byte_streams$def_conversion.doInvoke(byte_streams.clj:83)
at clojure.lang.RestFn.invoke(RestFn.java:497)
at clojure.lang.Var.invoke(Var.java:431)
at clojure.lang.AFn.applyToHelper(AFn.java:178)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.lang.Compiler.macroexpand1(Compiler.java:6468)
at clojure.lang.Compiler.macroexpand(Compiler.java:6529)
at clojure.lang.Compiler.macroexpand(Compiler.java:6531)
at clojure.lang.Compiler.eval(Compiler.java:6603)
at clojure.lang.Compiler.load(Compiler.java:7064)
at clojure.lang.RT.loadResourceScript(RT.java:370)
at clojure.lang.RT.loadResourceScript(RT.java:361)
at clojure.lang.RT.load(RT.java:440)
at clojure.lang.RT.load(RT.java:411)
at clojure.core$load$fn__5018.invoke(core.clj:5530)
at clojure.core$load.doInvoke(core.clj:5529)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at user$eval5$fn__12.invoke(NO_SOURCE_FILE:1)
at user$eval5.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6619)
at clojure.lang.Compiler.eval(Compiler.java:6609)
at clojure.lang.Compiler.eval(Compiler.java:6582)
at clojure.core$eval.invoke(core.clj:2852)
at clojure.main$eval_opt.invoke(main.clj:308)
at clojure.main$initialize.invoke(main.clj:327)
at clojure.main$null_opt.invoke(main.clj:362)
at clojure.main$main.doInvoke(main.clj:440)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
This happens because the (seq-of java.util.Map) is a clojure.lang.Cons
, which causes it to fails the list?
check in seq-of?
. Changing list?
to seq?
fixes the issue, but I don't know if that will introduce some other issues. It doesn't seem to fail if it is defined normally outside of the macro. I can't figure out where the Cons
is being introduced, or why it only gets introduced as part of a macro evaluation.
Metadata
Metadata
Assignees
Labels
No labels