Details
-
Type:
Defect
-
Status:
Closed
-
Priority:
Major
-
Resolution: Completed
-
Affects Version/s: Approved Backlog, Backlog, Release 1.2, Release 1.3
-
Fix Version/s: Release 1.3
-
Component/s: None
-
Labels:None
-
Environment:Affects Clojure from 1.2.0 to 1.3.0-alpha4
-
Approval:Ok
Description
The code below defines a macro wrapper around defrecord. Using it causes a VerifyError:
(defmacro mac1 [name properties]
(let [key-info (keyword (first (filter #(meta %) properties)))]
(prn key-info)
`(defrecord ~name ~properties)))
(mac1 One [^:key one, two])
Once this happens, the running Clojure process is oddly damaged. Changing the macro to a working version (see below) will not make the sample work with the tagged symbol, almost as if the symbol
'one (below) became corrupt. You either need to start a new REPL, or try to invoke the macro with a different tagged symbol.
The following code does work (note the forced conversion to a string):
(defmacro mac2 [name properties]
(let [key-info (keyword (str (first (filter #(meta %) properties))))]
(prn key-info)
`(defrecord ~name ~properties)))
(mac2 Two [^:key three, four])
Stu, can you please verify?