<!--
RSS generated by JIRA (4.4#649-r158309) at Tue May 21 10:12:59 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=project+%3D+CLJ&tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>Clojure JIRA</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+CLJ</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="1000" total="1003"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[CLJ-1209] Teach clojure.test reporting about ex-info/ex-data</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1209</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When clojure.test/deftest does error reports on unexpected exceptions it currently ignores ExceptionInfo and the valuable ex-data it carries. So this patch simple prints this data, it might be helpful to pprint or format it in another way but this was good enough for me.&lt;/p&gt;

&lt;p&gt;See example from my tests: &lt;a href=&quot;https://gist.github.com/thheller/5559391&quot;&gt;https://gist.github.com/thheller/5559391&lt;/a&gt;&lt;/p&gt;
</description>
                <environment></environment>
            <key id="16182">CLJ-1209</key>
            <summary>Teach clojure.test reporting about ex-info/ex-data</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="thheller">Thomas Heller</reporter>
                        <labels>
                    </labels>
                <created>Sat, 11 May 2013 04:12:35 -0500</created>
                <updated>Sat, 11 May 2013 04:12:35 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11989" name="clj-test-print-ex-data.diff" size="1313" author="thheller" created="Sat, 11 May 2013 04:12:35 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1208] Namespace is not loaded on defrecord class init</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1208</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As a user of Clojure interop from Java, I want defrecords (and deftypes?) to load their namespaces upon class initialization so that I can simply construct and use AOT&apos;d record classes without manually requiring their namespaces first.&lt;/p&gt;

&lt;p&gt;Calling the defrecord&apos;s constructor may or may not result in &quot;Attempting to call unbound fn&quot; exceptions, depending on what code has already been run.&lt;/p&gt;

&lt;p&gt;This issue has been raised several times over the years, but I could not find an existing ticket for it:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/4CtSVWcD15A/shpMuyjMpxsJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/4CtSVWcD15A/shpMuyjMpxsJ&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://groups.google.com/d/msg/clojure/3DekTQZfDTk/wlssZL7EQWEJ&quot;&gt;https://groups.google.com/d/msg/clojure/3DekTQZfDTk/wlssZL7EQWEJ&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://groups.google.com/d/msg/clojure/K4gfjrLe8GA/OnB5g4SU0l8J&quot;&gt;https://groups.google.com/d/msg/clojure/K4gfjrLe8GA/OnB5g4SU0l8J&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="16176">CLJ-1208</key>
            <summary>Namespace is not loaded on defrecord class init</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Fri, 3 May 2013 17:21:54 -0500</created>
                <updated>Fri, 3 May 2013 17:21:54 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1207] Importing a class that does not exist fails to report the name of the class that did not exist</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1207</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Pop quiz: What Java class is missing from the classpath?&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;java.lang.NoClassDefFoundError: Could not initialize class com.annadaletech.nexus.util.logging__init
 at java.lang.Class.forName0 (Class.java:-2)
    java.lang.Class.forName (Class.java:264)
    clojure.lang.RT.loadClassForName (RT.java:2098)
    clojure.lang.RT.load (RT.java:430)
    clojure.lang.RT.load (RT.java:411)
    clojure.core$load$fn__5018.invoke (core.clj:5530)
    clojure.core$load.doInvoke (core.clj:5529)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invoke (core.clj:5336)
    clojure.core$load_lib$fn__4967.invoke (core.clj:5375)
    clojure.core$load_lib.doInvoke (core.clj:5374)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invoke (core.clj:619)
    clojure.core$load_libs.doInvoke (core.clj:5413)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invoke (core.clj:619)
    clojure.core$require.doInvoke (core.clj:5496)
    clojure.lang.RestFn.invoke (RestFn.java:512)
    novate.console.app$eval1736$loading__4910__auto____1737.invoke (app.clj:1)
    novate.console.app$eval1736.invoke (app.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:6619)
    clojure.lang.Compiler.eval (Compiler.java:6608)
    clojure.lang.Compiler.load (Compiler.java:7064)
    user$eval1732.invoke (NO_SOURCE_FILE:1)
    clojure.lang.Compiler.eval (Compiler.java:6619)
    clojure.lang.Compiler.eval (Compiler.java:6582)
    clojure.core$eval.invoke (core.clj:2852)
    clojure.main$repl$read_eval_print__6588$fn__6591.invoke (main.clj:259)
    clojure.main$repl$read_eval_print__6588.invoke (main.clj:259)
    clojure.main$repl$fn__6597.invoke (main.clj:277)
    clojure.main$repl.doInvoke (main.clj:277)
    clojure.lang.RestFn.invoke (RestFn.java:1096)
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__584.invoke (interruptible_eval.clj:56)
    clojure.lang.AFn.applyToHelper (AFn.java:159)
    clojure.lang.AFn.applyTo (AFn.java:151)
    clojure.core$apply.invoke (core.clj:617)
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1788)
    clojure.lang.RestFn.invoke (RestFn.java:425)
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:41)
    clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__625$fn__628.invoke (interruptible_eval.clj:171)
    clojure.core$comp$fn__4154.invoke (core.clj:2330)
    clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__618.invoke (interruptible_eval.clj:138)
    clojure.lang.AFn.run (AFn.java:24)
    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110)
    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:603)
    java.lang.Thread.run (Thread.java:722)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you guess &quot;com.annadaletech.nexus.util.logging__init&quot; you are wrong!&lt;/p&gt;

&lt;p&gt;Wait, I&apos;ll give you a hint:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(ns com.annadaletech.nexus.util.logging
  (:use [clojure.string :only [trim-newline]]
        [clojure.pprint :only [code-dispatch pprint with-pprint-dispatch *print-right-margin*]])
  (:import [java.io StringWriter]
           [org.slf4j MDC MarkerFactory Marker LoggerFactory]
           [java.util.concurrent.locks ReentrantLock]))

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Oh, sorry, did that not help?&lt;/p&gt;

&lt;p&gt;The correct answer is &quot;org.slf4j.MDC&quot;.  &lt;/p&gt;

&lt;p&gt;Having that information in the stack trace would have saved me nearly an hour. I think it is worth the effort to get that reported correctly.&lt;/p&gt;</description>
                <environment>1.5.1, OS X</environment>
            <key id="16172">CLJ-1207</key>
            <summary>Importing a class that does not exist fails to report the name of the class that did not exist</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hlewisship">Howard Lewis Ship</reporter>
                        <labels>
                        <label>feedback</label>
                    </labels>
                <created>Mon, 29 Apr 2013 17:36:32 -0500</created>
                <updated>Fri, 10 May 2013 16:51:24 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31079" author="cldwalker" created="Fri, 10 May 2013 13:56:45 -0500"  >&lt;p&gt;When I try this on a fresh project, I get this error:&lt;br/&gt;
&quot;ClassNotFoundException org.slf4j.MDC&lt;br/&gt;
        java.net.URLClassLoader$1.run (URLClassLoader.java:202)&lt;br/&gt;
        java.security.AccessController.doPrivileged (AccessController.java:-2)&quot;&lt;/p&gt;

&lt;p&gt;Howard, could you give us a project.clj or better yet a github repository that recreates this issue?&lt;/p&gt;</comment>
                    <comment id="31082" author="hlewisship" created="Fri, 10 May 2013 16:51:24 -0500"  >&lt;p&gt;I&apos;ll see what I can do. Probably be next week. Thanks for looking at this.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                        <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>hlewisship</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-1206] &apos;eval&apos; of closures or fns with runtime metadata within a call expr yields &quot;No matching ctor found&quot; exceptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1206</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I ran into some issues with &apos;eval&apos; when writing compilation strategies for Graph.  It seems these may have been known for some time &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;, but I couldn&apos;t find a ticket for them, so here we are.&lt;/p&gt;

&lt;p&gt;Clojure docs &lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; say &quot;If the operator is not a special form or macro, the call is considered a function call. Both the operator and the operands (if any) are evaluated, from left to right,&quot;  and &quot;Any object other than those discussed above will evaluate to itself.&quot;  While bare fns do seem to evaluate to themselves in all cases, when in a call expression, the evaluation of the operator fails on fn objects that are closures or have run-time metadata applied:&lt;/p&gt;

&lt;p&gt;;; raw non-closures are fine&lt;br/&gt;
user&amp;gt; (eval (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (inc x))) &lt;br/&gt;
#&amp;lt;user$eval30559$fn_&lt;em&gt;30560 user$eval30559$fn&lt;/em&gt;_30560@354ee11c&amp;gt;&lt;/p&gt;

&lt;p&gt;;; raw closures are fine&lt;br/&gt;
user&amp;gt; (eval (let &lt;span class=&quot;error&quot;&gt;&amp;#91;y 1&amp;#93;&lt;/span&gt; (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (+ x y))))&lt;br/&gt;
#&amp;lt;user$eval30511$fn_&lt;em&gt;30512 user$eval30511$fn&lt;/em&gt;_30512@3bac3a34&amp;gt;&lt;/p&gt;

&lt;p&gt;;; non-closures in exprs are fine&lt;br/&gt;
user&amp;gt; (eval `(~(fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (inc x)) 1))&lt;br/&gt;
2&lt;/p&gt;

&lt;p&gt;;; but closures in exprs cause an error&lt;br/&gt;
user&amp;gt; (eval `(~(let &lt;span class=&quot;error&quot;&gt;&amp;#91;y 1&amp;#93;&lt;/span&gt; (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (+ x y))) 1))&lt;br/&gt;
IllegalArgumentException No matching ctor found for class user$eval30535$fn__30536  clojure.lang.Reflector.invokeConstructor (Reflector.java:163)&lt;/p&gt;

&lt;p&gt;;; as do fns with metadata in exprs&lt;br/&gt;
user&amp;gt; (eval `(~(with-meta (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (inc x)) {:x 1}) 1))&lt;br/&gt;
IllegalArgumentException No matching ctor found for class clojure.lang.AFunction$1  clojure.lang.Reflector.invokeConstructor (Reflector.java:163)&lt;/p&gt;


&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://stackoverflow.com/a/11287181&quot;&gt;http://stackoverflow.com/a/11287181&lt;/a&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://clojure.org/evaluation&quot;&gt;http://clojure.org/evaluation&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16167">CLJ-1206</key>
            <summary>&apos;eval&apos; of closures or fns with runtime metadata within a call expr yields &quot;No matching ctor found&quot; exceptions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Apr 2013 18:27:49 -0500</created>
                <updated>Sun, 28 Apr 2013 18:27:49 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1205] Update Maven build for Nexus 2.4</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1205</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;These additions to the build configuration are necessary to support changes to the Sonatype Nexus server at oss.sonatype.org, which we use to promote our build artifacts into the Maven Central Repository.&lt;/p&gt;

&lt;p&gt;See Sonatype&apos;s announcement at &lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/lBpfII2u6vM/LQvr_rO5UGgJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/lBpfII2u6vM/LQvr_rO5UGgJ&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16155">CLJ-1205</key>
            <summary>Update Maven build for Nexus 2.4</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Apr 2013 20:29:15 -0500</created>
                <updated>Mon, 22 Apr 2013 20:29:15 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11967" name="0001-nexus-2.4-releases.patch" size="2692" author="stuart.sierra" created="Mon, 22 Apr 2013 20:29:15 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1204] hash is inconsistent with = for many BigInteger values</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1204</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The function &lt;tt&gt;hash&lt;/tt&gt; is documented to be consistent with &lt;tt&gt;=&lt;/tt&gt;.  For many BigInteger values, &lt;tt&gt;hash&lt;/tt&gt; is inconsistent with &lt;tt&gt;=&lt;/tt&gt;.  This leads to incorrect behavior for data structures like hash maps that use &lt;tt&gt;hash&lt;/tt&gt;.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user&amp;gt; (apply = [-1 -1N (biginteger -1)])
true
user&amp;gt; (map hash [-1 -1N (biginteger -1)])
(0 0 -1)

;; Incorrect return value with multiple keys = to each other
user&amp;gt; (assoc (hash-map -1N :should-be-replaced) (biginteger -1) :new-val)
{-1N :should-be-replaced, -1 :new-val}

;; array-map gives correct value, since it uses =, not hash
user&amp;gt; (assoc (array-map -1N :should-be-replaced) (biginteger -1) :new-val)
{-1N :new-val}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16150">CLJ-1204</key>
            <summary>hash is inconsistent with = for many BigInteger values</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Thu, 18 Apr 2013 19:54:05 -0500</created>
                <updated>Thu, 25 Apr 2013 18:42:40 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30971" author="jafingerhut" created="Thu, 18 Apr 2013 20:10:38 -0500"  >&lt;p&gt;Patch clj-1204-make-hash-consistent-with-equal-for-bigintegers-v1.txt dated Apr 18 2013 takes the following approach to the issue:&lt;/p&gt;

&lt;p&gt;Change the behavior of hasheq so that when given a BigInteger value that could fit into a long, returns the same hash code as that long value.&lt;/p&gt;

&lt;p&gt;hasheq continues to return x.hashCode() if the BigInteger value does not fit into a long.  This is consistent with the hash value returned by a BigInt value that does not fit into a long.&lt;/p&gt;

&lt;p&gt;New tests are included, some of which fail without the change to hasheq, but pass with the change.&lt;/p&gt;</comment>
                    <comment id="30973" author="jafingerhut" created="Thu, 18 Apr 2013 20:19:54 -0500"  >&lt;p&gt;Overwrite patch with one that leaves out some unnecessary code.&lt;/p&gt;</comment>
                    <comment id="31002" author="jafingerhut" created="Thu, 25 Apr 2013 18:42:40 -0500"  >&lt;p&gt;Changing priority to minor, since I suppose one could work around this issue, if you were diligent about it, by converting all BigIntegers to BigInts before they are ever used in a place where they are hashed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11964" name="clj-1204-make-hash-consistent-with-equal-for-bigintegers-v1.txt" size="2173" author="jafingerhut" created="Thu, 18 Apr 2013 20:19:54 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1203] Fallback to hash-based comparison for non-Comparables in Util.compare()</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1203</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I oftentimes use sorted collections, and my comparator functions usually look like that:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(fn [a b]
  (let [x (compare-according-to-my-use-case a b)]
    (if (zero? x)
       (compare a b)
       x)))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That is, I define the sorting order depending on the requirements of my use-case, and if that doesn&apos;t suffice to make a distinction, I simply fall back to the standard `compare` function in order to get a stable ordering anyhow. I think that&apos;s a widely used idiom, e.g., also used in &quot;Clojure Programming&quot; (for example page 109).&lt;/p&gt;

&lt;p&gt;The problem with this approach is that several data structures don&apos;t implement Comparable, and thus aren&apos;t applicable to `compare` (you&apos;ll get a ClassCastException).  Examples are maps, records, deftypes, and sequences.&lt;/p&gt;

&lt;p&gt;The patch I&apos;m going to attach extends `Util.compare()` with a fallback clause that performs a `hasheq()`-based comparison.  This results in a meaningless but at least stable sorting order which suffices for use-cases like the one  shown above.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16148">CLJ-1203</key>
            <summary>Fallback to hash-based comparison for non-Comparables in Util.compare()</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                    </labels>
                <created>Wed, 17 Apr 2013 02:42:29 -0500</created>
                <updated>Mon, 29 Apr 2013 02:30:08 -0500</updated>
                    <resolved>Mon, 29 Apr 2013 02:30:08 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30974" author="jafingerhut" created="Thu, 18 Apr 2013 21:01:21 -0500"  >&lt;p&gt;Patch 0001-Add-hasheq-based-fallback-to-Util.compare.patch dated Apr 17 2013 applies cleanly to latest master, but causes several unit tests in data_structures.clj to fail.  These are the kinds of things you would expect to fail with the change made in the patch, because the failing tests expect an exception to be thrown when comparing objects that don&apos;t implement Comparable, and with this patch&apos;s changes they no longer do.  If this patch&apos;s change is desired, those tests should probably be removed.&lt;/p&gt;</comment>
                    <comment id="30975" author="tsdh" created="Fri, 19 Apr 2013 02:34:51 -0500"  >&lt;p&gt;Thanks Andy, I can&apos;t believe I&apos;ve forgotten to re-run the tests. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Anyway, I&apos;m attaching a new version of the patch that deletes the few sorted-set and sorted-set-by invocations that check that an exception is thrown when creating sorted sets containing non-Comparables.&lt;/p&gt;</comment>
                    <comment id="30976" author="tsdh" created="Fri, 19 Apr 2013 02:35:28 -0500"  >&lt;p&gt;New version of the patch.&lt;/p&gt;</comment>
                    <comment id="31003" author="jafingerhut" created="Fri, 26 Apr 2013 14:47:49 -0500"  >&lt;p&gt;Tassilo, you say that one of your use cases is sorted collections.  Note that any compare function that returns 0 for two values will cause sorted sets and maps to treat the two compared values as equal, and at most one of them will get into the ordered set/map, the second treated as a duplicate, even though the values are not equal.  See &lt;a href=&quot;https://github.com/jafingerhut/thalia/blob/master/doc/other-topics/comparators.md#comparators-for-sorted-sets-and-maps-are-easy-to-get-wrong&quot;&gt;https://github.com/jafingerhut/thalia/blob/master/doc/other-topics/comparators.md#comparators-for-sorted-sets-and-maps-are-easy-to-get-wrong&lt;/a&gt; for an example (not based on your modified compare, but on a comparator that returns 0 for non-equal items).&lt;/p&gt;

&lt;p&gt;With your proposed change to compare, this occurrence would become very dependent upon the hash function used.  Probably quite rare, but it would crop up from time to time, and could potentially be very difficult to detect and track down the source.&lt;/p&gt;</comment>
                    <comment id="31019" author="tsdh" created="Mon, 29 Apr 2013 02:29:56 -0500"  >&lt;p&gt;Hi Andy, you are right.  It&apos;s possible to add an explicit equals()-check in cases the hashcodes are the same, but I think there&apos;s nothing you can do in the hashcodes-equal-but-objects-are-not case.  That is, there&apos;s no way to ensure the rule sgn(compare(x, y)) == -sgn(compare(y, x)), the transitivity rule, and the compare(x, y)==0 ==&amp;gt; sgn(compare(x, z))==sgn(compare(y, z)) for all z rule.&lt;/p&gt;

&lt;p&gt;I&apos;m closing that ticket.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11965" name="0001-Add-hasheq-based-fallback-to-Util.compare.patch" size="3032" author="tsdh" created="Fri, 19 Apr 2013 02:35:28 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1202] protocol fns with dashes may get compiled into property access when used higher order</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1202</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (defprotocol Foo (-foo [x]))
Foo
user=&amp;gt; (deftype Bar [] Foo (-foo [_] :baz))
user.Bar
user=&amp;gt; (map -foo [(Bar.)])
IllegalArgumentException No matching field found: foo &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; class user.Bar  
clojure.lang.Reflector.getInstanceField (Reflector.java:271)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I would have expected to see (:baz). The full stack is:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;IllegalArgumentException No matching field found: foo &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; class user.Bar
	clojure.lang.Reflector.getInstanceField (Reflector.java:271)
	clojure.lang.Reflector.invokeNoArgInstanceMember (Reflector.java:300)
	user/eval79/fn--80/G--71--82 (NO_SOURCE_FILE:11)
	user/eval79/fn--80/G--70--85 (NO_SOURCE_FILE:11)
	clojure.core/map/fn--4207 (core.clj:2485)
	clojure.lang.LazySeq.sval (LazySeq.java:42)
	clojure.lang.LazySeq.seq (LazySeq.java:60)
	clojure.lang.RT.seq (RT.java:484)
	clojure.core/seq (core.clj:133)
	clojure.core/print-sequential (core_print.clj:46)
	clojure.core/fn--5406 (core_print.clj:143)
	clojure.lang.MultiFn.invoke (MultiFn.java:231)
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I suspect this is somehow related to the property access changes to make Clojure/ClojureScript compatible. I was in fact prepping core.logic for a unified code base and was adopting the ClojureScript protocol naming convention when I encountered this issue.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-872&quot; title=&quot;Add support for property lookup&quot;&gt;&lt;del&gt;CLJ-872&lt;/del&gt;&lt;/a&gt; added dash property support to Clojure.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16147">CLJ-1202</key>
            <summary>protocol fns with dashes may get compiled into property access when used higher order</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Apr 2013 20:48:27 -0500</created>
                <updated>Fri, 10 May 2013 15:19:29 -0500</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30970" author="amalloy" created="Thu, 18 Apr 2013 19:18:35 -0500"  >&lt;p&gt;Attached patch fixes the issue, and adds regression test for it.&lt;/p&gt;</comment>
                    <comment id="31080" author="cldwalker" created="Fri, 10 May 2013 15:19:29 -0500"  >&lt;p&gt;Verified patch works&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11962" name="CLJ-1202.patch" size="1759" author="amalloy" created="Thu, 18 Apr 2013 19:18:35 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1201] There should also be writing in clojure.edn</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1201</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In clojure.edn I see only &quot;read&quot; and &quot;read-string&quot;.&lt;/p&gt;

&lt;p&gt;For symmetry I expect &quot;write&quot; and &quot;write-string&quot; to be nearby. At first it could be just alias for &quot;pr&quot; and &quot;pr-str&quot;, but in furure they may limited version of &quot;pr&quot; which only produces valid input for clojure.edn/read.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16142">CLJ-1201</key>
            <summary>There should also be writing in clojure.edn</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="vi">Vitaly Shukela</reporter>
                        <labels>
                        <label>edn</label>
                    </labels>
                <created>Mon, 15 Apr 2013 08:20:01 -0500</created>
                <updated>Mon, 15 Apr 2013 08:20:01 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1200] RestFn &amp; ArraySeq performance</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1200</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I was profiling one of my projects and noticed a hotspot inside functions using rest arguments.&lt;/p&gt;

&lt;p&gt;Most overloads of RestFn.invoke will construct an ArraySeq object. The ArraySeq constructor calls java.lang.Class.getComponentType, which seems to be pretty slow. The array&apos;s component type is cached in a field on the ArraySeq object for the sole purpose of passing it to Reflector.prepRet. I&apos;m not entirely sure of the total utility of prepRet, but it&apos;s clearly a no-op when passed Object.class, such as the case with the non-specialized base class of ArraySeq: the component type of object[] is Object.class.&lt;/p&gt;

&lt;p&gt;The attached patch eliminates the component type field from ArraySeq and passes Object.class to prepRet directly. It may be possible to eliminate calls to prepRet all together, but I&apos;ll assume that&apos;s a different ticket. With this patch, ArraySeq initialization no longer shows up as a hotspot when profiling.&lt;/p&gt;

&lt;p&gt;Before the patch:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (dotimes [n 10] (time (dotimes [i 5000000] ((fn [&amp;amp; args]) 1 2 3 4))))
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 874.742 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 900.277 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 911.164 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 872.132 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 885.495 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 897.537 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 879.691 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 888.52 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 871.556 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 1088.682 msecs&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After the patch:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (dotimes [n 10] (time (dotimes [i 5000000] ((fn [&amp;amp; args]) 1 2 3 4))))
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 628.144 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 634.163 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 617.397 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 622.714 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 646.743 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 648.708 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 629.223 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 638.058 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 725.473 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 636.909 msecs&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That&apos;s about a 30% reduction in execution time.&lt;/p&gt;

&lt;p&gt;Granted it only represents a change of 52 nanoseconds per RestFn invoke (181 ns to 129 ns), but this actually was a pretty decent win for a library that makes makes almost exclusively variadic function calls in a tight loop.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16141">CLJ-1200</key>
            <summary>RestFn &amp; ArraySeq performance</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bbloom">Brandon Bloom</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Sun, 14 Apr 2013 21:49:05 -0500</created>
                <updated>Thu, 18 Apr 2013 16:03:25 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>3</votes>
                        <watches>3</watches>
                                <attachments>
                    <attachment id="11958" name="no-getComponentType--v001.patch" size="3501" author="bbloom" created="Sun, 14 Apr 2013 21:49:05 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1199] Record values are not &apos;eval&apos;uated, unlike values of PersistentMap:</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1199</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;m not sure if this is by design, but it caught me off guard.  &lt;/p&gt;

&lt;p&gt;user&amp;gt; (defrecord A &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.A&lt;/p&gt;

&lt;p&gt;user&amp;gt; (eval (hash-map :x `long))&lt;br/&gt;
{:x #&amp;lt;core$long clojure.core$long@5de54eb7&amp;gt;}&lt;br/&gt;
user&amp;gt; (eval (-&amp;gt;A `long))&lt;br/&gt;
#user.A{:x clojure.core/long}&lt;br/&gt;
user&amp;gt; (eval (map-&amp;gt;A (hash-map :x `long)))&lt;br/&gt;
#user.A{:x clojure.core/long}&lt;/p&gt;

&lt;p&gt;and in case it matters, here&apos;s a simplified version of the real use case where this came up, with no eval &amp;#8211; just a macro:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (defmacro munge-meta1 &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (assoc x :schema (-&amp;gt;A (:schema (meta x)))))&lt;br/&gt;
#&apos;user/munge-meta1&lt;br/&gt;
user&amp;gt; (munge-meta1 ^{:schema long} {})&lt;br/&gt;
{:schema #user.A{:x long}}&lt;/p&gt;

&lt;p&gt;user&amp;gt; (defmacro munge-meta2 &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (assoc x :schema (hash-map :x (:schema (meta x)))))&lt;br/&gt;
#&apos;user/munge-meta2&lt;br/&gt;
user&amp;gt; (munge-meta2 ^{:schema long} {})&lt;br/&gt;
{:schema {:x #&amp;lt;core$long clojure.core$long@5de54eb7&amp;gt;}}&lt;/p&gt;

&lt;p&gt;This seems to be fixed by moving the record creation post-evaluation, so it&apos;s not a big deal, just surprising (plus I haven&apos;t yet convinced myself that this will always work if the user&apos;s schema itself contains record-creating forms, although it seems to work OK):&lt;/p&gt;

&lt;p&gt;user&amp;gt; (defmacro munge-meta1 &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (assoc x :schema `(-&amp;gt;A ~(:schema (meta x)))))&lt;br/&gt;
#&apos;user/munge-meta1&lt;br/&gt;
user&amp;gt; (munge-meta1 ^{:schema long} {})&lt;br/&gt;
{:schema #user.A{:x #&amp;lt;core$long clojure.core$long@5de54eb7&amp;gt;}}&lt;/p&gt;

&lt;p&gt;I brought this up on the mailing list here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure-dev/UgD35E1RQTo&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure-dev/UgD35E1RQTo&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16139">CLJ-1199</key>
            <summary>Record values are not &apos;eval&apos;uated, unlike values of PersistentMap:</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Sat, 13 Apr 2013 00:29:58 -0500</created>
                <updated>Sat, 13 Apr 2013 00:29:58 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1198] Apply metadata to primitive fns causes them to lose their primitive-ness</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1198</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user&amp;gt; (def f (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;^long x&amp;#93;&lt;/span&gt; x))&lt;br/&gt;
#&apos;user/f&lt;br/&gt;
user&amp;gt; (.invokePrim (with-meta f {}) 1)&lt;br/&gt;
IllegalArgumentException No matching method found: invokePrim for class clojure.lang.AFunction$1  clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)&lt;br/&gt;
user&amp;gt; (contains? (ancestors (class f)) clojure.lang.IFn$LO)&lt;br/&gt;
true&lt;br/&gt;
user&amp;gt; (contains? (ancestors (class (with-meta f {}))) clojure.lang.IFn$LO)&lt;br/&gt;
false&lt;/p&gt;

&lt;p&gt;We&apos;re working on libraries that use metadata on functions to track information about their arguments (schemata, etc), and this currently blocks us from fully supporting primitive fns. &lt;/p&gt;</description>
                <environment></environment>
            <key id="16138">CLJ-1198</key>
            <summary>Apply metadata to primitive fns causes them to lose their primitive-ness</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Sat, 13 Apr 2013 00:27:45 -0500</created>
                <updated>Sat, 13 Apr 2013 00:27:45 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1197] Allow fold to parallelize over lazy sequences</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1197</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This patch implements &lt;tt&gt;foldable-seq&lt;/tt&gt;, which allows fold to parallelize over a lazy sequence. See this conversation on the Clojure mailing list:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!msg/clojure/8RKCjF00ukQ/b5mmmOB5Uh4J&quot;&gt;https://groups.google.com/forum/#!msg/clojure/8RKCjF00ukQ/b5mmmOB5Uh4J&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The patch is code only, sadly. No tests because I&apos;ve not been able to find any existing tests for &lt;tt&gt;fold&lt;/tt&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/plQ16L1_FC0/CIyMVIgSZkkJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/plQ16L1_FC0/CIyMVIgSZkkJ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, I have tested it in a separate project successfully.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16137">CLJ-1197</key>
            <summary>Allow fold to parallelize over lazy sequences</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="paulbutcher">Paul Butcher</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Apr 2013 10:34:09 -0500</created>
                <updated>Wed, 10 Apr 2013 10:34:09 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11951" name="foldable-seq.diff" size="1774" author="paulbutcher" created="Wed, 10 Apr 2013 10:34:09 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1196] eval of defrecord instance with no fields produces {}, not itself</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1196</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user&amp;gt; (defrecord Foo [])&lt;br/&gt;
user.Foo&lt;br/&gt;
user&amp;gt; (Foo.)&lt;br/&gt;
#user.Foo{}&lt;br/&gt;
user&amp;gt; (eval (Foo.))&lt;br/&gt;
{}&lt;/p&gt;

&lt;p&gt;user&amp;gt; (defrecord Foo &lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.Foo&lt;br/&gt;
user&amp;gt; (eval (Foo. 1 2))&lt;br/&gt;
#user.Foo{:a 1, :b 2}&lt;/p&gt;

&lt;p&gt;As you can see, evaluating the record with no fields loses the type information.  This came up in code that uses records to describe argument schema information for functions in a macro, with no direct use of &apos;eval&apos;.  It is unexpected because of the inconsistency between empty and non-empty defrecords, and because the Clojure docs say &apos;Any object other than those discussed above will evaluate to itself.&apos;  &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://clojure.org/evaluation&quot;&gt;http://clojure.org/evaluation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;m happy to elaborate on the use case if there are questions.&lt;/p&gt;
</description>
                <environment>Mac OS X Clojure 1.5.1</environment>
            <key id="16135">CLJ-1196</key>
            <summary>eval of defrecord instance with no fields produces {}, not itself</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Apr 2013 01:55:04 -0500</created>
                <updated>Wed, 10 Apr 2013 11:42:33 -0500</updated>
                    <resolved>Wed, 10 Apr 2013 11:42:33 -0500</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30921" author="bronsa" created="Wed, 10 Apr 2013 05:11:17 -0500"  >&lt;p&gt;I think this is a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1093&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-1093&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30923" author="jawolfe" created="Wed, 10 Apr 2013 10:51:29 -0500"  >&lt;p&gt;You are right, sorry for the duplication.  I searched for empty record in JIRA and somehow missed that ticket.&lt;/p&gt;</comment>
                    <comment id="30924" author="jafingerhut" created="Wed, 10 Apr 2013 11:42:33 -0500"  >&lt;p&gt;Close as duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1093&quot; title=&quot;Empty record literals gets incorrectly evaluated to array-maps&quot;&gt;CLJ-1093&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1195] emit-hinted-impl expands to non-ns-qualified invocation of &apos;fn&apos;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1195</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(ns plumbing.tmp&lt;br/&gt;
  (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;fn&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;(defprotocol Foo&lt;br/&gt;
  (foo &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;(extend-protocol Foo&lt;br/&gt;
  Object&lt;br/&gt;
  (foo &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;yields &lt;/p&gt;

&lt;p&gt;CompilerException java.lang.RuntimeException: Unable to resolve symbol: fn in this context, compiling&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;/Users/w01fe/prismatic/prismatic/plumbing/src/plumbing/tmp.clj:7:1)&lt;/p&gt;

&lt;p&gt;This makes it difficult to construct a namespace that provides a replacement def for fn.&lt;/p&gt;</description>
                <environment>Mac os X Clojure 1.5.1</environment>
            <key id="16134">CLJ-1195</key>
            <summary>emit-hinted-impl expands to non-ns-qualified invocation of &apos;fn&apos;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Tue, 9 Apr 2013 22:23:47 -0500</created>
                <updated>Tue, 9 Apr 2013 22:23:47 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1194] Typo in core.reducers</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1194</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As far as I can say, there is a typo in core.reducers (and therefore core.reducers/monoid is unusable in 1.5.1):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/clj/clojure/core/reducers.clj#L321&quot;&gt;https://github.com/clojure/clojure/blob/master/src/clj/clojure/core/reducers.clj#L321&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(fn m &amp;lt;-- &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;
    ([] (ctor))
    ([a b] (op a b))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Should I submit a patch to fix this?&lt;/p&gt;</description>
                <environment></environment>
            <key id="16133">CLJ-1194</key>
            <summary>Typo in core.reducers</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="si14">Dmitry Groshev</reporter>
                        <labels>
                    </labels>
                <created>Mon, 8 Apr 2013 14:54:56 -0500</created>
                <updated>Tue, 9 Apr 2013 04:49:58 -0500</updated>
                    <resolved>Tue, 9 Apr 2013 04:49:58 -0500</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30908" author="gshayban" created="Mon, 8 Apr 2013 15:09:36 -0500"  >&lt;p&gt;I guess you didn&apos;t try to actually &lt;b&gt;use&lt;/b&gt; the function to see if it is actually broken...&lt;/p&gt;

&lt;p&gt;m is not a argument vector, those are below in the function clauses.&lt;/p&gt;</comment>
                    <comment id="30909" author="si14" created="Mon, 8 Apr 2013 15:26:24 -0500"  >&lt;p&gt;I did, but as it turns out the error was somewhere else and I can&apos;t reproduce it within a &quot;clean&quot; environment. Sorry for this hasty ticket.&lt;/p&gt;</comment>
                    <comment id="30914" author="jafingerhut" created="Mon, 8 Apr 2013 23:31:29 -0500"  >&lt;p&gt;Dmitry, do you think it is OK to close this ticket as declined, meaning no change will be made in response to it?  I can do that for you, if you wish.&lt;/p&gt;</comment>
                    <comment id="30917" author="si14" created="Tue, 9 Apr 2013 04:49:49 -0500"  >&lt;p&gt;Andy, I&apos;ll close it myself if you don&apos;t mind. I would done it earlier, but didn&apos;t have sufficient rights in JIRA.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1193] bigint, biginteger throw on double values outside of long range</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1193</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This works fine:&lt;/p&gt;

&lt;p&gt;    user&amp;gt; (bigint (* 0.99 Long/MAX_VALUE))&lt;br/&gt;
    9131138316486227968N&lt;/p&gt;

&lt;p&gt;but this and any other Float or Double values outside the range of a&lt;br/&gt;
long throw an exception:&lt;/p&gt;

&lt;p&gt;    user&amp;gt; (bigint (* 1.01 Long/MAX_VALUE))&lt;br/&gt;
    IllegalArgumentException Value out of range for long: 9.315605757223324E18  clojure.lang.RT.longCast (RT.java:1178)&lt;/p&gt;

&lt;p&gt;Similarly for biginteger&lt;/p&gt;</description>
                <environment></environment>
            <key id="16131">CLJ-1193</key>
            <summary>bigint, biginteger throw on double values outside of long range</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 7 Apr 2013 16:35:13 -0500</created>
                <updated>Fri, 17 May 2013 10:52:24 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30902" author="jafingerhut" created="Sun, 7 Apr 2013 16:38:48 -0500"  >&lt;p&gt;Patch clj-1197-make-bigint-work-on-all-doubles-v1.txt dated Apr 7 2013 changes bigint and biginteger so that they return the correct value for all float and double values, and no longer throw an exception.&lt;/p&gt;</comment>
                    <comment id="31100" author="cldwalker" created="Fri, 17 May 2013 10:52:24 -0500"  >&lt;p&gt;Looks good. Tests pass and the failing example now converts correctly&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11948" name="clj-1197-make-bigint-work-on-all-doubles-v1.txt" size="2499" author="jafingerhut" created="Sun, 7 Apr 2013 16:38:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1192] vec function is substantially slower than into function</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1192</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;(vec coll)&lt;/tt&gt; and &lt;tt&gt;(into [] coll)&lt;/tt&gt; do exactly the same thing. However, due to &lt;tt&gt;into&lt;/tt&gt; using transients, it is substantially faster. On my machine:&lt;/p&gt;

&lt;p&gt;(time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 100&amp;#93;&lt;/span&gt; (vec (range 100000))))&lt;br/&gt;
&quot;Elapsed time: 732.56 msecs&quot;&lt;/p&gt;

&lt;p&gt;(time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 100&amp;#93;&lt;/span&gt; (into [] (range 100000))))&lt;br/&gt;
&quot;Elapsed time: 491.411 msecs&quot;&lt;/p&gt;

&lt;p&gt;This is consistently repeatable.&lt;/p&gt;

&lt;p&gt;Since &lt;tt&gt;vec&lt;/tt&gt;&apos;s sole purpose is to transform collections into vectors, it should do so at the maximum speed available.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16129">CLJ-1192</key>
            <summary>vec function is substantially slower than into function</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="lvanderhart">Luke VanderHart</reporter>
                        <labels>
                    </labels>
                <created>Sat, 6 Apr 2013 14:06:22 -0500</created>
                <updated>Sun, 7 Apr 2013 17:50:41 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30903" author="jafingerhut" created="Sun, 7 Apr 2013 17:50:41 -0500"  >&lt;p&gt;I am pretty sure that Clojure 1.5.1 also uses transient vectors for (vec (range n)) (probably also some earlier versions of Clojure, too).&lt;/p&gt;

&lt;p&gt;Look at vec in core.clj.  It checks whether its arg is a java.util.Collection, which lazy seqs are, so calls (clojure.lang.LazilyPersistentVector/create coll).&lt;/p&gt;

&lt;p&gt;LazilyPersistentVector&apos;s create method checks whether its argument is an ISeq, which lazy seqs are, so it calls PersistentVector.create(RT.seq(coll)).&lt;/p&gt;

&lt;p&gt;All 3 of PersistentVector&apos;s create() methods use transient vectors to build up the result.&lt;/p&gt;

&lt;p&gt;I suspect the difference in run times are not because of transients or not, but because of the way into uses reduce, and perhaps may also have something to do with the perhaps-unnecessary call to RT.seq in LazilyPersistentVector&apos;s create method (in this case, at least &amp;#8211; it is likely needed for other types of arguments).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1191] Improve apropos to show some indication of namespace of symbols found</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1191</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;apropos does find all symbols in all namespaces that match the argument, but the return value gives no clue as to which namespace the found symbols are in.  It can even return multiple occurrences of the same symbol, which only gives a clue that the symbol exists in more than one namespace, but not which ones.  For example:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (apropos &quot;replace&quot;)&lt;br/&gt;
(postwalk-replace prewalk-replace replace re-quote-replacement replace replace-first)&lt;/p&gt;

&lt;p&gt;It would be nice if the returned symbols could indicate the namespace, either always, or if the found symbol is not in the current namespace.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16128">CLJ-1191</key>
            <summary>Improve apropos to show some indication of namespace of symbols found</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Thu, 4 Apr 2013 19:52:30 -0500</created>
                <updated>Fri, 5 Apr 2013 13:34:10 -0500</updated>
                                    <version>Release 1.5</version>
                <version>Release 1.6</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30876" author="jafingerhut" created="Thu, 4 Apr 2013 20:25:56 -0500"  >&lt;p&gt;Path clj-1191-patch-v1.txt enhances apropos to put a namespace/ qualifier before every symbol found that is not in the current namespace &lt;b&gt;ns&lt;/b&gt;.  It also finds the shortest namespace alias if there is more than one.  Examples of output with patch:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (apropos &quot;replace&quot;)&lt;br/&gt;
(replace clojure.string/re-quote-replacement clojure.string/replace clojure.string/replace-first clojure.walk/postwalk-replace clojure.walk/prewalk-replace)&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (require &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.string :as str&amp;#93;&lt;/span&gt;)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (apropos &quot;replace&quot;)&lt;br/&gt;
(replace clojure.walk/postwalk-replace clojure.walk/prewalk-replace str/re-quote-replacement str/replace str/replace-first)&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (in-ns &apos;clojure.string)&lt;br/&gt;
#&amp;lt;Namespace clojure.string&amp;gt;&lt;br/&gt;
clojure.string=&amp;gt; (clojure.repl/apropos &quot;replace&quot;)&lt;br/&gt;
(re-quote-replacement replace replace-by replace-first replace-first-by replace-first-char replace-first-str clojure.core/replace clojure.walk/postwalk-replace clojure.walk/prewalk-replace)&lt;/p&gt;</comment>
                    <comment id="30879" author="trptcolin" created="Fri, 5 Apr 2013 13:34:10 -0500"  >&lt;p&gt;+1 &lt;/p&gt;

&lt;p&gt;apropos as it already stands is quite helpful for already-referred vars, but not for vars that are only in other nses.&lt;/p&gt;

&lt;p&gt;This update includes the information someone would need to further investigate the output.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11942" name="clj-1191-patch-v1.txt" size="2704" author="jafingerhut" created="Thu, 4 Apr 2013 20:25:56 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1190] Javadoc for public Java API</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1190</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;We should publish javadoc for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1188&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-1188&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;make sure to publish on the the public API classes and interfaces&lt;/li&gt;
	&lt;li&gt;if IFn remains part of public interface, find javadoc control knob to disable including the nested interfaces dealing with primitives&lt;/li&gt;
	&lt;li&gt;automate publishing the docs somewhere (javadoc.clojure.org?)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This ticket should wait until &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1188&quot; title=&quot;Public Java API&quot;&gt;&lt;del&gt;CLJ-1188&lt;/del&gt;&lt;/a&gt; is ok&apos;ed.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16124">CLJ-1190</key>
            <summary>Javadoc for public Java API</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Wed, 3 Apr 2013 06:51:13 -0500</created>
                <updated>Wed, 3 Apr 2013 06:51:13 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1189] Map-destructuring :or fumble needs compiler warning</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1189</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Here is a map-destructuring blunder that I wish the compiler warned about: &lt;/p&gt;

&lt;p&gt;(defn server&lt;br/&gt;
  [{servlet ::servlet&lt;br/&gt;
    type ::type&lt;br/&gt;
    :or {::type :jetty}&lt;br/&gt;
    :as service-map}]&lt;/p&gt;

&lt;p&gt;It would be splendid to get a warning that :or keys that are not symbols being bound have no effect. &lt;/p&gt;

&lt;p&gt;The incomplete code snippet above comes from Pedestal.service 0.1.0. &lt;/p&gt;

&lt;p&gt;Here is a complete one-line example with the coding error: &lt;/p&gt;

&lt;p&gt;user&amp;gt; (defn picnic &lt;span class=&quot;error&quot;&gt;&amp;#91;{botulism :botulism :or {:botulism 6}}&amp;#93;&lt;/span&gt; botulism) &lt;br/&gt;
#&apos;user/picnic &lt;br/&gt;
user&amp;gt; (picnic {}) &lt;br/&gt;
nil &lt;br/&gt;
user&amp;gt; ;; I intended 6. &lt;/p&gt;</description>
                <environment></environment>
            <key id="16118">CLJ-1189</key>
            <summary>Map-destructuring :or fumble needs compiler warning</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="pbwolf">Phill Wolf</reporter>
                        <labels>
                    </labels>
                <created>Sun, 31 Mar 2013 08:02:44 -0500</created>
                <updated>Sun, 31 Mar 2013 08:02:44 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1188] Public Java API</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1188</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Problem: Java consumers need an API into Clojure that does not drag in a ton of concrete implementation detail.&lt;/p&gt;

&lt;p&gt;Solution: Very small API class that allows looking up Vars (returning IFn), and reading data (as edn).  Uses Clojure logic where possible, e.g. Var.intern.&lt;/p&gt;

&lt;p&gt;Current patch: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1188&quot; title=&quot;Public Java API&quot;&gt;&lt;del&gt;CLJ-1188&lt;/del&gt;&lt;/a&gt;-via-var-intern.patch&lt;/p&gt;

&lt;p&gt;Also considered:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;wrapper class (inconvenient for users, wrappers anathema in Clojure)&lt;/li&gt;
	&lt;li&gt;common superinterface for IFn and Deref (unnecessary, might bloat vtable)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;See also &lt;a href=&quot;http://dev.clojure.org/display/design/Improvements+to+interop+from+Java&quot;&gt;http://dev.clojure.org/display/design/Improvements+to+interop+from+Java&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16116">CLJ-1188</key>
            <summary>Public Java API</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sat, 30 Mar 2013 08:37:15 -0500</created>
                <updated>Fri, 12 Apr 2013 13:51:46 -0500</updated>
                    <resolved>Fri, 12 Apr 2013 13:51:46 -0500</resolved>
                                            <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30856" author="hiredman" created="Tue, 2 Apr 2013 11:34:02 -0500"  >&lt;p&gt;the attached patch would turn&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;...
public static Var ENQUEUE = RT.var(&quot;greenmail.smtp&quot;,&quot;enqueue&quot;);
...
ENQUEUE.fn().invoke(userManager, state.getMessage());
...
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;in to something like&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;...
public static VRef ENQUEUE = API.vref(&quot;greenmail.smtp/enqueue&quot;);
...
ENQUEUE.fn().invoke(userManager, state.getMessage());
...
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;what is the value of VRefs over using Vars directly?&lt;/p&gt;</comment>
                    <comment id="30859" author="hiredman" created="Tue, 2 Apr 2013 17:56:38 -0500"  >&lt;p&gt;using this from a java api, it looks like if the namespace the var is in is not loaded when you go to create a VRef it will return null, generally my java code that calls clojure looks something like&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;public static Var FOO = RT.var(&quot;namespace&quot;, &quot;name&quot;);
public static NAMESPACE = Symbol.intern(&quot;namespace&quot;);
public static Var REQUIRE = RT.var(&quot;clojure&quot;, &quot;require&quot;);

static {
  REQUIRE.invoke(NAMESPACE);
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;can you tell me without checking the java/jvm spec if FOO is null? does the static init block run before or after static fields are init&apos;ed? returning null just seems like a bad idea.&lt;/p&gt;</comment>
                    <comment id="30864" author="stu" created="Wed, 3 Apr 2013 06:53:24 -0500"  >&lt;p&gt;Per discussion on the ticket and with Rich, the wrapper-free approach (Apr 3 patch) is preferred.&lt;/p&gt;</comment>
                    <comment id="30865" author="stu" created="Wed, 3 Apr 2013 07:03:50 -0500"  >&lt;p&gt;Hi Kevin,&lt;/p&gt;

&lt;p&gt;The purpose of not returning Vars is outlined in the &lt;a href=&quot;http://dev.clojure.org/display/design/Improvements+to+interop+from+Java&quot;&gt;design discussion&lt;/a&gt;.  That said, it is possible to return IFn, which does not drag in too much implementation detail (just a javadoc config tweak, see &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1190&quot; title=&quot;Javadoc for public Java API&quot;&gt;CLJ-1190&lt;/a&gt;).  Today&apos;s patch returns IFn, which addresses the wrapper ickiness demonstrated by your code examples.&lt;/p&gt;

&lt;p&gt;Java static initializers run in lexical order, and I trust Java programmers to know Java. &lt;/p&gt;

&lt;p&gt;I can think of several options other than returning null when a var is not available, and they are all complecting, inconsistent with Clojure, or both.&lt;/p&gt;</comment>
                    <comment id="30866" author="hiredman" created="Wed, 3 Apr 2013 12:08:31 -0500"  >&lt;p&gt;Hey,&lt;/p&gt;

&lt;p&gt;Always returning the var is very consistent with clojure, it is what RT.var does. It is what the var lookups emitted by the compiler do. RT.var is most likely the point through which most java that calls clojure goes at the moment.&lt;/p&gt;

&lt;p&gt;As to &quot;hiding&quot; vars, how about creating a clojure.lang.ILink interface with both deref() and fn(), have Var implement it. The previous discussion I see linked all seems to presume hiding Var without discussion of why it should be hidden. What I see Rich saying is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So RT.var is the right idea. It would be nice to hide the Var class,  &lt;br/&gt;
but unfortunately we can&apos;t make ClojureAPI.var() return both IFn and  &lt;br/&gt;
IDeref without inventing a common subinterface. There are other  &lt;br/&gt;
similar details.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We will need an interface unifying IDeref and IFn for the return type  &lt;br/&gt;
of API.var()&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It seems like Rich is suggesting that ILink or whatever should also bring in IFn, but I wonder if having a fn() that does the cast for you is an acceptable alternative to that.&lt;/p&gt;</comment>
                    <comment id="30938" author="richhickey" created="Fri, 12 Apr 2013 08:24:42 -0500"  >&lt;p&gt;The API should be called var, not fn, and should return IFn. Also, I really want the logic of RT.var (i.e. Var.intern) to be used, not this new logic. Please find another way to handle the string/symbol support.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11932" name="CLJ-1188.patch" size="7178" author="stu" created="Sat, 30 Mar 2013 08:40:34 -0500" />
                    <attachment id="11954" name="CLJ-1188-via-var-intern.patch" size="7486" author="stu" created="Fri, 12 Apr 2013 11:51:59 -0500" />
                    <attachment id="11939" name="CLJ-1188-wrapper-free.patch" size="6010" author="stu" created="Wed, 3 Apr 2013 06:53:24 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1187] Clojure loses quoted metdata on empty literals</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1187</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user=&amp;gt; (meta &apos;^:foo [])&lt;br/&gt;
nil&lt;/p&gt;

&lt;p&gt;while&lt;br/&gt;
user=&amp;gt; (meta &apos;^:foo &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;)&lt;br/&gt;
{:foo true}&lt;/p&gt;

&lt;p&gt;This bug propagates to ^:const vars:&lt;br/&gt;
user=&amp;gt; (def ^:const foo ^:foo [])&lt;br/&gt;
#&apos;user/foo&lt;br/&gt;
user=&amp;gt; (meta foo)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (meta @#&apos;foo)&lt;br/&gt;
{:foo true}&lt;/p&gt;</description>
                <environment></environment>
            <key id="16102">CLJ-1187</key>
            <summary>Clojure loses quoted metdata on empty literals</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Fri, 22 Mar 2013 13:47:34 -0500</created>
                <updated>Fri, 12 Apr 2013 09:42:02 -0500</updated>
                                    <version>Release 1.5</version>
                <version>Release 1.6</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30804" author="bronsa" created="Fri, 22 Mar 2013 14:12:20 -0500"  >&lt;p&gt;After patch:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (meta &apos;^:foo [])&lt;br/&gt;
{:foo true}&lt;br/&gt;
user=&amp;gt; (meta &apos;^:foo &lt;span class=&quot;error&quot;&gt;&amp;#91;:a&amp;#93;&lt;/span&gt;)&lt;br/&gt;
{:foo true}&lt;br/&gt;
user=&amp;gt; (def ^:const foo ^:foo [])&lt;br/&gt;
#&apos;user/foo&lt;br/&gt;
user=&amp;gt; (meta foo)&lt;br/&gt;
{:foo true}&lt;/p&gt;
</comment>
                    <comment id="30838" author="stu" created="Fri, 29 Mar 2013 06:13:16 -0500"  >&lt;p&gt;I believe the title should read &quot;Clojure loses quoted metdata on empty literals&quot;.&lt;/p&gt;</comment>
                    <comment id="30839" author="stu" created="Fri, 29 Mar 2013 06:16:15 -0500"  >&lt;p&gt;At first glance, the implementation looks wrong in that it blocks non-IObjs ever getting to EmptyExpr. Probably all persistent collections are IObjs, but would not want to bake this in.&lt;/p&gt;</comment>
                    <comment id="30842" author="bronsa" created="Fri, 29 Mar 2013 07:00:19 -0500"  >&lt;p&gt;You&apos;re right, I&apos;ve updated my patch, it should work as expected now&lt;/p&gt;</comment>
                    <comment id="30877" author="jafingerhut" created="Thu, 4 Apr 2013 21:44:12 -0500"  >&lt;p&gt;Nicola: Your updated patch 001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1187&quot; title=&quot;Clojure loses quoted metdata on empty literals&quot;&gt;CLJ-1187&lt;/a&gt;.patch dated Mar 29, 2013 gives syntax errors when I try to compile it.&lt;/p&gt;</comment>
                    <comment id="30878" author="bronsa" created="Fri, 5 Apr 2013 09:06:59 -0500"  >&lt;p&gt;Oh, the irony, I messed up some parentheses writing java.&lt;/p&gt;

&lt;p&gt;Sorry for it, here&apos;s the correct patch, it applies on upstream/master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11943" name="001-CLJ-1187.patch" size="2114" author="bronsa" created="Fri, 5 Apr 2013 09:06:59 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1185] `reductions should respect `reduced</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1185</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This returns 16:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(reduce (fn [acc x]
          (let [x&apos; (* x x)]
            (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (&amp;gt; x&apos; 10)
              (reduced x&apos;)
              x&apos;)))
        (range))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But replacing `reduce with `reductions will never terminate:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(reductions (fn [acc x]
              (let [x&apos; (* x x)]
                (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (&amp;gt; x&apos; 10)
                  (reduced x&apos;)
                  x&apos;)))
            (range))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is because `reductions ignores &apos;clojure.lang.Reduced, it never tests for `reduced?&lt;/p&gt;

&lt;p&gt;I know that I only just discovered the `reduced, function, but `reductions is a big part of my debugging process, so it&apos;s unfortunate that they don&apos;t work together.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16094">CLJ-1185</key>
            <summary>`reductions should respect `reduced</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bbloom">Brandon Bloom</reporter>
                        <labels>
                    </labels>
                <created>Sat, 16 Mar 2013 18:09:34 -0500</created>
                <updated>Wed, 10 Apr 2013 17:08:45 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30775" author="bbloom" created="Sat, 16 Mar 2013 18:10:44 -0500"  >&lt;p&gt;Attaching patch&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11921" name="CLJ-1181-v001.patch" size="1024" author="bbloom" created="Sat, 16 Mar 2013 18:10:44 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1184] Evaling #{do ...} or [do ...] is treated as the do special form</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1184</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Evaluating a persistent collection for which the function &apos;first&apos; returns the symbol &apos;do&apos; leads to that collection being treated as the do special form, even though it may be a vector or even a set. IMHO, the expected result would be to report that &apos;do&apos; cannot be resolved. For the cause, see the if condition on line 6604 of Compiler.java in clojure-1.5.1.&lt;/p&gt;

&lt;p&gt;E.g.:&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;do 1 2&amp;#93;&lt;/span&gt;&lt;br/&gt;
;=&amp;gt; 2&lt;/p&gt;

&lt;p&gt;#{&quot;hello&quot; &quot;goodbye&quot; do}&lt;br/&gt;
;=&amp;gt; &quot;hello&quot;&lt;br/&gt;
; Wat?&lt;/p&gt;</description>
                <environment></environment>
            <key id="16093">CLJ-1184</key>
            <summary>Evaling #{do ...} or [do ...] is treated as the do special form</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jirkamarsik">Ji&#345;&#237; Mar&#353;&#237;k</reporter>
                        <labels>
                        <label>Compiler</label>
                        <label>bug</label>
                    </labels>
                <created>Sat, 16 Mar 2013 08:56:32 -0500</created>
                <updated>Fri, 12 Apr 2013 09:42:02 -0500</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1183] java interop - cannot call a final method on non-public superclass </title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1183</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;when trying to call a method on a concrete class that is defined as final on its super class that is not public, the runtime throws:&lt;/p&gt;

&lt;p&gt;&quot;java.lang.IllegalArgumentException: Can&apos;t call public method of non-public class&quot;&lt;/p&gt;

&lt;p&gt;even when fully annotated, Reflection is still used and the call fails.&lt;/p&gt;

&lt;p&gt;you can read the full description here &lt;a href=&quot;https://groups.google.com/d/msg/clojure/p2tBMT-BIYc/mDQB8cSponMJ&quot;&gt;https://groups.google.com/d/msg/clojure/p2tBMT-BIYc/mDQB8cSponMJ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I included a sample project that demonstrate the problem&lt;/p&gt;</description>
                <environment></environment>
            <key id="16085">CLJ-1183</key>
            <summary>java interop - cannot call a final method on non-public superclass </summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="shlomi">Shlomi</reporter>
                        <labels>
                    </labels>
                <created>Wed, 13 Mar 2013 06:14:49 -0500</created>
                <updated>Sat, 18 May 2013 19:22:33 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="30755" author="shlomi" created="Wed, 13 Mar 2013 06:51:24 -0500"  >&lt;p&gt;in my sample project, i used a nested class, but i didnt have to (as pointed by Marko Topolnik). changing the java code to:&lt;/p&gt;

&lt;p&gt;  abstract class AbstractParent{&lt;br/&gt;
      final public int x() {return 6;}&lt;br/&gt;
  }&lt;/p&gt;

&lt;p&gt;  public class test  extends AbstractParent {}&lt;/p&gt;

&lt;p&gt;and the clojure to:&lt;/p&gt;

&lt;p&gt;  (ns call-test.core (:gen-class))&lt;br/&gt;
  (defn -main &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt;(.x ^AbstractParent (test.)))&lt;/p&gt;


&lt;p&gt;would produce the same error,&lt;/p&gt;

&lt;p&gt;java.lang.IllegalArgumentException: Can&apos;t call public method of non-public class: public final int AbstractParent.x()&lt;br/&gt;
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:88)&lt;/p&gt;</comment>
                    <comment id="31094" author="zoowar" created="Thu, 16 May 2013 12:05:36 -0500"  >&lt;p&gt;This issue affects the upcoming netty-4.0 release in which the public modifier of AbstractBootstrap was removed.&lt;/p&gt;</comment>
                    <comment id="31106" author="m@mattp.name" created="Sat, 18 May 2013 03:48:49 -0500"  >&lt;p&gt;To get Netty 4 working with Clojure I had to create a set of public static Java methods for the various inaccessible Netty calls, which I then call from Clojure. A PITA, but works fine. Happy to post code if anyone would find it useful.&lt;/p&gt;</comment>
                    <comment id="31107" author="shlomi" created="Sat, 18 May 2013 04:31:36 -0500"  >&lt;p&gt;Matthew, i kinda left that project after running to these and other troubles (focused on previous Netty until version 4 will become ready and be properly documented), but i&apos;d still like to see your code. you have a github account or a gist with it?&lt;/p&gt;

&lt;p&gt;Clojure devs - are there any plans of checking this problem out? it came up from Netty, but the problem is pretty generic&lt;/p&gt;</comment>
                    <comment id="31113" author="m@mattp.name" created="Sat, 18 May 2013 19:22:33 -0500"  >&lt;p&gt;Shlomi: here&apos;s a gist with the code I&apos;m using in it. It&apos;s not comprehensive, just the bits I needed. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/scramjet/5606195&quot;&gt;https://gist.github.com/scramjet/5606195&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11912" name="call-test.tar.gz" size="1234" author="shlomi" created="Wed, 13 Mar 2013 06:14:49 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1182] Regexp are never equal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1182</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The following (= #&quot;asd&quot; #&quot;asd&quot;) will return false in CLJ, even if they are the same.&lt;/p&gt;

&lt;p&gt;Consequently, everything with a regexp in it (lists, vectors, maps...) will never be equal.&lt;/p&gt;

&lt;p&gt;It seems to have been fixed for CLJS, but not for CLJ.&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojurescript/commit/e35c3a57472fa62ae41591418a73794dc8ac6dde&quot;&gt;https://github.com/clojure/clojurescript/commit/e35c3a57472fa62ae41591418a73794dc8ac6dde&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16083">CLJ-1182</key>
            <summary>Regexp are never equal</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="olenhad">Omer Iqbal</assignee>
                                <reporter username="frozenlock">Christian Fortin</reporter>
                        <labels>
                        <label>bug</label>
                    </labels>
                <created>Tue, 12 Mar 2013 13:28:59 -0500</created>
                <updated>Sat, 13 Apr 2013 21:13:52 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30746" author="olenhad" created="Tue, 12 Mar 2013 16:08:55 -0500"  >&lt;p&gt;added an implementation for the equiv method if both args are java.util.regex.Pattern&lt;/p&gt;</comment>
                    <comment id="30749" author="jafingerhut" created="Tue, 12 Mar 2013 17:54:40 -0500"  >&lt;p&gt;Omer, could you also include in your patch a few test cases?  At least one that validates that two regex&apos;s that should be equal, are equal, and another that two regex&apos;s that should be different, are non-equal.  Preferably the first of those tests should fail with the existing Clojure code, and pass with your changes.&lt;/p&gt;</comment>
                    <comment id="30754" author="olenhad" created="Wed, 13 Mar 2013 05:39:13 -0500"  >&lt;p&gt;I updated the patch with some tests. Hope I added them in the correct file. I also changed the implementation a bit, by instead of adding another implementation of equiv with a different signature, checking the type of the Object in the equiv method with signature (Object k1, Object k2).&lt;br/&gt;
For the sake of consistency I also added an EquivPred implementation, though I&apos;m not entirely sure when its used.&lt;/p&gt;</comment>
                    <comment id="30757" author="jafingerhut" created="Wed, 13 Mar 2013 13:04:58 -0500"  >&lt;p&gt;All comments here refer to the patch named fix-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1182&quot; title=&quot;Regexp are never equal&quot;&gt;CLJ-1182&lt;/a&gt;.diff dated Mar 13, 2013.&lt;/p&gt;

&lt;p&gt;The location for the new tests looks reasonable.  However, note that your new patch has your old changes plus some new ones, not just the new ones.  In particular, the new signature for equiv is still in your latest patch.  You should start from a clean pull of the latest Clojure master and make only the changes you want when creating a patch, not build on top of previous changes you have made.&lt;/p&gt;

&lt;p&gt;Also, there are several whitespace-only changes in your patch that should not be included.&lt;/p&gt;</comment>
                    <comment id="30758" author="olenhad" created="Wed, 13 Mar 2013 13:39:09 -0500"  >&lt;p&gt;I uploaded a clean patch, removing the whitespace diff and only adding the latest changes. Thanks for clarifying the workflow!&lt;br/&gt;
Just to clarify, this refers to the patch named fix-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1182&quot; title=&quot;Regexp are never equal&quot;&gt;CLJ-1182&lt;/a&gt;.diff dated Mar 13 1:34 PM&lt;/p&gt;</comment>
                    <comment id="30835" author="stu" created="Fri, 29 Mar 2013 05:46:25 -0500"  >&lt;p&gt;I am recategorizing this as an enhancement, because if this is a bug it is a bug in Java &amp;#8211; the Java Patterns class documents being immutable, but apparently does not implement .equals.&lt;/p&gt;

&lt;p&gt;Other recent &quot;make Clojure more complicated to work around problems in Java&quot; patches have been rejected, and I suspect this one will be too, because it might impact the performance of equality everywhere.&lt;/p&gt;</comment>
                    <comment id="30940" author="stu" created="Fri, 12 Apr 2013 09:04:57 -0500"  >&lt;p&gt;At first pass, Rich and I both believe that, as regex equality is undecidable, that Java made the right choice in using identity for equality, that this ticket should be declined, and the ClojureScript should revert to match.&lt;/p&gt;

&lt;p&gt;But leaving this ticket open for now so that ClojureScript dev can weigh in.&lt;/p&gt;</comment>
                    <comment id="30941" author="michael-drogalis" created="Fri, 12 Apr 2013 09:32:14 -0500"  >&lt;p&gt;What do you mean when you say &quot;undecidable&quot;?&lt;/p&gt;</comment>
                    <comment id="30942" author="aredington" created="Fri, 12 Apr 2013 10:03:45 -0500"  >&lt;p&gt;If Regex instances were interned by the reader, but still used identity for equality, then code like&lt;/p&gt;

&lt;p&gt;(= #&quot;abc&quot; #&quot;abc&quot;)&lt;/p&gt;

&lt;p&gt;would return true, but it wouldn&apos;t diverge in the definition of equality for regular expressions between Java and Clojure.&lt;/p&gt;</comment>
                    <comment id="30943" author="fogus" created="Fri, 12 Apr 2013 10:13:02 -0500"  >&lt;p&gt;Undecidable means that for any given regular expression, there is no single way to write it.  For example #&quot;&lt;span class=&quot;error&quot;&gt;&amp;#91;a&amp;#93;&lt;/span&gt;&quot; #&quot;a&quot; both match the same strings, but are they the same?  Maybe.  But how can we decide if /any/ given regular expression matches all of the same strings as any other?  The answer is, you can&apos;t.  Java does provide a Pattern#pattern method that returns the string that was used to build it, but I&apos;m not sure if that could/should be used as a basis for equality given the potential perf hit.&lt;/p&gt;</comment>
                    <comment id="30944" author="bendlas" created="Fri, 12 Apr 2013 10:31:54 -0500"  >&lt;p&gt;I posted in Stu&apos;s thread: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/OTPNJQbPtds/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/OTPNJQbPtds/discussion&lt;/a&gt;&lt;br/&gt;
TL;DR: Disagree with undecidability, agree with reverting to identity based equality&lt;/p&gt;</comment>
                    <comment id="30945" author="michael-drogalis" created="Fri, 12 Apr 2013 10:32:49 -0500"  >&lt;p&gt;That makes sense to me. Thanks Fogus.&lt;/p&gt;</comment>
                    <comment id="30947" author="bendlas" created="Fri, 12 Apr 2013 21:42:19 -0500"  >&lt;p&gt;From my post to the ml thread, it might not be entirely clear, why I don&apos;t think we should implement equality for host regexes:&lt;/p&gt;

&lt;p&gt;It would involve parsing and would leave a lot of room for errors and platform-idiosycracies to leak. And it would be different for every platform.&lt;/p&gt;

&lt;p&gt;As Alexander said, I also think this ticket could be resolved by interning regex literals, akin to keywords. That, however, would warrant a design page first, because there are tradeoffs to be made about how far the interning should go.&lt;/p&gt;</comment>
                    <comment id="30948" author="richhickey" created="Sat, 13 Apr 2013 08:51:17 -0500"  >&lt;p&gt;Why are we spending time on this? Where is the problem statement? Does someone actually need this for a real world purpose not solved by using regex strings as keys?&lt;/p&gt;</comment>
                    <comment id="30957" author="michael-drogalis" created="Sat, 13 Apr 2013 21:13:52 -0500"  >&lt;p&gt;It was prompted as a matter of consistency, which I think is valid. I can&apos;t think of a good reason to use regex&apos;s as keys though.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11913" name="fix-CLJ-1182.diff" size="2628" author="olenhad" created="Wed, 13 Mar 2013 13:34:11 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10120">Triaged</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1181] clojure.pprint/code-dispatch breaks on certain types of anonymous functions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1181</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(with-out-str 
  (with-pprint-dispatch code-dispatch 
                        (pp/pprint (read-string &quot;(fn* [x] x)&quot;))))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;breaks because the format string here: &lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/clj/clojure/pprint/dispatch.clj#L378&quot;&gt;https://github.com/clojure/clojure/blob/master/src/clj/clojure/pprint/dispatch.clj#L378&lt;/a&gt; expects a sequence. In the case of (fn* &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x) it is passed a symbol.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16074">CLJ-1181</key>
            <summary>clojure.pprint/code-dispatch breaks on certain types of anonymous functions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="devn">Devin Walters</reporter>
                        <labels>
                    </labels>
                <created>Sun, 10 Mar 2013 16:40:11 -0500</created>
                <updated>Mon, 18 Mar 2013 17:40:31 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30795" author="hypirion" created="Mon, 18 Mar 2013 17:40:31 -0500"  >&lt;p&gt;I think the main &quot;issue&quot; here resides within the undocumented functionality of fn*. (fn* &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x) is a semantically working function, but (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x) expands into (fn* (&lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x)). Anonymous function literals expand into (fn* &lt;span class=&quot;error&quot;&gt;&amp;#91;gensyms&amp;#93;&lt;/span&gt; (...)), and as such, it also accepts expressions like (fn* &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x). Should pprint pretty print expressions which has used fn* directly, or should it &quot;just&quot; ignore it?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1180] defprotocol doesn&apos;t resolve tag classnames</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1180</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;defprotocol doesn&apos;t resolve tag classnames, this results in exceptions being thrown when the declared protocol uses as a tag an imported class that is not imported in the namespace that uses it.&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (import &apos;clojure.lang.ISeq)&lt;br/&gt;
clojure.lang.ISeq&lt;br/&gt;
user=&amp;gt; (defprotocol p (^ISeq f &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt;))&lt;br/&gt;
p&lt;br/&gt;
user=&amp;gt; (ns x)&lt;br/&gt;
nil&lt;br/&gt;
x=&amp;gt; (defn x &lt;span class=&quot;error&quot;&gt;&amp;#91;y&amp;#93;&lt;/span&gt; (let &lt;span class=&quot;error&quot;&gt;&amp;#91;z (user/f y)&amp;#93;&lt;/span&gt; (inc z)))&lt;br/&gt;
CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: ISeq, compiling:(NO_SOURCE_PATH:4:33) &lt;/p&gt;</description>
                <environment></environment>
            <key id="16071">CLJ-1180</key>
            <summary>defprotocol doesn&apos;t resolve tag classnames</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Sun, 10 Mar 2013 14:15:31 -0500</created>
                <updated>Sun, 10 Mar 2013 17:56:10 -0500</updated>
                                    <version>Release 1.5</version>
                <version>Release 1.6</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11905" name="001-CLJ-1180.patch" size="3417" author="bronsa" created="Sun, 10 Mar 2013 15:41:44 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1179] distinct? does not accept zero arguments</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1179</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;distinct?&lt;/tt&gt; cannot be invoked with zero arguments. When using the pattern &lt;tt&gt;(apply distinct? x)&lt;/tt&gt;, this is bothersome as you have to check whether x is empty or not. It is also logical that &lt;tt&gt;distinct?&lt;/tt&gt; should return &lt;tt&gt;true&lt;/tt&gt; if no arguments are given, since there are no duplicates.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;What%28smallsetof%29stepswillreproducetheproblem%3F&quot;&gt;&lt;/a&gt;What (small set of) steps will reproduce the problem?&lt;/h3&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (apply distinct? [])
ArityException Wrong number of args (0) passed to: core$distinct-QMARK-  clojure.lang.AFn.throwArity (AFn.java:437)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;a name=&quot;Whatistheexpectedoutput%3FWhatdoyouseeinstead%3F&quot;&gt;&lt;/a&gt;What is the expected output? What do you see instead?&lt;/h3&gt;
&lt;p&gt;I would expect &lt;tt&gt;distinct?&lt;/tt&gt; to return true whenever given zero arguments.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;Whatversionareyouusing%3F&quot;&gt;&lt;/a&gt;What version are you using?&lt;/h3&gt;
&lt;p&gt;This was tested under Clojure 1.4 and Clojure 1.5.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16068">CLJ-1179</key>
            <summary>distinct? does not accept zero arguments</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hypirion">Jean Niklas L&apos;orange</reporter>
                        <labels>
                        <label>bug</label>
                    </labels>
                <created>Sat, 9 Mar 2013 05:46:03 -0600</created>
                <updated>Fri, 12 Apr 2013 09:12:55 -0500</updated>
                    <resolved>Fri, 12 Apr 2013 09:12:55 -0500</resolved>
                            <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30719" author="hypirion" created="Sat, 9 Mar 2013 06:08:41 -0600"  >&lt;p&gt;Attached the straightforward patch which solves this issue.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11902" name="clj-1179-distinct-zero-arguments.txt" size="603" author="hypirion" created="Sat, 9 Mar 2013 06:08:41 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1178] Requiring the same ns doesn&apos;t throw an exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1178</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The compiler will happily allow requiring the same ns twice. I can&apos;t see any reason you&apos;d intentionally do this.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns program
  (:require [program.a :as a]
            [program.a :as b])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This caused some confusion for a while as to why b wasn&apos;t producing the expected functionality. Just a simple mistake that I think can be caught at compile time.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16063">CLJ-1178</key>
            <summary>Requiring the same ns doesn&apos;t throw an exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="michael-drogalis">Michael Drogalis</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Mar 2013 18:18:46 -0600</created>
                <updated>Fri, 29 Mar 2013 05:57:12 -0500</updated>
                    <resolved>Fri, 29 Mar 2013 05:57:12 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30836" author="stu" created="Fri, 29 Mar 2013 05:57:12 -0500"  >&lt;p&gt;The example shows valid Clojure code.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1177] clojure.java.io/resource and non-ASCII characters</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1177</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.java.io/resource corrupts path containing UTF-8 characters without issuing warning.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (&lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;/getProperty &lt;span class=&quot;code-quote&quot;&gt;&quot;java.runtime.version&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;1.8.0-ea-b79&quot;&lt;/span&gt;
user=&amp;gt; (clojure-version)
&lt;span class=&quot;code-quote&quot;&gt;&quot;1.5.0&quot;&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;/getProperty &lt;span class=&quot;code-quote&quot;&gt;&quot;user.dir&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;/dir/d&#233;f&quot;&lt;/span&gt;
user=&amp;gt; (clojure.java.io/resource &lt;span class=&quot;code-quote&quot;&gt;&quot;myfile.txt&quot;&lt;/span&gt;)
#&amp;lt;URL file:/dir/d%c3%a9f/resources/myfile.txt&amp;gt;
user=&amp;gt; (slurp (clojure.java.io/resource &lt;span class=&quot;code-quote&quot;&gt;&quot;myfile.txt&quot;&lt;/span&gt;) :encoding &lt;span class=&quot;code-quote&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;)
FileNotFoundException /dir/d&#195;&#169;f/resources/myfile.txt (No such file or directory)  java.io.FileInputStream.open (FileInputStream.java:-2)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16062">CLJ-1177</key>
            <summary>clojure.java.io/resource and non-ASCII characters</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trevor">Trevor Wennblom</reporter>
                        <labels>
                        <label>bug</label>
                        <label>enhancement</label>
                    </labels>
                <created>Thu, 7 Mar 2013 16:54:43 -0600</created>
                <updated>Sun, 10 Mar 2013 17:56:52 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30713" author="jafingerhut" created="Fri, 8 Mar 2013 00:10:22 -0600"  >&lt;p&gt;Below is a workaround, at least.  I don&apos;t know, but perhaps the as-file method for URLs in io.clj of Clojure, the part that converts %hh sequences to a character with code point in the range 0 through 255, is at least partly at fault here.  I don&apos;t know right now if it is possible to modify that code to handle the general case of whatever character encoding munging is going on here to when .getResource creates the URL object.&lt;/p&gt;


&lt;p&gt;clojure.java.io/resource is documented to return a Java object of type java.net.URL, which seems like it does %hh escaping of many characters.  Reference &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; to a Java bug from 2001 where a Java user was surprised by the then-recent change in behavior of the getResource method &lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;Doing a little searching I found this StackOverflow question &lt;span class=&quot;error&quot;&gt;&amp;#91;3&amp;#93;&lt;/span&gt;, which has what might be a workaround.  I tried it on my Mac OS X 10.6 system running JDK 1.6 and it seemed to work:&lt;/p&gt;

&lt;p&gt;(slurp (.getContent (clojure.java.io/resource &quot;abc&#237;d/foo.txt&quot;)))&lt;/p&gt;

&lt;p&gt;That getContent is a method for class java.net.URL &lt;span class=&quot;error&quot;&gt;&amp;#91;4&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4466485&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4466485&lt;/a&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getResource%28java.lang.String%29&quot;&gt;http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getResource%28java.lang.String%29&lt;/a&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;3&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://stackoverflow.com/questions/13013629/best-international-alternative-to-javas-getclass-getresource&quot;&gt;http://stackoverflow.com/questions/13013629/best-international-alternative-to-javas-getclass-getresource&lt;/a&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;4&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URL.html#getContent%28%29&quot;&gt;http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URL.html#getContent%28%29&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30716" author="trevor" created="Fri, 8 Mar 2013 09:56:22 -0600"  >&lt;p&gt;Hi Andy,&lt;/p&gt;

&lt;p&gt;Thanks for the background and suggestions, that&apos;s very helpful.&lt;/p&gt;

&lt;p&gt;I&apos;m gradually learning Clojure with no Java experience. In this case I was searching for the preferred Clojure way to access items in directories declared under :resource-paths in a Leiningen project.clj file. Perhaps clojure.java.io/resource isn&apos;t the best way to do this as it&apos;s possibly too tied to the expectation for a URI instead of a more general IRI.&lt;/p&gt;

&lt;p&gt;You&apos;re suggested workaround did work for my use case:&lt;/p&gt;

&lt;p&gt;(slurp (.getContent (clojure.java.io/resource &quot;abc&#237;d/foo.txt&quot;)))&lt;/p&gt;

&lt;p&gt;but hopefully there would be more native/direct Clojure way to accomplish the same eventually.&lt;/p&gt;

&lt;p&gt;I don&apos;t know if java.net.IDN would be useful internally as a fix in clojure.java.io/resource &#8212; I&apos;m assuming not since it wasn&apos;t added until Java 6.&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;import&lt;/span&gt; &apos;java.net.IDN)
java.net.IDN
user=&amp;gt; (java.net.IDN/toASCII &lt;span class=&quot;code-quote&quot;&gt;&quot;/dir/d&#233;f&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;xn--/dir/df-gya&quot;&lt;/span&gt;
user=&amp;gt; (java.net.IDN/toUnicode &lt;span class=&quot;code-quote&quot;&gt;&quot;xn--/dir/df-gya&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;/dir/d&#233;f&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;: &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/java/net/IDN.html&quot;&gt;http://docs.oracle.com/javase/6/docs/api/java/net/IDN.html&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30717" author="jafingerhut" created="Fri, 8 Mar 2013 13:30:05 -0600"  >&lt;p&gt;Patch clj-1177-patch-v1.txt dated Mar 8 2013 is an attempt to solve this issue, in what I think may be a correct way.  As specified in RFC 3986, when taking a Unicode string and making a URL of it, it should be encoded in UTF-8 and then each individual byte is subject to the %HH hex encoding.  This patch reverses that to turn URLs into file names.&lt;/p&gt;

&lt;p&gt;Tested on Mac OS X 10.6 with a command line like this (it doesn&apos;t work without the -Dfile.encoding=UTF-8 option on my Mac, probably because the default encoding is MacRoman):&lt;/p&gt;

&lt;p&gt;% java -cp clojure.jar:path/to/resource -Dfile.encoding=UTF-8 clojure.main&lt;br/&gt;
user=&amp;gt; (require &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.java.io :as io&amp;#93;&lt;/span&gt;)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (io/resource &quot;abc&#237;d/foo.txt&quot;)&lt;br/&gt;
#&amp;lt;URL &lt;a href=&quot;file:/Users/jafinger/clj/clj-ns-browser/resource/abc%c3%add/foo.txt&quot;&gt;file:/Users/jafinger/clj/clj-ns-browser/resource/abc%c3%add/foo.txt&lt;/a&gt;&amp;gt;&lt;br/&gt;
user=&amp;gt; (slurp (io/resource &quot;abc&#237;d/foo.txt&quot;))&lt;br/&gt;
&quot;The quick brown fox jumped over the l&#225;zy d&#246;g!\n&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11900" name="clj-1177-patch-v1.txt" size="2673" author="jafingerhut" created="Fri, 8 Mar 2013 13:30:05 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1176] clojure.repl/source fails when *read-eval* bound to :unknown</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1176</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.repl/source is broken in Clojure 1.5.0 when &amp;#42;read-eval&amp;#42; is bound to :unknown, since source-fn reads without binding.&lt;/p&gt;

&lt;p&gt;Reproduce:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Either set &lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;:jvm-opts [&quot;-Dclojure.read.eval=unknown&quot;]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; in Leiningen or eval at REPL: &lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(alter-var-root #&apos;*read-eval* (constantly :unknown))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;(use &apos;clojure.repl)&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;(source drop-last)&lt;/tt&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Expected:&lt;/p&gt;

&lt;p&gt;Source of drop-last.&lt;/p&gt;

&lt;p&gt;Actual:&lt;/p&gt;

&lt;p&gt;RuntimeException Reading disallowed - &amp;#42;read-eval&amp;#42; bound to :unknown&lt;/p&gt;</description>
                <environment></environment>
            <key id="16058">CLJ-1176</key>
            <summary>clojure.repl/source fails when *read-eval* bound to :unknown</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Wed, 6 Mar 2013 15:26:45 -0600</created>
                <updated>Sat, 4 May 2013 22:40:43 -0500</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30705" author="timmc" created="Wed, 6 Mar 2013 16:04:03 -0600"  >&lt;p&gt;The attached patch just binds &amp;#42;read-eval&amp;#42; to true inside source-fn.&lt;/p&gt;</comment>
                    <comment id="30840" author="stu" created="Fri, 29 Mar 2013 06:24:27 -0500"  >&lt;p&gt;Note: Allowing this implies that you trust the data on your classpath.  If there are reasons somebody might not, we should reject this patch and people will have to be explicit when calling source.&lt;/p&gt;</comment>
                    <comment id="30841" author="timmc" created="Fri, 29 Mar 2013 06:37:27 -0500"  >&lt;p&gt;Ugh, that&apos;s a fair point when it comes to sandboxing. I&apos;ll check with the owners of clojurebot and lazybot.&lt;/p&gt;</comment>
                    <comment id="31051" author="timmc" created="Sat, 4 May 2013 22:40:43 -0500"  >&lt;p&gt;I haven&apos;t come up with any scenarios where this is problematic, and I haven&apos;t heard anything back from the bot owners. As for sandboxing, clojure.repl can easily be excluded.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11895" name="0001-CLJ-1176-Bind-read-eval-true-in-clojure.repl-source-.patch" size="928" author="timmc" created="Wed, 6 Mar 2013 16:04:03 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1175] NPE in clojure.lang.Delay/deref</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1175</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If a Delay wraps a function which throws an exception, then forcing that delay multiple times causes behavior which is, to me at least, surprising and unexpected: the first time it is forced, the expected exception is thrown; but after that it will behave as if all locals the expression refers to are nil. This can manifest in multiple ways, depending on the expression being delayed:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;; calling a local as a function causes an NPE inside clojure.lang.Delay
(let [f #(/ 1 0) d (delay (f))]
  [(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d) 
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))
   (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d)
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))])
[#&amp;lt;ArithmeticException java.lang.ArithmeticException: Divide by zero&amp;gt; 
 #&amp;lt;NullPointerException java.lang.NullPointerException&amp;gt;]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;; &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; nil is a valid value, &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; can cause subsequent forces to &lt;span class=&quot;code-quote&quot;&gt;&quot;succeed&quot;&lt;/span&gt;
;; even though the first fails as it should
(let [x (java.util.Date.) d (delay (seq x))]
  [(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d) 
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))
   (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d)
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))])
[#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: Don&apos;t know how to create ISeq from: java.util.Date&amp;gt; 
 nil]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The reason for this is that clojure.core/delay creates a ^:once function, promising to call it only once, so that the compiler can do locals-clearing on its lexical closure. However, when an exception is thrown the Delay object is left thinking it has never called the function, so when it is forced again it calls the function again, breaking its promise to the compiler and causing the function to run after its locals have been cleared.&lt;/p&gt;

&lt;p&gt;In fact, once we realize that locals-clearing is involved, we can make the delay behave differently the first N times it is forced, instead of only the first time, by constructing an expression which throws an exception before using all of its locals:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [x (java.util.Date.) 
            y (&lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt;. 1)
            d (delay (let [y (seq y)]
                       (cons (seq x) y)))]
  [(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d) 
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))
   (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d)
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))
   (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (force d)
        (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e e))])
[#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: Don&apos;t know how to create ISeq from: java.lang.&lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt;&amp;gt; 
 #&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: Don&apos;t know how to create ISeq from: java.util.Date&amp;gt;
 (nil)]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&apos;m not sure what the right fix for this issue is: perhaps the best choice is even to leave it alone, and just document that delay&apos;s behavior is undefined if the expression throws an exception. However, I propose making the Delay remember the first exception that was thrown, and rethrow it on subsequent force attempts. This makes sense, in a way: the &quot;result&quot; of the expression was this exception &lt;b&gt;e&lt;/b&gt; being thrown, and so this should happen every time. It might be preferable to have the Delay retry the expression until it succeeds, but I don&apos;t believe this is possible without abandoning locals-clearing, which would cause perfectly-valid delays to now run out of memory, holding onto no-longer-needed locals just in case the expression needs to retry at some later date.&lt;/p&gt;

&lt;p&gt;So I&apos;ve attached a patch that causes Delay to rethrow the original exception, and a test for that behavior, which of course fails if the change to Delay is not made.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16057">CLJ-1175</key>
            <summary>NPE in clojure.lang.Delay/deref</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Wed, 6 Mar 2013 15:06:15 -0600</created>
                <updated>Fri, 12 Apr 2013 09:42:00 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11894" name="delayed-exceptions.patch" size="2019" author="amalloy" created="Wed, 6 Mar 2013 15:06:15 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1174] Website doc link for 1.4 api docs returns a 404</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1174</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The API docs for Clojure 1.4 (&lt;a href=&quot;http://clojure.github.com/clojure/branch-clojure-1.4.0/index.html&quot;&gt;http://clojure.github.com/clojure/branch-clojure-1.4.0/index.html&lt;/a&gt;), linked to from &lt;a href=&quot;http://clojure.github.com/clojure/&quot;&gt;http://clojure.github.com/clojure/&lt;/a&gt;, returns a 404.&lt;/p&gt;

&lt;p&gt;I logged it under this category because I can&apos;t see anywhere else to log bugs about clojure.org.&lt;/p&gt;</description>
                <environment>All</environment>
            <key id="16054">CLJ-1174</key>
            <summary>Website doc link for 1.4 api docs returns a 404</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="tomfaulhaber">Tom Faulhaber</assignee>
                                <reporter username="edoloughlin">Ed O&apos;Loughlin</reporter>
                        <labels>
                    </labels>
                <created>Tue, 5 Mar 2013 05:50:53 -0600</created>
                <updated>Tue, 5 Mar 2013 20:29:46 -0600</updated>
                    <resolved>Tue, 5 Mar 2013 20:29:46 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30704" author="tomfaulhaber" created="Tue, 5 Mar 2013 20:29:46 -0600"  >&lt;p&gt;Fixed. Thanks for pointing this out.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1173] One-arg protocol functions whose name begins in a dash generates a call to a wrong field in the emitted code</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1173</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defprotocol P (-foo [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;]))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This code generates a reflective call to a non-existing &lt;tt&gt;foo&lt;/tt&gt; field instead of the correct &lt;tt&gt;-foo&lt;/tt&gt; method.&lt;/p&gt;

&lt;p&gt;I was told by Christophe Grand that changing the &lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/clj/clojure/core_deftype.clj#L557&quot;&gt;line 557 in core_deftype.clj&lt;/a&gt; from:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(. ~(with-meta target {:tag on-&lt;span class=&quot;code-keyword&quot;&gt;interface&lt;/span&gt;}) ~(or on-method method) ~@(&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; gargs))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(. ~(with-meta target {:tag on-&lt;span class=&quot;code-keyword&quot;&gt;interface&lt;/span&gt;}) (~(or on-method method) ~@(&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; gargs)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;is a quick fix. However I don&apos;t know too much about the compilation specifics of &lt;tt&gt;.&lt;/tt&gt; to judge whether this is the correct fix.&lt;/p&gt;

&lt;p&gt;Issue reproduction:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Clojure
user=&amp;gt; (set! *warn-on-reflection* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
user=&amp;gt; (defprotocol P (-foo [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;]))
P
Reflection warning, REPL:4 - reference to field foo can&apos;t be resolved.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>Clojure 1.4</environment>
            <key id="16035">CLJ-1173</key>
            <summary>One-arg protocol functions whose name begins in a dash generates a call to a wrong field in the emitted code</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 1 Mar 2013 04:48:28 -0600</created>
                <updated>Fri, 17 May 2013 13:36:40 -0500</updated>
                    <resolved>Fri, 17 May 2013 13:36:40 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31101" author="cldwalker" created="Fri, 17 May 2013 13:36:40 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1202&quot; title=&quot;protocol fns with dashes may get compiled into property access when used higher order&quot;&gt;CLJ-1202&lt;/a&gt; addresses this exact issue with the same fix and includes tests&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1172] Cross-linking between clojure.lang.Compiler and clojure.lang.RT</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1172</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This is my code (an example):&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;import clojure.lang.Compiler;
import clojure.lang.RT;
import clojure.lang.Var;

Compiler.load(&quot;(+ 5 %)&quot;);
Var foo = RT.var(&quot;bar&quot;, &quot;foo&quot;);
Object result = foo.invoke(10);
assert result.toString().equals(&quot;15&quot;);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is what I&apos;m getting:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;ava.lang.ExceptionInInitializerError
	at clojure.lang.Compiler.&amp;lt;clinit&amp;gt;(Compiler.java:47)
	at foo.main(Main.java:75)
Caused by: java.lang.NullPointerException
	at clojure.lang.RT.baseLoader(RT.java:2043)
	at clojure.lang.RT.load(RT.java:417)
	at clojure.lang.RT.load(RT.java:411)
	at clojure.lang.RT.doInit(RT.java:447)
	at clojure.lang.RT.&amp;lt;clinit&amp;gt;(RT.java:329)
	... 36 more
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The same code worked just fine with version 1.4. Looks like &lt;tt&gt;Compiler&lt;/tt&gt; is using &lt;tt&gt;RT&lt;/tt&gt; and &lt;tt&gt;RT&lt;/tt&gt; is using &lt;tt&gt;Compiler&lt;/tt&gt;, both statically.&lt;/p&gt;</description>
                <environment>version 1.5.0-RC17</environment>
            <key id="16032">CLJ-1172</key>
            <summary>Cross-linking between clojure.lang.Compiler and clojure.lang.RT</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="4" iconUrl="http://dev.clojure.org/jira/images/icons/status_reopened.gif">Reopened</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="yegor256">Yegor Bugayenko</reporter>
                        <labels>
                    </labels>
                <created>Thu, 28 Feb 2013 06:30:50 -0600</created>
                <updated>Sat, 23 Mar 2013 10:31:23 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30694" author="yegor256" created="Mon, 4 Mar 2013 11:40:51 -0600"  >&lt;p&gt;I cross-posted this question to SO: &lt;a href=&quot;http://stackoverflow.com/questions/15207596&quot;&gt;http://stackoverflow.com/questions/15207596&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30699" author="yegor256" created="Tue, 5 Mar 2013 00:04:37 -0600"  >&lt;p&gt;calling &lt;tt&gt;RT.init()&lt;/tt&gt; before &lt;tt&gt;Compiler.load()&lt;/tt&gt; solves the problem&lt;/p&gt;</comment>
                    <comment id="30700" author="jafingerhut" created="Tue, 5 Mar 2013 04:17:34 -0600"  >&lt;p&gt;Yegor, do you consider it OK to close this ticket as not being a problem, or at least one with a reasonable workaround?&lt;/p&gt;</comment>
                    <comment id="30702" author="yegor256" created="Tue, 5 Mar 2013 13:11:57 -0600"  >&lt;p&gt;Yes, of course. Let&apos;s close it.&lt;/p&gt;</comment>
                    <comment id="30703" author="jafingerhut" created="Tue, 5 Mar 2013 18:14:13 -0600"  >&lt;p&gt;Ticket submitter agrees that this is not an issue, or that there is a reasonable workaround.&lt;/p&gt;</comment>
                    <comment id="30752" author="jafingerhut" created="Wed, 13 Mar 2013 00:58:46 -0500"  >&lt;p&gt;This issue came up again on the Clojure group.  &lt;a href=&quot;https://groups.google.com/forum/?hl=en_US&amp;amp;fromgroups=#!topic/clojure/2xdLNMb9yyQ&quot;&gt;https://groups.google.com/forum/?hl=en_US&amp;amp;fromgroups=#!topic/clojure/2xdLNMb9yyQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did some testing, and the issue did not exist in Clojure 1.5.0-RC3 and before, and it has existed since 1.5.0-RC4.  There was only one commit between those two points:&lt;/p&gt;

&lt;p&gt;    &lt;a href=&quot;https://github.com/clojure/clojure/commit/9b80a552fdabeabdd93951a625b55ae49c2f8d83&quot;&gt;https://github.com/clojure/clojure/commit/9b80a552fdabeabdd93951a625b55ae49c2f8d83&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maybe this new behavior is an intended consequence of that change.  I don&apos;t know.  In any case, it seems like perhaps the &quot;No need to call RT.init() anymore&quot; message might be outdated?&lt;/p&gt;</comment>
                    <comment id="30753" author="jafingerhut" created="Wed, 13 Mar 2013 00:59:59 -0500"  >&lt;p&gt;Reopening since it came up again, and there is some more info known about the issue.  I&apos;ll let someone who knows more about the issue decide whether to close it.&lt;/p&gt;</comment>
                    <comment id="30806" author="appodictic" created="Sat, 23 Mar 2013 10:31:23 -0500"  >&lt;p&gt;Doing this RT.load(&quot;clojure/core&quot;); at the top works avoids the message from RT.init()&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1171] Compiler macro for clojure.core/instance? disregards lexical shadows on class names</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1171</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;h1&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;Summary&lt;/h1&gt;
&lt;p&gt;The compiler tries to emit jvm native &lt;b&gt;instanceof&lt;/b&gt; expressions for direct &lt;b&gt;clojure.core/instance?&lt;/b&gt; calls.&lt;br/&gt;
For that, it tries to resolve its first argument as a class name. However, it disregards lexical bindings when doing that.&lt;br/&gt;
This is incongruent to the default implementation in core.clj&lt;/p&gt;

&lt;h1&gt;&lt;a name=&quot;Data&quot;&gt;&lt;/a&gt;Data&lt;/h1&gt;

&lt;h2&gt;&lt;a name=&quot;Testcase&quot;&gt;&lt;/a&gt;Test case&lt;/h2&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (let [&lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;] (instance? &lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;abc&quot;&lt;/span&gt;))
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
;; expected &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt; as in
user=&amp;gt; (let [&lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;] (apply instance? [&lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;abc&quot;&lt;/span&gt;]))
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h2&gt;&lt;a name=&quot;Culpritmethod&quot;&gt;&lt;/a&gt;Culprit method&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/blob/4ccb10edbe66eae81336a4c0972050d9759b0bf7/src/jvm/clojure/lang/Compiler.java#L3578&quot;&gt;https://github.com/clojure/clojure/blob/4ccb10edbe66eae81336a4c0972050d9759b0bf7/src/jvm/clojure/lang/Compiler.java#L3578&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;ListDiscussion&quot;&gt;&lt;/a&gt;List Discussion&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/topic/clojure/mf25OlFRpa8/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/mf25OlFRpa8/discussion&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;&lt;a name=&quot;Tangent&quot;&gt;&lt;/a&gt;Tangent&lt;/h1&gt;
&lt;p&gt;This was discovered because the same compiler macro also omits the arity check implicit in the default definition. This could also conveniently be fixed when touching that method:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (instance? &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;)
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
;; expected
user=&amp;gt; (apply instance? [&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;])
ArityException Wrong number of args (1) passed to: core$instance-QMARK-  clojure.lang.AFn.throwArity (AFn.java:437)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;EDIT&lt;/b&gt; elaborated on ticket title and description; added tangent&lt;/p&gt;&lt;/blockquote&gt;</description>
                <environment></environment>
            <key id="16030">CLJ-1171</key>
            <summary>Compiler macro for clojure.core/instance? disregards lexical shadows on class names</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Wed, 27 Feb 2013 13:21:16 -0600</created>
                <updated>Fri, 12 Apr 2013 09:42:02 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30668" author="bendlas" created="Wed, 27 Feb 2013 20:11:30 -0600"  >&lt;p&gt;Attached patches test and fix issue + tangent&lt;/p&gt;</comment>
                    <comment id="30698" author="bendlas" created="Mon, 4 Mar 2013 15:51:36 -0600"  >&lt;p&gt;Note: Patch 0003 just adds the arity check, hence is optional, but if it&apos;s omitted from the patchset, the corresponding test from patch 0001 will fail.&lt;/p&gt;</comment>
                    <comment id="30843" author="stu" created="Fri, 29 Mar 2013 07:31:45 -0500"  >&lt;p&gt;Summarizing the decisions in these patches:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;instance?&lt;/tt&gt; and &lt;tt&gt;apply instance?&lt;/tt&gt; should be consistent&lt;/li&gt;
	&lt;li&gt;they should check arity  (matching &lt;tt&gt;apply instance?&lt;/tt&gt; existing behavior)&lt;/li&gt;
	&lt;li&gt;they should allow lexical shadowing of the class argument (matching &lt;tt&gt;apply instance?&lt;/tt&gt; existing behavior)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;It is possible (although unlikely) that existing code relies on the current eccentric behavior of &lt;tt&gt;instance?&lt;/tt&gt;.  I think it would be fair to categorize programs relying on this behavior as buggy, but that is easy for me to say. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11877" name="0001-CLJ-1171-Tests-for-clojure.core-instance-compiler-ma.patch" size="919" author="bendlas" created="Wed, 27 Feb 2013 20:11:30 -0600" />
                    <attachment id="11878" name="0002-CLJ-1171-Obey-lexical-scope-for-class-argument-in-in.patch" size="1248" author="bendlas" created="Wed, 27 Feb 2013 20:11:30 -0600" />
                    <attachment id="11879" name="0003-CLJ-1171-Check-arity-in-instance-compiler-macro.patch" size="970" author="bendlas" created="Wed, 27 Feb 2013 20:11:30 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1170] conj-ing x on equal values should produce equal results</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1170</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve recently have run into a WHAT behavior here is an example:&lt;/p&gt;

&lt;p&gt;```clojure&lt;br/&gt;
(def head 1)&lt;br/&gt;
(def tail &lt;span class=&quot;error&quot;&gt;&amp;#91;2 3&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;(= tail (rest (cons head tail)))  ; true&lt;/p&gt;

&lt;p&gt;;; Types don&apos;t really match but close enough I guess &lt;br/&gt;
(type tail)                       ; clojure.lang.PersistentVector&lt;br/&gt;
(vector? tail)                    ; true&lt;br/&gt;
(type (rest (cons head tail)))    ; clojure.lang.PersistentVector$ChunkedSeq&lt;br/&gt;
(vector? (rest (cons head tail))) ; false&lt;/p&gt;

&lt;p&gt;;; Bet then it get&apos;s ugly (I would expect them to be equal)&lt;br/&gt;
(= (conj tail :x) (conj (rest (cons head tail)) :x))  ; false&lt;/p&gt;

&lt;p&gt;;; Because&lt;br/&gt;
(conj tail :x) ; &lt;span class=&quot;error&quot;&gt;&amp;#91;2 3 :x&amp;#93;&lt;/span&gt;&lt;br/&gt;
(conj (rest (cons head tail)) :x) ;(:x 2 3)&lt;br/&gt;
```&lt;/p&gt;

&lt;p&gt;This brings me to a pretty surprising behavior, which is conj-ing&lt;br/&gt;
equal values produce non-equal results:&lt;/p&gt;

&lt;p&gt;```clojure&lt;br/&gt;
(= &apos;(2 3) &lt;span class=&quot;error&quot;&gt;&amp;#91;2 3&amp;#93;&lt;/span&gt;) ; true&lt;br/&gt;
(= (conj &apos;(2 3) 1) (conj &lt;span class=&quot;error&quot;&gt;&amp;#91;2 3&amp;#93;&lt;/span&gt; 1))&lt;br/&gt;
```&lt;/p&gt;

&lt;p&gt;I think conj should either produce equal results or list and vectors with&lt;br/&gt;
same elements should not be equal. That would also resolve a previous&lt;br/&gt;
problem, although intuitively I would expect `(rest (cons x y))` to&lt;br/&gt;
return `y` back.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16026">CLJ-1170</key>
            <summary>conj-ing x on equal values should produce equal results</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gozala">Irakli Gozalishvili</reporter>
                        <labels>
                    </labels>
                <created>Sat, 23 Feb 2013 22:27:37 -0600</created>
                <updated>Fri, 1 Mar 2013 10:04:40 -0600</updated>
                    <resolved>Fri, 1 Mar 2013 10:04:40 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30648" author="jafingerhut" created="Sun, 24 Feb 2013 10:46:21 -0600"  >&lt;p&gt;Irakli, it is an explicitly documented feature that conj puts new items in different places for lists (at the beginning) and vectors (at the end).  rest is explicitly documented to call seq on its argument.  See their doc strings.&lt;/p&gt;

&lt;p&gt;I don&apos;t know if it is explicitly documented, or just long-standing practice, that vectors and seqs with the the same sequence of values in them are equal.  I think that a lot of existing code would break if Clojure changed so those were not equal.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1169] Add filename and line number to defn parameter declaration error</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1169</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When mistyping parameter list in defn declaration, e.g.&lt;/p&gt;

&lt;p&gt;(defn test&lt;br/&gt;
 (some-error))&lt;/p&gt;

&lt;p&gt;error message shows name of parameter (without quotes), but not function name, filename or line number:&lt;/p&gt;

&lt;p&gt;Exception in thread &quot;main&quot; java.lang.IllegalArgumentException: Parameter declaration some-error should be a vector&lt;br/&gt;
        at clojure.core$assert_valid_fdecl.invoke(core.clj:6567)&lt;br/&gt;
        at clojure.core$sigs.invoke(core.clj:220)&lt;br/&gt;
        at clojure.core$defn.doInvoke(core.clj:294)&lt;br/&gt;
        at clojure.lang.RestFn.invoke(RestFn.java:467)&lt;br/&gt;
        at clojure.lang.Var.invoke(Var.java:427)&lt;br/&gt;
        at clojure.lang.AFn.applyToHelper(AFn.java:172)&lt;br/&gt;
        at clojure.lang.Var.applyTo(Var.java:532)&lt;br/&gt;
        at clojure.lang.Compiler.macroexpand1(Compiler.java:6366)&lt;br/&gt;
        at clojure.lang.Compiler.macroexpand(Compiler.java:6427)&lt;br/&gt;
        at clojure.lang.Compiler.eval(Compiler.java:6495)&lt;br/&gt;
        at clojure.lang.Compiler.load(Compiler.java:6952)&lt;br/&gt;
        at clojure.lang.Compiler.loadFile(Compiler.java:6912)&lt;br/&gt;
        at clojure.main$load_script.invoke(main.clj:283)&lt;br/&gt;
        at clojure.main$init_opt.invoke(main.clj:288)&lt;br/&gt;
        at clojure.main$initialize.invoke(main.clj:316)&lt;br/&gt;
        at clojure.main$null_opt.invoke(main.clj:349)&lt;br/&gt;
        at clojure.main$main.doInvoke(main.clj:427)&lt;br/&gt;
        at clojure.lang.RestFn.invoke(RestFn.java:421)&lt;br/&gt;
        at clojure.lang.Var.invoke(Var.java:419)&lt;br/&gt;
        at clojure.lang.AFn.applyToHelper(AFn.java:163)&lt;br/&gt;
        at clojure.lang.Var.applyTo(Var.java:532)&lt;br/&gt;
        at clojure.main.main(main.java:37)&lt;/p&gt;
</description>
                <environment>Windows</environment>
            <key id="16024">CLJ-1169</key>
            <summary>Add filename and line number to defn parameter declaration error</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="metaclass">Andrei Kleschinski</reporter>
                        <labels>
                    </labels>
                <created>Fri, 22 Feb 2013 03:25:06 -0600</created>
                <updated>Sun, 10 Mar 2013 17:58:32 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30642" author="metaclass" created="Fri, 22 Feb 2013 05:39:32 -0600"  >&lt;p&gt;Proposed patch for issue&lt;br/&gt;
Process exceptions in macroexpand1 and wraps them in CompilerException with source,line,column information.&lt;/p&gt;

&lt;p&gt;Also patch adds quotes around invalid symbol name in error message to make them more distinguishable from rest of message.&lt;/p&gt;
</comment>
                    <comment id="30672" author="jafingerhut" created="Fri, 1 Mar 2013 09:32:21 -0600"  >&lt;p&gt;Patch 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1169&quot; title=&quot;Add filename and line number to defn parameter declaration error&quot;&gt;CLJ-1169&lt;/a&gt;-proposed-patch.patch dated Feb 22 2013 causes several tests to fail.  Run &quot;./antsetup.sh&quot; then &quot;ant&quot; to see which ones (or &quot;mvn package&quot;).&lt;/p&gt;</comment>
                    <comment id="30676" author="metaclass" created="Fri, 1 Mar 2013 10:25:47 -0600"  >&lt;p&gt;Fix for failed unit-tests&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11872" name="0001-CLJ-1169-proposed-patch.patch" size="2504" author="metaclass" created="Fri, 22 Feb 2013 05:39:32 -0600" />
                    <attachment id="11885" name="0002-CLJ-1169-fix-unit-tests.patch" size="3230" author="metaclass" created="Fri, 1 Mar 2013 10:25:47 -0600" />
                    <attachment id="11871" name="defn_error_message.clj" size="34" author="metaclass" created="Fri, 22 Feb 2013 03:25:06 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1168] Setting clojure.read.eval to unknown on JVM cmd line causes --eval option to fail</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1168</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;First discovered by Tim McCormack with Clojure 1.5.0-beta13 and -RC15:&lt;/p&gt;

&lt;p&gt;$ java -Dclojure.read.eval=unknown -jar ~/.m2/repository/org/clojure/clojure/1.5.0-RC16/clojure-1.5.0-RC16.jar -e &quot;(+ 1 2)&quot;&lt;br/&gt;
Exception in thread &quot;main&quot; java.lang.RuntimeException: Reading disallowed - &lt;b&gt;read-eval&lt;/b&gt; bound to :unknown&lt;/p&gt;

&lt;p&gt;This would prevent a Leiningen user from putting the following line in their project.clj file in order to look for read or read-string calls that don&apos;t explicitly bind &lt;b&gt;read-eval&lt;/b&gt; to true or false:&lt;/p&gt;

&lt;p&gt;    :jvm-opts &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;-Dclojure.read.eval=unknown&amp;quot;&amp;#93;&lt;/span&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16021">CLJ-1168</key>
            <summary>Setting clojure.read.eval to unknown on JVM cmd line causes --eval option to fail</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Tue, 19 Feb 2013 19:23:08 -0600</created>
                <updated>Fri, 22 Feb 2013 14:12:22 -0600</updated>
                    <resolved>Fri, 22 Feb 2013 14:12:22 -0600</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30623" author="jafingerhut" created="Tue, 19 Feb 2013 19:42:00 -0600"  >&lt;p&gt;Patch clj-1168-patch-v1.txt dated Feb 19 2013 has been tested manually with these results:&lt;/p&gt;

&lt;p&gt;% java -cp clojure.jar clojure.main&lt;/p&gt;

&lt;p&gt;(ran some simple tests to ensure repl still works, and obeys -Dclojure.read.eval=unknown setting)&lt;/p&gt;

&lt;p&gt;% java -Dclojure.read.eval=unknown -jar clojure.jar -e &apos;(println (+ 1 2))&apos;&lt;br/&gt;
3&lt;/p&gt;</comment>
                    <comment id="30634" author="steveminer@gmail.com" created="Wed, 20 Feb 2013 16:52:48 -0600"  >&lt;p&gt;The patch works for me, but I think it would be safer for the patch to treat &amp;#42;read-eval* :unknown as false for the purpose of -e.  It&apos;s unlikely that anyone wants to -e &apos;#=(boom)&apos;.  Also, there&apos;s no need for the let to capture the cur-read-eval.  I suggest something like this for the patch (updated):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn- read-never-unknown [read-fn &amp;amp; args]
      (binding [*read-eval* (&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;? *read-eval*)]
         (apply read-fn args)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30638" author="jafingerhut" created="Thu, 21 Feb 2013 06:10:48 -0600"  >&lt;p&gt;I have asked on the Leiningen email list whether treating &lt;b&gt;read-eval&lt;/b&gt; :unknown as false for the purpose of -e would break Leiningen functionality, and will report back here when I find out.&lt;/p&gt;</comment>
                    <comment id="30639" author="jafingerhut" created="Thu, 21 Feb 2013 15:02:30 -0600"  >&lt;p&gt;I don&apos;t have an answer from Leiningen folks yet, but I do have another thought related to Steve&apos;s comment:&lt;/p&gt;

&lt;p&gt;The current behavior is to treat &amp;#42;read-eval&amp;#42; as true for the purposes of reading lines in the REPL, if -Dclojure.read.eval=unknown was specified on the command line.  Why should expressions given after -e be any more restricted?  Whoever is invoking the JVM has complete control.&lt;/p&gt;

&lt;p&gt;If they really want &amp;#42;read-eval&amp;#42; to be false when reading the expressions after -e, just use -Dclojure.read.eval=false instead of =unknown.&lt;/p&gt;</comment>
                    <comment id="30640" author="steveminer@gmail.com" created="Thu, 21 Feb 2013 15:45:08 -0600"  >&lt;p&gt;You&apos;re right, the user has control.  I was just thinking that the user might not appreciate the details and it would be safer to default to the false behavior.  However, I failed to consider the REPL treatment &amp;#8211; that&apos;s a good point.&lt;/p&gt;

&lt;p&gt;In any case, the logic for the binding in the patch could be simplified.  I think this would work for the intended result:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn- read-never-unknown [read-fn &amp;amp; args]
      (binding [*read-eval* (and *read-eval* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)]
         (apply read-fn args)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Sorry, if my comments have descended into bike-shedding.&lt;/p&gt;</comment>
                    <comment id="30643" author="stu" created="Fri, 22 Feb 2013 09:00:10 -0600"  >&lt;p&gt;I implemented &quot;with-read-known&quot; patch after input from Rich.  Helpers that establish bindings should take a closure or fn body, rather than carrying around explicit fns and arg lists as the original 19 Feb patch does.&lt;/p&gt;

&lt;p&gt;Marking screened as of the Feb 22 with-read-known patch.&lt;/p&gt;</comment>
                    <comment id="30644" author="timmc" created="Fri, 22 Feb 2013 09:55:13 -0600"  >&lt;p&gt;Steve: More importantly, any time you call (eval (read ...)), there&apos;s no reason for &amp;#42;read-eval&amp;#42; to be anything other than true.&lt;/p&gt;</comment>
                    <comment id="30645" author="timmc" created="Fri, 22 Feb 2013 10:12:43 -0600"  >&lt;p&gt;Newer patch works. My verification procedure:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Patched master (should probably use an RC instead)&lt;/li&gt;
	&lt;li&gt;Compiled and installed (mvn install) with version = 1.5.0-clj1168 in pom.xml&lt;/li&gt;
	&lt;li&gt;Set up fresh Leiningen project including these options: &lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;:dependencies [[org.clojure/clojure &lt;span class=&quot;code-quote&quot;&gt;&quot;1.5.0-clj1168&quot;&lt;/span&gt;]]
:jvm-opts [&lt;span class=&quot;code-quote&quot;&gt;&quot;-Dclojure.read.eval=unknown&quot;&lt;/span&gt;]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;Verify: `lein repl` succeeds
	&lt;ul&gt;
		&lt;li&gt;Verify: &lt;tt&gt;=&amp;gt; (read-string &quot;foo&quot;)&lt;/tt&gt; fails with &quot;Reading disallowed - &amp;#42;read-eval&amp;#42; bound to :unknown&quot;&lt;/li&gt;
		&lt;li&gt;Verify: &lt;tt&gt;=&amp;gt; #=(+ 1 2)&lt;/tt&gt; prints &lt;tt&gt;3&lt;/tt&gt; (read is fully available to REPL)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Write -main fn in project as &lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn -main [&amp;amp; args]
  (println *read-eval*)
  (println (read-string (first args))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;Verify: `lein run foo` prints &lt;tt&gt;:unknown&lt;/tt&gt; and then fails with &quot;Reading disallowed&quot; error.&lt;/li&gt;
	&lt;li&gt;Bind &amp;#42;read-eval&amp;#42; to false in -main&lt;/li&gt;
	&lt;li&gt;Verify: `lein run foo` prints &lt;tt&gt;foo&lt;/tt&gt;.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                </comments>
                    <attachments>
                    <attachment id="11864" name="clj-1168-patch-v1.txt" size="2348" author="jafingerhut" created="Tue, 19 Feb 2013 19:42:00 -0600" />
                    <attachment id="11873" name="CLJ-1168-with-read-known.patch" size="2298" author="stu" created="Fri, 22 Feb 2013 09:00:10 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1167] repl value of *file* is &quot;NO_SOURCE_PATH&quot;, of *source-path* is &quot;NO_SOURCE_FILE&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1167</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="16020">CLJ-1167</key>
            <summary>repl value of *file* is &quot;NO_SOURCE_PATH&quot;, of *source-path* is &quot;NO_SOURCE_FILE&quot;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="marick">Brian Marick</reporter>
                        <labels>
                    </labels>
                <created>Tue, 19 Feb 2013 16:22:10 -0600</created>
                <updated>Tue, 19 Feb 2013 16:22:52 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30620" author="marick" created="Tue, 19 Feb 2013 16:22:52 -0600"  >&lt;p&gt;Forgot to mention: I think it&apos;s intended to be the other way around, given the names.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1166] Range function accumulates minor errors when called on floating-point numbers</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1166</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Due to range&apos;s incremental computation minor errors introduced by floating point arithmetic accumulate, becoming more noticeable in long ranges and causing unexpected behaviour.&lt;/p&gt;

&lt;p&gt;Compare the output of the following:&lt;/p&gt;

&lt;p&gt;=&amp;gt; (range 0.0 10.0 0.1)&lt;br/&gt;
(0.0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999 1.2 1.3 1.4000000000000001 1.5000000000000002 1.6000000000000003 1.7000000000000004 1.8000000000000005 1.9000000000000006 2.0000000000000004 2.1000000000000005 2.2000000000000006 2.3000000000000007 2.400000000000001 2.500000000000001 2.600000000000001 2.700000000000001 2.800000000000001 2.9000000000000012 3.0000000000000013 3.1000000000000014 3.2000000000000015 3.3000000000000016 3.4000000000000017 3.5000000000000018 3.600000000000002 3.700000000000002 3.800000000000002 3.900000000000002 4.000000000000002 4.100000000000001 4.200000000000001 4.300000000000001 4.4 4.5 4.6 4.699999999999999 4.799999999999999 4.899999999999999 4.999999999999998 5.099999999999998 5.1999999999999975 5.299999999999997 5.399999999999997 5.4999999999999964 5.599999999999996 5.699999999999996 5.799999999999995 5.899999999999995 5.999999999999995 6.099999999999994 6.199999999999994 6.299999999999994 6.399999999999993 6.499999999999993 6.5999999999999925 6.699999999999992 6.799999999999992 6.8999999999999915 6.999999999999991 7.099999999999991 7.19999999999999 7.29999999999999 7.39999999999999 7.499999999999989 7.599999999999989 7.699999999999989 7.799999999999988 7.899999999999988 7.999999999999988 8.099999999999987 8.199999999999987 8.299999999999986 8.399999999999986 8.499999999999986 8.599999999999985 8.699999999999985 8.799999999999985 8.899999999999984 8.999999999999984 9.099999999999984 9.199999999999983 9.299999999999983 9.399999999999983 9.499999999999982 9.599999999999982 9.699999999999982 9.799999999999981 9.89999999999998 9.99999999999998)&lt;/p&gt;

&lt;p&gt;=&amp;gt; (defn range&apos; &lt;span class=&quot;error&quot;&gt;&amp;#91;start end step&amp;#93;&lt;/span&gt; (map #(+ start (* % step)) (range 0 (/ (- end start) step) 1)))&lt;br/&gt;
=&amp;gt; (range&apos; 0.0 10.0 0.1)&lt;br/&gt;
(0.0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6000000000000001 0.7000000000000001 0.8 0.9 1.0 1.1 1.2000000000000002 1.3 1.4000000000000001 1.5 1.6 1.7000000000000002 1.8 1.9000000000000001 2.0 2.1 2.2 2.3000000000000003 2.4000000000000004 2.5 2.6 2.7 2.8000000000000003 2.9000000000000004 3.0 3.1 3.2 3.3000000000000003 3.4000000000000004 3.5 3.6 3.7 3.8000000000000003 3.9000000000000004 4.0 4.1000000000000005 4.2 4.3 4.4 4.5 4.6000000000000005 4.7 4.800000000000001 4.9 5.0 5.1000000000000005 5.2 5.300000000000001 5.4 5.5 5.6000000000000005 5.7 5.800000000000001 5.9 6.0 6.1000000000000005 6.2 6.300000000000001 6.4 6.5 6.6000000000000005 6.7 6.800000000000001 6.9 7.0 7.1000000000000005 7.2 7.300000000000001 7.4 7.5 7.6000000000000005 7.7 7.800000000000001 7.9 8.0 8.1 8.200000000000001 8.3 8.4 8.5 8.6 8.700000000000001 8.8 8.9 9.0 9.1 9.200000000000001 9.3 9.4 9.5 9.600000000000001 9.700000000000001 9.8 9.9)&lt;/p&gt;</description>
                <environment></environment>
            <key id="16019">CLJ-1166</key>
            <summary>Range function accumulates minor errors when called on floating-point numbers</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="sfnelson">Stephen Nelson</reporter>
                        <labels>
                    </labels>
                <created>Tue, 19 Feb 2013 15:04:14 -0600</created>
                <updated>Fri, 29 Mar 2013 17:10:49 -0500</updated>
                    <resolved>Fri, 1 Mar 2013 10:08:43 -0600</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30619" author="sfnelson" created="Tue, 19 Feb 2013 15:06:48 -0600"  >&lt;p&gt;=&amp;gt; (last (range 0.0 10000000.0 0.1))&lt;br/&gt;
9999999.98112945&lt;br/&gt;
=&amp;gt; (last (range&apos; 0.0 10000000.0 0.1))&lt;br/&gt;
9999999.9&lt;/p&gt;</comment>
                    <comment id="30674" author="stu" created="Fri, 1 Mar 2013 10:08:35 -0600"  >&lt;p&gt;Range is incremental by design, and that is how floats work.  Something with the desired behavior would need to be a different fn with a different name.&lt;/p&gt;</comment>
                    <comment id="30691" author="sfnelson" created="Sun, 3 Mar 2013 14:38:21 -0600"  >&lt;p&gt;&quot;Returns a lazy seq of nums from start (inclusive) to end (exclusive), by step&quot;&lt;/p&gt;

&lt;p&gt;What specifically about that wording specifically suggests that the implementation will use naive increment-and-recurse behaviour? My reading is that the function will return a lazy sequence of numbers from start to end separated by step, not separated by &apos;almost step&apos;.&lt;/p&gt;

&lt;p&gt;This implementation leads to unexpected behaviour with bounds:&lt;/p&gt;

&lt;p&gt;=&amp;gt; (count (range 0 100 1))&lt;br/&gt;
100&lt;br/&gt;
=&amp;gt; (count (range 0 10 0.1))&lt;br/&gt;
101&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.ima.umn.edu/~arnold/455.f96/disasters.html&quot;&gt;http://www.ima.umn.edu/~arnold/455.f96/disasters.html&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30845" author="timothypratley" created="Fri, 29 Mar 2013 17:09:50 -0500"  >&lt;p&gt;range could avoid this issue cleanly by converting floats to bigdecimals (let me know if you think this is a good idea?)&lt;/p&gt;

&lt;p&gt;I ran into this problem recently, and have to say it was pretty ugly. This is how I avoided the issue:&lt;/p&gt;

&lt;p&gt;(defn rangef&lt;br/&gt;
  &quot;Returns a sequence of n numbers from start to end inclusive.&quot;&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;start end n&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (for &lt;span class=&quot;error&quot;&gt;&amp;#91;i (range 0 n)&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (+ start (* i (/ (- end start) (dec n))))))&lt;/p&gt;

&lt;p&gt;Hope that helps any disillusioned float users out there, or just pass in BigDecimals to range instead of floats... I would go so far as to say using floats with range as it stands is almost always going to end in tears (or worse as Stephen describes &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;).&lt;/p&gt;</comment>
                    <comment id="30846" author="timothypratley" created="Fri, 29 Mar 2013 17:10:49 -0500"  >&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;and just to be clear if it is considered an error, it would be nice if range explicitly forbade it&amp;#93;&lt;/span&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1165] Forbid varargs defprotocol/definterface method declarations because those cannot be defined anyway</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1165</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Protocol, interface method declarations don&apos;t allow for varags.  Currently, for example&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;  (defprotocol FooBar
    (foo [this &amp;amp; more]))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;compiles just fine, and &lt;tt&gt;&amp;amp;&lt;/tt&gt; is interpreted as a usual argument that happens to be&lt;br/&gt;
named &lt;tt&gt;&amp;amp;&lt;/tt&gt; without special meaning.  But clearly, the user wanted to specify a&lt;br/&gt;
varags parameter here.  The same applies to &lt;tt&gt;definterface&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;Similarly, providing method implementations via &lt;tt&gt;defrecord&lt;/tt&gt;, &lt;tt&gt;deftype&lt;/tt&gt;, and &lt;tt&gt;reify&lt;/tt&gt;&lt;br/&gt;
don&apos;t allow for varags (but dynamic extensions via &lt;tt&gt;extend&lt;/tt&gt; do).&lt;/p&gt;

&lt;p&gt;So this patch makes &lt;tt&gt;defprotocol&lt;/tt&gt; and &lt;tt&gt;definterface&lt;/tt&gt; throw an&lt;br/&gt;
&lt;tt&gt;IllegalArgumentException&lt;/tt&gt; if a user tries to use varargs in method signatures.&lt;/p&gt;

&lt;p&gt;Similarly, &lt;tt&gt;defrecord&lt;/tt&gt;, &lt;tt&gt;deftype&lt;/tt&gt;, and &lt;tt&gt;reify&lt;/tt&gt; throw an &lt;tt&gt;IllegalArgumentException&lt;/tt&gt; if&lt;br/&gt;
any method implementation arglist contains a varargs argument.&lt;/p&gt;

&lt;p&gt;This patch is a cut-down variant of my patch to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1024&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-1024&lt;/a&gt;&lt;br/&gt;
which has been reverted shortly before Clojure 1.5 was released.  The &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1024&quot; title=&quot;Varargs protococol impls can be defined but not called&quot;&gt;&lt;del&gt;CLJ-1024&lt;/del&gt;&lt;/a&gt; patch&lt;br/&gt;
was the same as this one, but it has also forbidden destructuring in &lt;tt&gt;defprotocol&lt;/tt&gt; and&lt;br/&gt;
&lt;tt&gt;definterface&lt;/tt&gt;.  This was a bit too much, because although destructuring has no&lt;br/&gt;
semantic meaning with method declarations, it still can serve a documentation purpose.&lt;/p&gt;

&lt;p&gt;This has been discussed on the list: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/qjkW-cv8nog/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/qjkW-cv8nog/discussion&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16015">CLJ-1165</key>
            <summary>Forbid varargs defprotocol/definterface method declarations because those cannot be defined anyway</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                    </labels>
                <created>Fri, 15 Feb 2013 02:13:32 -0600</created>
                <updated>Thu, 4 Apr 2013 19:24:27 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30834" author="stu" created="Fri, 29 Mar 2013 05:27:06 -0500"  >&lt;p&gt;I think that this patch would be much more helpful to users if it reported the problem form (both name and params). &lt;/p&gt;

&lt;p&gt;(And I wonder if we should be using ex-info for all errors going forward.)&lt;/p&gt;</comment>
                    <comment id="30853" author="tsdh" created="Sun, 31 Mar 2013 05:17:34 -0500"  >&lt;p&gt;New version of the patch that mentions both method name and argument vector, and uses ex-info as Stu suggested.&lt;/p&gt;</comment>
                    <comment id="30874" author="jafingerhut" created="Thu, 4 Apr 2013 19:24:27 -0500"  >&lt;p&gt;Presumuptuously changing Approval from Incomplete back to None, since the reason for marking it Incomplete seems to have been addressed with a new patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11933" name="0001-Protocol-interface-method-declarations-don-t-allow-f.patch" size="3236" author="tsdh" created="Sun, 31 Mar 2013 05:17:34 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1164] typos in instant.clj</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1164</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There are a few typographical mistakes in instant.clj.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16010">CLJ-1164</key>
            <summary>typos in instant.clj</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Feb 2013 11:59:36 -0600</created>
                <updated>Fri, 10 May 2013 12:48:26 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30598" author="steveminer@gmail.com" created="Thu, 14 Feb 2013 12:01:17 -0600"  >&lt;p&gt;Fixes a couple of typos.  No code changes.&lt;/p&gt;</comment>
                    <comment id="31078" author="cldwalker" created="Fri, 10 May 2013 11:25:20 -0500"  >&lt;p&gt;For anyone wondering about the UTC change see &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-928&quot; title=&quot;instant literal for Date and Timestamp should print in UTC&quot;&gt;&lt;del&gt;CLJ-928&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11858" name="CLJ-1164-typos-instant.patch" size="1618" author="steveminer@gmail.com" created="Thu, 14 Feb 2013 12:01:17 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10004">Screened</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1163] Updates to changes.md for Clojure 1.5.0-RC15</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1163</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Attached patch contains additional changes that have been made since late Oct 2012 up through Clojure 1.5.0-RC15.  Also a few minor formatting tweaks to recently added section on edn reader.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16007">CLJ-1163</key>
            <summary>Updates to changes.md for Clojure 1.5.0-RC15</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Wed, 13 Feb 2013 10:47:38 -0600</created>
                <updated>Wed, 13 Feb 2013 21:26:19 -0600</updated>
                    <resolved>Wed, 13 Feb 2013 21:26:19 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11855" name="update-changes-md-v1.txt" size="3585" author="jafingerhut" created="Wed, 13 Feb 2013 10:48:10 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1162] Error Message when calling deref on a non-IDeref is unhelpful</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1162</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you just type &quot;@1&quot; is the repl, on previous versions you&apos;ll get an error that Long cannot be cast to IDeref.  In 1.5, the error message is that it cannot be cast to java.util.concurrent.Future.  This is because it assumes that anything that isn&apos;t an IDeref is automatically a Future.  The deref method should generate a custom error stating that the type you&apos;ve passed in is neither an IDeref nor a Future. &lt;/p&gt;</description>
                <environment>Found this on ubuntu, lein 2, Clojure 1.5 snapshot, but it&amp;#39;s obvious from inspection</environment>
            <key id="16003">CLJ-1162</key>
            <summary>Error Message when calling deref on a non-IDeref is unhelpful</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="julian">Julian Birch</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Feb 2013 03:01:23 -0600</created>
                <updated>Fri, 1 Mar 2013 10:18:22 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1161] sources jar has bad versions.properties resource</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1161</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &quot;sources&quot; jar (at least since Clojure 1.4 and including 1.5 RC) has a bad version.properties file in it. The resource clojure/version.properties is literally:&lt;/p&gt;

&lt;p&gt;version=${version}&lt;/p&gt;

&lt;p&gt;The regular Clojure jar has the correct version string in that resource.&lt;/p&gt;

&lt;p&gt;I came across a problem when I was experimenting with the sources jar (as used by IDEs).  I naively added the sources jar to my classpath, and Clojure died on start up.  The bad clojure/versions.properties file was found first, which led to a parse error as the clojure version was being set.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16001">CLJ-1161</key>
            <summary>sources jar has bad versions.properties resource</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Mon, 11 Feb 2013 10:03:01 -0600</created>
                <updated>Fri, 12 Apr 2013 09:36:58 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30577" author="steveminer@gmail.com" created="Mon, 11 Feb 2013 10:04:27 -0600"  >&lt;p&gt;Notes from the dev mailing list:&lt;/p&gt;

&lt;p&gt;The &quot;sources&quot; JAR is generated by another Maven plugin, configured here:&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojure/blob/clojure-1.5.0-RC15/pom.xml#L169-L181&quot;&gt;https://github.com/clojure/clojure/blob/clojure-1.5.0-RC15/pom.xml#L169-L181&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The simplest solution might be to just exclude the file from the sources jar. It looks like maven-source-plugin has an excludes option which would do the trick:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://maven.apache.org/plugins/maven-source-plugin/jar-mojo.html#excludes&quot;&gt;http://maven.apache.org/plugins/maven-source-plugin/jar-mojo.html#excludes&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11861" name="0001-CLJ-1161-Remove-version.properties-from-sources-JAR.patch" size="1099" author="stuart.sierra" created="Sat, 16 Feb 2013 15:19:33 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1160] reducers/mapcat ignores Reduced</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1160</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The following code throws an exception:&lt;/p&gt;

&lt;p&gt;(-&amp;gt;&amp;gt; (concat (range 100) (lazy-seq (throw (Exception. &quot;Too eager&quot;))))&lt;br/&gt;
             (r/mapcat (juxt inc str))&lt;br/&gt;
             (r/take 5)&lt;br/&gt;
             (into []))&lt;/p&gt;

&lt;p&gt;This is because r/mapcat introduces an intermediate reduce which swallows the reduced value coming from r/take.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16000">CLJ-1160</key>
            <summary>reducers/mapcat ignores Reduced</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cgrand">Christophe Grand</assignee>
                                <reporter username="cgrand">Christophe Grand</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Feb 2013 08:38:36 -0600</created>
                <updated>Fri, 1 Mar 2013 09:40:09 -0600</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                                <attachments>
                    <attachment id="11846" name="lazy-rmapcat.diff" size="1747" author="cgrand" created="Mon, 11 Feb 2013 08:38:36 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1159] clojure.java.io/delete-file doesn&apos;t return the status of the deletion(true/false)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1159</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;initially reported it here(somehow):&lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/d/msg/clojure/T9Kvr0IL0kg/wcKBfR9w_1sJ&quot;&gt;https://groups.google.com/d/msg/clojure/T9Kvr0IL0kg/wcKBfR9w_1sJ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically clojure.java.io/delete-file doesn&apos;t ever return false (even when silently is true, it returns the value of silently), it&apos;s due to how it&apos;s implemented - but it&apos;s obvious from the code, so I&apos;ll stop here.&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;

&lt;p&gt;PS: this is what I&apos;m using as my current workaround:&lt;br/&gt;
(defn delete-file&lt;br/&gt;
&quot;&lt;br/&gt;
an implementation that returns the true/false status&lt;br/&gt;
which clojure.java.io/delete-file doesn&apos;t do(tested in 1.5.0-RC14)&lt;br/&gt;
&quot;&lt;br/&gt;
  [f &amp;amp; &lt;span class=&quot;error&quot;&gt;&amp;#91;silently&amp;#93;&lt;/span&gt;]&lt;br/&gt;
  (let &lt;span class=&quot;error&quot;&gt;&amp;#91;ret (.delete (clojure.java.io/file f))&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (cond (or ret silently)&lt;br/&gt;
      ret&lt;br/&gt;
      :else&lt;br/&gt;
      (throw (java.io.IOException. (str &quot;Couldn&apos;t delete &quot; f)))&lt;br/&gt;
      )&lt;br/&gt;
    )&lt;br/&gt;
  )&lt;/p&gt;

&lt;p&gt;I&apos;m sure you guys can find a better way, but as a clojure newbie(really!) that&apos;s what I have.&lt;/p&gt;</description>
                <environment>any</environment>
            <key id="15999">CLJ-1159</key>
            <summary>clojure.java.io/delete-file doesn&apos;t return the status of the deletion(true/false)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="atkaaz">AtKaaZ</reporter>
                        <labels>
                        <label>delete-file</label>
                        <label>evil</label>
                        <label>or</label>
                    </labels>
                <created>Sun, 10 Feb 2013 13:55:52 -0600</created>
                <updated>Sun, 10 Feb 2013 14:21:28 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30575" author="atkaaz" created="Sun, 10 Feb 2013 14:01:08 -0600"  >&lt;p&gt;I kinda just realized it affects all versions since and including 1.2, because it appears that its implementation was the same since then.&lt;/p&gt;

&lt;p&gt;If it&apos;s not meant to return the result of the delete, maybe it should specifically return nil and/or the doc say something?&lt;/p&gt;</comment>
                    <comment id="30576" author="seancorfield" created="Sun, 10 Feb 2013 14:21:28 -0600"  >&lt;p&gt;As noted in a thread on the Clojure ML, you can pass a known value in the second argument position to detect a delete that failed:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;(clojure.java.io/delete-file some-file :not-deleted)&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;This returns true on success and :not-deleted on failure.&lt;/p&gt;

&lt;p&gt;However the docstring could be better worded to make that intention clear. Perhaps:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;Delete file f. Return true if it succeeds. If silently is nil or false, raise an exception if it fails, else return the value of silently.&lt;/tt&gt;&lt;br/&gt;
&lt;tt&gt;This allows you to detect whether the delete succeeded without catching an exception by passing a non-true truthy value as the second argument.&lt;/tt&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1158] generative tests for read and edn/read</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1158</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This patch gets some generative read and edn/read roundtripping tests into the build, and the generators should serve as a basis for further extension. The patch is broken into three commits:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;adopt the latest test.generative and data.generators, which have been enhanced to include generators more types (e.g. uuid, date, ratio)&lt;/li&gt;
	&lt;li&gt;tests&lt;/li&gt;
	&lt;li&gt;increase the duration of generative tests in the build&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;At the time I am posting this, test.generative 0.4.0 is not in Maven Central, so to build Clojure with this patch you will need to either wait on Central, or grab the latest test.generative bits, back up to the commit tagged 0.4.0, and &lt;tt&gt;mvn clean install&lt;/tt&gt; test.generative.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15997">CLJ-1158</key>
            <summary>generative tests for read and edn/read</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sat, 9 Feb 2013 09:53:28 -0600</created>
                <updated>Sat, 9 Feb 2013 14:46:21 -0600</updated>
                    <resolved>Sat, 9 Feb 2013 14:46:21 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11845" name="reader-tests.patch" size="9012" author="stu" created="Sat, 9 Feb 2013 09:53:28 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1157] Classes generated by gen-class aren&apos;t loadable from remote codebase for mis-implementation of static-initializer</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1157</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When a client program uses a remote service which uses RMI, and the service returns a object which created with gen-class with clojure as the return value, the return value is not loadable at client side.&lt;/p&gt;

&lt;p&gt;At client side, a following exeption will be thrown.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ExceptionInInitializerError
        at java.io.ObjectStreamClass.hasStaticInitializer(Native Method)
        at java.io.ObjectStreamClass.computeDefaultSUID(ObjectStreamClass.java:1723)
        at java.io.ObjectStreamClass.access$100(ObjectStreamClass.java:69)
        at java.io.ObjectStreamClass$1.run(ObjectStreamClass.java:247)
        at java.io.ObjectStreamClass$1.run(ObjectStreamClass.java:245)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.io.ObjectStreamClass.getSerialVersionUID(ObjectStreamClass.java:244)
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:600)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
        at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:324)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:173)
        at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
        at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
        at $Proxy0.getResult(Unknown Source)
        at client.SampleClient$_main.doInvoke(SampleClient.clj:12)
        at clojure.lang.RestFn.invoke(RestFn.java:397)
        at clojure.lang.AFn.applyToHelper(AFn.java:159)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at client.SampleClient.main(Unknown Source)
 Caused by: java.io.FileNotFoundException: Could not locate remoteserver/SampleInterfaceImpl__init.class or remoteserver/SampleInterfaceImpl.clj on classpath: 
        at clojure.lang.RT.load(RT.java:434)
        at clojure.lang.RT.load(RT.java:402)
        at clojure.core$load$fn__5039.invoke(core.clj:5520)
        at clojure.core$load.doInvoke(core.clj:5519)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:415)
        at remoteserver.SampleInterfaceImpl.&amp;lt;clinit&amp;gt;(Unknown Source)
        ... 23 more&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h2&gt;&lt;a name=&quot;HOWTOREPRODUCTTHISISSUE&quot;&gt;&lt;/a&gt;HOW TO REPRODUCT THIS ISSUE&lt;/h2&gt;

&lt;p&gt;If you want to see this issue at your computer, clone my example project from my github.&lt;/p&gt;

&lt;p&gt;git clone git://github.com/tyano/clojure_genclass_fix.git&lt;/p&gt;

&lt;p&gt;and build them (You must have installed Leiningen 2):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;cd clojure_genclass_fix
sh build.sh&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;start rmiregistry:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;rmiregistry &amp;amp;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;start remoteserver:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;cd remoteserver
sh start.sh&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You will see a message &quot;Server ready. &quot; or &quot;Server ready. (rebind)&quot;.&lt;/p&gt;

&lt;p&gt;At last, start client program:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;cd ../client
sh start.sh&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Without my patch, you will see a same Exception described above. But with clojure with my patch, you will see a right response message: &quot;response = this is sample.&quot;&lt;/p&gt;


&lt;h2&gt;&lt;a name=&quot;THEREASON&quot;&gt;&lt;/a&gt;THE REASON        &lt;/h2&gt;

&lt;p&gt;The reason of this problem is in bytecodes generated by gen-class. A gen-classed class (in this case, SampleInterfaceImpl.class) uses a static-initializer for loading SampleInterfaceImpl__init.class (which load other classes which implements functions in the class). The static-initializer is like bellow: (the following code is decompiled with JD - &lt;a href=&quot;http://java.decompiler.free.fr/?q=jdgui&quot;&gt;http://java.decompiler.free.fr/?q=jdgui&lt;/a&gt; )&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt;
  {
    RT.&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;(&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure.core&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;load&quot;&lt;/span&gt;).invoke(&lt;span class=&quot;code-quote&quot;&gt;&quot;/remoteserver/SampleInterfaceImpl&quot;&lt;/span&gt;);
  }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Very simple code. it seems non-problematic. But RT.load changes the classloader for loading __init.class in the processing! RT.load in default uses a context-classloader for loading classes. But all classes depending on a gen-classed class must be loaded a same classloader with a main gen-classed class. In this case, RT.load must use a remote URLClassLoader which load a main class.&lt;/p&gt;

&lt;p&gt;So, gen-class must be create bytecodes that is same with the following java code.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt;
  {
    Var.pushThreadBindings(RT.map(&lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;[] { &lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.LOADER, SampleInterfaceImpl.class.getClassLoader() }));
    &lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; {
        RT.&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;(&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure.core&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;load&quot;&lt;/span&gt;).invoke(&lt;span class=&quot;code-quote&quot;&gt;&quot;/remoteserver/SampleInterfaceImpl&quot;&lt;/span&gt;);
    }
    &lt;span class=&quot;code-keyword&quot;&gt;finally&lt;/span&gt; 
    {
        Var.popThreadBindings();
    }
  }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With this code, RT.load will uses a same classloader which load SampleInterfaceImpl.class.&lt;br/&gt;
My patch for gen-class will create bytecodes equal to the above example.&lt;/p&gt;

&lt;p&gt;You can use an attached patch &apos;20130204_fix_classloader.diff&apos;, or pull &apos;fix_classloader&apos; branch from my github repositry ( git@github.com:tyano/clojure.git ).&lt;/p&gt;</description>
                <environment>Tested on Mac OS X 10.8 and Oracle JVM 1.7.0 update 13.</environment>
            <key id="15988">CLJ-1157</key>
            <summary>Classes generated by gen-class aren&apos;t loadable from remote codebase for mis-implementation of static-initializer</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tyano">Tsutomu Yano</reporter>
                        <labels>
                    </labels>
                <created>Mon, 4 Feb 2013 01:06:21 -0600</created>
                <updated>Fri, 12 Apr 2013 09:19:05 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30675" author="stu" created="Fri, 1 Mar 2013 10:20:27 -0600"  >&lt;p&gt;This sounds reasonable, but anything touching classloaders must be considered very carefully.&lt;/p&gt;</comment>
                    <comment id="30679" author="stu" created="Fri, 1 Mar 2013 12:12:09 -0600"  >&lt;p&gt;It seems overly complex to have the patch do so much code generation.  Why not implement a method that does this job, and have the generated code call that?&lt;/p&gt;
</comment>
                </comments>
                    <attachments>
                    <attachment id="11832" name="20130204_fix_classloader.diff" size="4563" author="tyano" created="Mon, 4 Feb 2013 01:06:21 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1156] clojure.walk/stringifiy-keys does not stringify non-keyword keys</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1156</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc says &quot;Recursively transforms all map keys from keywords to strings.&quot; however only those keys that pass keyword? get transformed to string. This leaves other keys such as java.Long as-is.&lt;/p&gt;

&lt;p&gt;A simple fix would be &lt;/p&gt;

&lt;p&gt;(defn stringify-keys*&lt;br/&gt;
  &quot;Recursively transforms all map keys from keywords to strings.&quot;&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;m&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (let [f (fn [&lt;span class=&quot;error&quot;&gt;&amp;#91;k v&amp;#93;&lt;/span&gt;] (if (keyword? k) &lt;span class=&quot;error&quot;&gt;&amp;#91;(name k) v&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;(str k) v&amp;#93;&lt;/span&gt;))]&lt;br/&gt;
    ;; only apply to maps&lt;br/&gt;
    (postwalk (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (if (map? x) (into {} (map f x)) x)) m)))&lt;/p&gt;</description>
                <environment></environment>
            <key id="15986">CLJ-1156</key>
            <summary>clojure.walk/stringifiy-keys does not stringify non-keyword keys</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="joelkuiper">Joel Kuiper</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Feb 2013 19:23:16 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Mon, 4 Feb 2013 09:30:31 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30539" author="jafingerhut" created="Sun, 3 Feb 2013 23:20:30 -0600"  >&lt;p&gt;It appears from the doc string that this function does exactly what it claims it will do, without any changes.&lt;/p&gt;</comment>
                    <comment id="30540" author="joelkuiper" created="Mon, 4 Feb 2013 04:29:36 -0600"  >&lt;p&gt;You&apos;re right.&lt;br/&gt;
Somehow I parsed the doc string wrongly. My sincere apologies! Can be marked invalid. &lt;/p&gt;</comment>
                    <comment id="30541" author="jafingerhut" created="Mon, 4 Feb 2013 09:30:31 -0600"  >&lt;p&gt;Closing as declined, since submitter agrees that code behavior and documentation match.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10000">None</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1155] Suppress tracebacks from clojure.core</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1155</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It would be really nice if we could hide the Java traceback from the compiler when it&apos;s not relevant. When there&apos;s no Java interop, it&apos;s not useful. I can&apos;t see any case where we want the tracebacks from the compiler referencing clojure.core.&lt;/p&gt;

&lt;p&gt;Here&apos;s how a syntax error traceback looks at the moment on trunk:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ more dodgy-map.clj
(defn dodgy-map []
  {:1 :2 :3})
$ java -cp target/clojure-1.5.0-master-SNAPSHOT.jar clojure.main dodgy-map.clj
Exception in thread &quot;main&quot; java.lang.RuntimeException: Map literal must contain an even number of forms, compiling:(/home/wilfred/src/clojure/dodgy-map.clj:2:13)
	at clojure.lang.Compiler.load(Compiler.java:7070)
	at clojure.lang.Compiler.loadFile(Compiler.java:7020)
	at clojure.main$load_script.invoke(main.clj:286)
	at clojure.main$script_opt.invoke(main.clj:348)
	at clojure.main$main$fn__6682.invoke(main.clj:432)
	at clojure.main$main.doInvoke(main.clj:429)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.lang.Var.invoke(Var.java:415)
	at clojure.lang.AFn.applyToHelper(AFn.java:161)
	at clojure.lang.Var.applyTo(Var.java:532)
	at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Map literal must contain an even number of forms
	at clojure.lang.Util.runtimeException(Util.java:219)
	at clojure.lang.LispReader$MapReader.invoke(LispReader.java:1090)
	at clojure.lang.LispReader.readDelimitedList(LispReader.java:1145)
	at clojure.lang.LispReader$ListReader.invoke(LispReader.java:979)
	at clojure.lang.LispReader.read(LispReader.java:182)
	at clojure.lang.Compiler.load(Compiler.java:7058)
	... 10 more
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With my patch, this is simplified to:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ java -cp target/clojure-1.5.0-master-SNAPSHOT.jar clojure.main dodgy-map.clj
java.lang.RuntimeException: Map literal must contain an even number of forms, compiling:(/home/wilfred/src/clojure/dodgy-map.clj:2:13)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Another example: here&apos;s how name errors appear on trunk:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ more i-dont-exist.clj
(defn no-such-variable []
  i-dont-exist)
$ java -cp target/clojure-1.5.0-master-SNAPSHOT.jar clojure.main i-dont-exist.clj
Exception in thread &quot;main&quot; java.lang.RuntimeException: Unable to resolve symbol: i-dont-exist in this context, compiling:(/home/wilfred/src/clojure/i-dont-exist.clj:1:1)
	at clojure.lang.Compiler.analyze(Compiler.java:6380)
	at clojure.lang.Compiler.analyze(Compiler.java:6322)
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5708)
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5139)
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3751)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6558)
	at clojure.lang.Compiler.analyze(Compiler.java:6361)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6548)
	at clojure.lang.Compiler.analyze(Compiler.java:6361)
	at clojure.lang.Compiler.access$100(Compiler.java:37)
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:529)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6560)
	at clojure.lang.Compiler.analyze(Compiler.java:6361)
	at clojure.lang.Compiler.analyze(Compiler.java:6322)
	at clojure.lang.Compiler.eval(Compiler.java:6623)
	at clojure.lang.Compiler.load(Compiler.java:7063)
	at clojure.lang.Compiler.loadFile(Compiler.java:7020)
	at clojure.main$load_script.invoke(main.clj:286)
	at clojure.main$script_opt.invoke(main.clj:348)
	at clojure.main$main$fn__6682.invoke(main.clj:432)
	at clojure.main$main.doInvoke(main.clj:429)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.lang.Var.invoke(Var.java:415)
	at clojure.lang.AFn.applyToHelper(AFn.java:161)
	at clojure.lang.Var.applyTo(Var.java:532)
	at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: i-dont-exist in this context
	at clojure.lang.Util.runtimeException(Util.java:219)
	at clojure.lang.Compiler.resolveIn(Compiler.java:6874)
	at clojure.lang.Compiler.resolve(Compiler.java:6818)
	at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6779)
	at clojure.lang.Compiler.analyze(Compiler.java:6343)
	... 25 more
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With patch:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ java -cp target/clojure-1.5.0-master-SNAPSHOT.jar clojure.main i-dont-exist.clj
java.lang.RuntimeException: Unable to resolve symbol: i-dont-exist in this context, compiling:(/home/wilfred/src/clojure/i-dont-exist.clj:1:1)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&apos;m not familiar with the compiler internals, but I&apos;ve attached a tentative patch. Undoubtedly it isn&apos;t perfect. For one, it would be nicer to say &apos;Syntax error&apos; rather than &apos;java.lang.RuntimeException&apos;. All the tests pass with this change.&lt;/p&gt;

&lt;p&gt;Relevant mailing list discussion: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!searchin/clojure/wilfred/clojure/M5NlEW7HJ_c/joUY6mo6Rd8J&quot;&gt;https://groups.google.com/forum/?fromgroups=#!searchin/clojure/wilfred/clojure/M5NlEW7HJ_c/joUY6mo6Rd8J&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please let me know what you think. This would make my life easier when developing.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15984">CLJ-1155</key>
            <summary>Suppress tracebacks from clojure.core</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="wilfred">Wilfred Hughes</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Fri, 1 Feb 2013 17:44:16 -0600</created>
                <updated>Fri, 29 Mar 2013 06:06:12 -0500</updated>
                    <resolved>Fri, 29 Mar 2013 06:06:12 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30837" author="stu" created="Fri, 29 Mar 2013 06:06:12 -0500"  >&lt;p&gt;It is easy for tools that consume Clojure to hide stack traces for those who do not want to see them.  If Clojure itself eats stack traces, it is impossible for those of us who &lt;b&gt;do&lt;/b&gt; want to see them to get them back.&lt;/p&gt;

&lt;p&gt;Please do this kind of work in tool (if at all) and make it optional for users.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11827" name="suppress_tracebacks.patch" size="1016" author="wilfred" created="Fri, 1 Feb 2013 17:44:16 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1154] Compile.java closes out preventing java from reporting exceptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1154</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I was trying to compile a project that has some native dependencies.  I am using clojure-maven-plugin version 1.3.13 with Maven 2.0.  I forgot to set java.library.path properly so that the native library could be found, and only got an error of&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Clojure failed.
[INFO] ------------------------------------------------------------------------
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I traced this down to Compile.java, where it is flushing and closing &lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;out&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; in the finally block.  The JVM uses out to write out a stack trace for any uncaught exceptions.  When out is closed it is unable to write out the stack trace for the UnsatisfiedLinkError that was being thrown.  This made it very difficult to debug what was happening.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15983">CLJ-1154</key>
            <summary>Compile.java closes out preventing java from reporting exceptions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="revans2">Robert (Bobby) Evans</reporter>
                        <labels>
                    </labels>
                <created>Thu, 31 Jan 2013 13:04:08 -0600</created>
                <updated>Fri, 12 Apr 2013 09:31:03 -0500</updated>
                                    <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30677" author="stu" created="Fri, 1 Mar 2013 10:45:51 -0600"  >&lt;p&gt;I have encountered this problem as well.  Did not verify the explanation, but sounds reasonable.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1153] Change *read-eval* default value to false</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1153</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Discussion on the security implications of &lt;b&gt;read-eval&lt;/b&gt; defaulting to true here: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/qUk-bM0JSGc&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/qUk-bM0JSGc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;m not sure whether the unit test that needs &lt;b&gt;read-eval&lt;/b&gt; true in order to pass is a sign of lots of other code that would break if &lt;b&gt;read-eval&lt;/b&gt; defaulted to false.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15982">CLJ-1153</key>
            <summary>Change *read-eval* default value to false</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Wed, 30 Jan 2013 10:49:54 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Sat, 9 Feb 2013 09:17:03 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>33</votes>
                        <watches>14</watches>
                        <comments>
                    <comment id="30518" author="technomancy" created="Thu, 31 Jan 2013 11:55:29 -0600"  >&lt;p&gt;It&apos;s worth noting that there was a breakin to rubygems.org over the weekend that was caused by what amounts to this same issue, but with YAML: &lt;a href=&quot;https://news.ycombinator.com/item?id=5141138&quot;&gt;https://news.ycombinator.com/item?id=5141138&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The current default is both dangerous and undocumented; this needs to change.&lt;/p&gt;</comment>
                    <comment id="30519" author="sorenmacbeth" created="Thu, 31 Jan 2013 12:33:07 -0600"  >&lt;p&gt;Seconded!&lt;/p&gt;</comment>
                    <comment id="30520" author="mikera" created="Fri, 1 Feb 2013 00:52:16 -0600"  >&lt;p&gt;Thirded. &lt;/p&gt;

&lt;p&gt;For what it&apos;s worth, on the topic of breaking changes I&apos;d &lt;b&gt;much&lt;/b&gt; rather my old code break than continue to work with an unnoticed security hole.&lt;/p&gt;</comment>
                    <comment id="30521" author="stu" created="Fri, 1 Feb 2013 07:21:24 -0600"  >&lt;p&gt;Fourthed.  I hope folks will pitch in and help deal with any breakage.&lt;/p&gt;</comment>
                    <comment id="30523" author="cemerick" created="Fri, 1 Feb 2013 12:57:14 -0600"  >&lt;p&gt;New patch attached, {{&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1185&quot; title=&quot;`reductions should respect `reduced&quot;&gt;CLJ-1185&lt;/a&gt;.patch}}.&lt;/p&gt;

&lt;p&gt;This patch eliminates the use of &lt;tt&gt;&amp;#42;print-dup&amp;#42;&lt;/tt&gt; in the compiler entirely.  &lt;tt&gt;read-string&lt;/tt&gt; continues to be used to support values that can only be represented via tagged reader literals; I don&apos;t think there&apos;s any way around that, since the mapping between particular data readers and values&apos; types are buried in individual &lt;tt&gt;print-method&lt;/tt&gt; implementations.&lt;/p&gt;

&lt;p&gt;All tests pass (including cases like &lt;tt&gt;(eval (list + 1 2 3))&lt;/tt&gt; as discussed in the ML thread referenced in the issue description), and a variety of sanity checks around evaluation and compilation tooling (e.g. AOT, nREPL, introspection utilities in Leiningen/Reply/Counterclockwise) all work as expected.&lt;/p&gt;

&lt;p&gt;Of course, if this is applied, then any usage of &lt;tt&gt;read&lt;/tt&gt; over &lt;b&gt;trusted&lt;/b&gt; content containing &lt;tt&gt;#=&lt;/tt&gt; forms will need to be done with &lt;tt&gt;&amp;#42;read-eval&amp;#42;&lt;/tt&gt; bound to &lt;tt&gt;true&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;To aid in testing, a Clojure build (&lt;tt&gt;1.5.0-RC4&lt;/tt&gt;) + this patch is available here:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[com.cemerick/clojure &lt;span class=&quot;code-quote&quot;&gt;&quot;1.5.0-SNAPSHOT&quot;&lt;/span&gt;]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that you&apos;ll have to exclude the standard Clojure dependency from your project in order for this one to take precedence; you can do this by adding&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;:exclusions [org.clojure/clojure]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;to your &lt;tt&gt;project.clj&lt;/tt&gt;.&lt;/p&gt;</comment>
                    <comment id="30524" author="pjstadig" created="Fri, 1 Feb 2013 14:49:18 -0600"  >&lt;p&gt;I ran the Sonian test base against this patch.  I wouldn&apos;t say our test cases are comprehensive, but they&apos;re not trivial.  We talk to databases through JDBC, and we deal with lots of different data types (BigInts, Strings, Dates, and such).&lt;/p&gt;

&lt;p&gt;I had to make a few small changes to our code base, because we rely pretty heavily on &lt;b&gt;print-dup&lt;/b&gt; to serialize non-user originated data.  We have to add corresponding binding blocks when reading to set &lt;b&gt;read-eval&lt;/b&gt; to true.  Other than that, the tests all passed.&lt;/p&gt;

&lt;p&gt;+1&lt;/p&gt;</comment>
                    <comment id="30525" author="cemerick" created="Fri, 1 Feb 2013 16:28:22 -0600"  >&lt;p&gt;Thanks to all that have tested the patch!  Looks like we&apos;ve made some progress.  I&apos;m going to post to the main Clojure ML now and hopefully get more yay/nay votes.&lt;/p&gt;</comment>
                    <comment id="30527" author="jafingerhut" created="Sat, 2 Feb 2013 11:05:03 -0600"  >&lt;p&gt;clj-1153-patch-v2.txt dated Feb 2 2013 is functionally identical to Chas Emerick&apos;s &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1185&quot; title=&quot;`reductions should respect `reduced&quot;&gt;CLJ-1185&lt;/a&gt;.patch dated Feb 1 2013, and no retesting is needed by anyone because of it.&lt;/p&gt;

&lt;p&gt;The only change I have made to his patch is: the doc string for &lt;b&gt;read-eval&lt;/b&gt; now says its default value is false.&lt;/p&gt;</comment>
                    <comment id="30528" author="jafingerhut" created="Sat, 2 Feb 2013 11:06:09 -0600"  >&lt;p&gt;Also removed my original didn&apos;t-fix-enough-things patch from Jan 30 2013.&lt;/p&gt;</comment>
                    <comment id="30532" author="timmc" created="Sat, 2 Feb 2013 15:22:49 -0600"  >&lt;p&gt;I&apos;m bumping the Priority field from its default value to &quot;Major&quot; to reflect recent events. (I personally feel &quot;blocker&quot; would be more appropriate, or at least &quot;critical&quot;, but I don&apos;t want to step on any toes.)&lt;/p&gt;</comment>
                    <comment id="30548" author="richhickey" created="Mon, 4 Feb 2013 19:55:25 -0600"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/974a64c06917861b7557fd73154254195b2de548&quot;&gt;https://github.com/clojure/clojure/commit/974a64c06917861b7557fd73154254195b2de548&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30574" author="richhickey" created="Sat, 9 Feb 2013 09:17:03 -0600"  >&lt;p&gt;This ticket is an excellent example of a terrible ticket.&lt;/p&gt;

&lt;p&gt;1) It does not lead with a problem statement. The title takes the form akin to &quot;I want X&quot;. It proposes a tactic.&lt;/p&gt;

&lt;p&gt;2) The description is woefully inadequate. Here too, no problem statement. Descriptions should point to any discussions, but discussions are long and rambling, and no substitute for a succinct problem statement in the description. Descriptions need to be maintained, with the current strategy and name of best patch.&lt;/p&gt;

&lt;p&gt;3) No resolution strategy. Just patches attached. How is a reviewer supposed to assess your patch if you don&apos;t even bother stating what the problem is and what your approach will be in fixing it, how that approach does fix it, and what if any tradeoffs are being made?&lt;/p&gt;

&lt;p&gt;4) The change being requested would be a breaking change. That should be made extremely clear in the description, and doubles the threshold for quality of motivation and implementation.&lt;/p&gt;

&lt;p&gt;5) Any breaking change would have to carefully enumerate what would break and when, what the migration strategy would be etc.&lt;/p&gt;

&lt;p&gt;6) The patch breaks the compiler. If you don&apos;t understand how the compiler works, and why features are there, you shouldn&apos;t submit patches that alter it. The only assessments made in comments are &apos;it works for me&apos;, which, while useful anecdotes, are insufficient. &lt;/p&gt;

&lt;p&gt;While the ticket itself was bad, the uncritical rallying behind it was more troubling. This is not how Clojure was built, and will not be how it is maintained.&lt;/p&gt;

&lt;p&gt;In the end, the ticket proposed a tactic, and that tactic has been rejected. Read safety has been addressed by other means.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11828" name="clj-1153-patch-v2.txt" size="8106" author="jafingerhut" created="Sat, 2 Feb 2013 11:05:03 -0600" />
                    <attachment id="11826" name="CLJ-1185.patch" size="7394" author="cemerick" created="Fri, 1 Feb 2013 12:57:14 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1152] PermGen leak in multimethods and protocol fns</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1152</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There is a PermGen memory leak that we have tracked down to protocol methods and multimethods called inside an &lt;tt&gt;eval&lt;/tt&gt;, because of the caches these methods use. The problem only arises when the value being cached is an instance of a class (such as a function or reify) that was defined inside the &lt;tt&gt;eval&lt;/tt&gt;. Thus extending &lt;tt&gt;IFn&lt;/tt&gt; or dispatching a multimethod on an &lt;tt&gt;IFn&lt;/tt&gt; are likely triggers.&lt;/p&gt;

&lt;p&gt;My fellow LonoClouder, &lt;b&gt;Jeff Dik&lt;/b&gt; describes how to reproduce and work around the problem:&lt;/p&gt;

&lt;p&gt;The easiest way that I have found to test this is to set &quot;&lt;tt&gt;-XX:MaxPermSize&lt;/tt&gt;&quot; to a reasonable value so you don&apos;t have to wait too long for the PermGen space to fill up, and to use &quot;&lt;tt&gt;-XX:+TraceClassLoading&lt;/tt&gt;&quot; and &quot;&lt;tt&gt;-XX:+TraceClassUnloading&lt;/tt&gt;&quot; to see the classes being loaded and unloaded.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;leiningen project.clj&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defproject permgen-scratch &lt;span class=&quot;code-quote&quot;&gt;&quot;0.1.0-SNAPSHOT&quot;&lt;/span&gt;
  :dependencies [[org.clojure/clojure &lt;span class=&quot;code-quote&quot;&gt;&quot;1.5.0-RC1&quot;&lt;/span&gt;]]
  :jvm-opts [&lt;span class=&quot;code-quote&quot;&gt;&quot;-XX:MaxPermSize=32M&quot;&lt;/span&gt;
             &lt;span class=&quot;code-quote&quot;&gt;&quot;-XX:+TraceClassLoading&quot;&lt;/span&gt;
             &lt;span class=&quot;code-quote&quot;&gt;&quot;-XX:+TraceClassUnloading&quot;&lt;/span&gt;])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can use &lt;tt&gt;lein swank 45678&lt;/tt&gt; and connect with slime in emacs via &lt;tt&gt;M-x slime-connect&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;To monitor the PermGen usage, you can find the Java process to watch with &quot;&lt;tt&gt;jps -lmvV&lt;/tt&gt;&quot; and then run &quot;&lt;tt&gt;jstat -gcold &lt;ins&gt;&lt;em&gt;&amp;lt;PROCESS_ID&amp;gt;&lt;/em&gt;&lt;/ins&gt; 1s&lt;/tt&gt;&quot;. According to &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html#gcold_option&quot;&gt;the jstat docs&lt;/a&gt;, the first column (PC) is the &quot;Current permanent space capacity (KB)&quot; and the second column (PU) is the &quot;Permanent space utilization (KB)&quot;. VisualVM is also a nice tool for monitoring this.&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;Multimethodleak&quot;&gt;&lt;/a&gt;Multimethod leak&lt;/h2&gt;

&lt;p&gt;Evaluating the following code will run a loop that eval&apos;s &lt;tt&gt;(take* (fn foo []))&lt;/tt&gt;.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;multimethod leak&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defmulti take* (fn [a] (type a)))

(defmethod take* clojure.lang.Fn
  [a]
  &apos;())

(def stop (atom &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;))
(def sleep-duration (atom 1000))

(defn run-loop []
  (when-not @stop
    (eval &apos;(take* (fn foo [])))
    (&lt;span class=&quot;code-object&quot;&gt;Thread&lt;/span&gt;/sleep @sleep-duration)
    (recur)))

(&lt;span class=&quot;code-keyword&quot;&gt;future&lt;/span&gt; (run-loop))

(reset! sleep-duration 0)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the &lt;tt&gt;lein swank&lt;/tt&gt; session, you will see many lines like below listing the classes being created and loaded.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[Loaded user$eval15802$foo__15803 from __JVM_DefineClass__]
[Loaded user$eval15802 from __JVM_DefineClass__]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These lines will stop once the PermGen space fills up.&lt;/p&gt;

&lt;p&gt;In the jstat monitoring, you&apos;ll see the amount of used PermGen space (PU) increase to the max and stay there.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;-    PC       PU        OC          OU       YGC    FGC    FGCT     GCT
 31616.0  31552.7    365952.0         0.0      4     0    0.000    0.129
 32000.0  31914.0    365952.0         0.0      4     0    0.000    0.129
 32768.0  32635.5    365952.0         0.0      4     0    0.000    0.129
 32768.0  32767.6    365952.0      1872.0      5     1    0.000    0.177
 32768.0  32108.2    291008.0     23681.8      6     2    0.827    1.006
 32768.0  32470.4    291008.0     23681.8      6     2    0.827    1.006
 32768.0  32767.2    698880.0     24013.8      8     4    1.073    1.258
 32768.0  32767.2    698880.0     24013.8      8     4    1.073    1.258
 32768.0  32767.2    698880.0     24013.8      8     4    1.073    1.258&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A workaround is to run &lt;tt&gt;prefer-method&lt;/tt&gt; before the PermGen space is all used up, e.g.&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(prefer-method take* clojure.lang.Fn java.lang.&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, when the used PermGen space is close to the max, in the &lt;tt&gt;lein swank&lt;/tt&gt; session, you will see the classes created by the eval&apos;ing being unloaded.&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[Unloading class user$eval5950$foo__5951]
[Unloading class user$eval3814]
[Unloading class user$eval2902$foo__2903]
[Unloading class user$eval13414]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the jstat monitoring, there will be a long pause when used PermGen space stays close to the max, and then it will drop down, and start increasing again when more eval&apos;ing occurs.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;-    PC       PU        OC          OU       YGC    FGC    FGCT     GCT
 32768.0  32767.9    159680.0     24573.4      6     2    0.167    0.391
 32768.0  32767.9    159680.0     24573.4      6     2    0.167    0.391
 32768.0  17891.3    283776.0     17243.9      6     2   50.589   50.813
 32768.0  18254.2    283776.0     17243.9      6     2   50.589   50.813&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;tt&gt;defmulti&lt;/tt&gt; defines a cache that uses the dispatch values as keys. Each eval call in the loop defines a new foo class which is then added to the cache when &lt;tt&gt;take*&lt;/tt&gt; is called, preventing the class from ever being GCed.&lt;/p&gt;

&lt;p&gt;The prefer-method workaround works because it calls &lt;tt&gt;clojure.lang.MultiFn.preferMethod&lt;/tt&gt;, which calls the private &lt;tt&gt;MultiFn.resetCache&lt;/tt&gt; method, which completely empties the cache.&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;Protocolleak&quot;&gt;&lt;/a&gt;Protocol leak&lt;/h2&gt;

&lt;p&gt;The leak with protocol methods similarly involves a cache. You see essentially the same behavior as the multimethod leak if you run the following code using protocols.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;protocol leak&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defprotocol ITake (take* [a]))

(extend-type clojure.lang.Fn
  ITake
  (take* [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;] &apos;()))

(def stop (atom &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;))
(def sleep-duration (atom 1000))

(defn run-loop []
  (when-not @stop
    (eval &apos;(take* (fn foo [])))
    (&lt;span class=&quot;code-object&quot;&gt;Thread&lt;/span&gt;/sleep @sleep-duration)
    (recur)))

(&lt;span class=&quot;code-keyword&quot;&gt;future&lt;/span&gt; (run-loop))

(reset! sleep-duration 0)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Again, the cache is in the &lt;tt&gt;take*&lt;/tt&gt; method itself, using each new &lt;tt&gt;foo&lt;/tt&gt; class as a key.&lt;/p&gt;

&lt;p&gt;A workaround is to run &lt;tt&gt;-reset-methods&lt;/tt&gt; on the protocol before the PermGen space is all used up, e.g.&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(-reset-methods ITake)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This works because &lt;tt&gt;-reset-methods&lt;/tt&gt; replaces the cache with an empty MethodImplCache.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15981">CLJ-1152</key>
            <summary>PermGen leak in multimethods and protocol fns</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Wed, 30 Jan 2013 09:00:47 -0600</created>
                <updated>Wed, 30 Jan 2013 09:10:08 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30511" author="chouser@n01se.net" created="Wed, 30 Jan 2013 09:10:08 -0600"  >&lt;p&gt;I think the most obvious solution would be to constrain the size of the cache.  Adding an item to the cache is already not the fastest path, so a bit more work could be done to prevent the cache from growing indefinitely large. &lt;/p&gt;

&lt;p&gt;That does raise the question of what criteria to use.  Keep the first &lt;em&gt;n&lt;/em&gt; entries?  Keep the &lt;em&gt;n&lt;/em&gt; most recently used (which would require bookkeeping in the fast cache-hit path)? Keep the &lt;em&gt;n&lt;/em&gt; most recently added?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1151] Minor Code Cleanup in core.reducers: use required walk, drop this for coll</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1151</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;First, core.reducers requires clojure.walk :as walk, but does not use the alias.  &lt;br/&gt;
Second, the two arity implementation of coll-reduce in function reducer uses &apos;this&apos;, whereas similar implementations in that file use &apos;coll&apos;.  AFAICT it makes no difference to use &apos;coll&apos; (all tests pass, no change in performance) and it is more in line with the rest of the code.&lt;/p&gt;

&lt;p&gt;The two things seem small enough to be put into one cleanup case.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15972">CLJ-1151</key>
            <summary>Minor Code Cleanup in core.reducers: use required walk, drop this for coll</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ska2342">Stefan Kamphausen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Jan 2013 16:43:30 -0600</created>
                <updated>Mon, 21 Jan 2013 16:43:30 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11810" name="tiny-reducers-cleanup.diff" size="1172" author="ska2342" created="Mon, 21 Jan 2013 16:43:30 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1150] Make some PersistentVector, SubVector internals public</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1150</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This should help with RRBT-PV interop.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15968">CLJ-1150</key>
            <summary>Make some PersistentVector, SubVector internals public</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="michalmarczyk">Micha&#322; Marczyk</assignee>
                                <reporter username="michalmarczyk">Micha&#322; Marczyk</reporter>
                        <labels>
                    </labels>
                <created>Sat, 19 Jan 2013 21:54:13 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Mon, 4 Feb 2013 20:01:24 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11806" name="0001-Make-some-PersistentVector-s-and-APersistentVector.S.patch" size="2650" author="michalmarczyk" created="Sat, 19 Jan 2013 21:54:13 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1149] Unhelpful error message from :use (and use function) when arguments are malformed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1149</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;the following exception happens when you have something like this(bad):&lt;/p&gt;

&lt;p&gt;(ns runtime.util-test&lt;br/&gt;
  (:use &lt;span class=&quot;error&quot;&gt;&amp;#91;midje.sweet :reload-all&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;as opposed to any of these(correct):&lt;/p&gt;

&lt;p&gt;(ns runtime.util-test&lt;br/&gt;
  (:use midje.sweet :reload-all))&lt;/p&gt;

&lt;p&gt;(ns runtime.util-test&lt;br/&gt;
(:use &lt;span class=&quot;error&quot;&gt;&amp;#91;midje.sweet&amp;#93;&lt;/span&gt; :reload-all))&lt;/p&gt;

&lt;p&gt;and the exception is:&lt;br/&gt;
Exception in thread &quot;main&quot; java.lang.IllegalArgumentException: No value supplied for key: true&lt;br/&gt;
        at clojure.lang.PersistentHashMap.create(PersistentHashMap.java:77)&lt;br/&gt;
        at clojure.core$hash_map.doInvoke(core.clj:365)&lt;br/&gt;
        at clojure.lang.RestFn.applyTo(RestFn.java:137)&lt;br/&gt;
        at clojure.core$apply.invoke(core.clj:617)&lt;br/&gt;
        at clojure.core$load_lib.doInvoke(core.clj:5352)&lt;br/&gt;
        at clojure.lang.RestFn.applyTo(RestFn.java:142)&lt;br/&gt;
        at clojure.core$apply.invoke(core.clj:619)&lt;br/&gt;
        at clojure.core$load_libs.doInvoke(core.clj:5403)&lt;br/&gt;
        at clojure.lang.RestFn.applyTo(RestFn.java:137)&lt;br/&gt;
        at clojure.core$apply.invoke(core.clj:621)&lt;br/&gt;
        at clojure.core$use.doInvoke(core.clj:5497)&lt;/p&gt;

&lt;p&gt;Note that this is similar to the equally unhelpful message shown in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1140&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-1140&lt;/a&gt; although that is a different root cause.&lt;/p&gt;

&lt;p&gt;Probably best to enhance the `use` function to validate its arguments before trying to apply hash-map?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15967">CLJ-1149</key>
            <summary>Unhelpful error message from :use (and use function) when arguments are malformed</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="seancorfield">Sean Corfield</reporter>
                        <labels>
                    </labels>
                <created>Thu, 17 Jan 2013 18:37:27 -0600</created>
                <updated>Thu, 17 Jan 2013 18:37:27 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1148] adds docstring support to defonce, and stops it from stomping existing metadata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1148</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Two issues here:&lt;/p&gt;

&lt;p&gt;1) defonce doesn&apos;t support docstrings, although def does, so it would be nice to bring the two in line with each other&lt;/p&gt;

&lt;p&gt;2) defonce can stomp metadata, like this:&lt;/p&gt;

&lt;p&gt;(defonce ^:private foo 5)&lt;br/&gt;
#&apos;user/foo&lt;br/&gt;
(meta #&apos;foo) --&amp;gt; the private is there&lt;br/&gt;
(defone foo 10)&lt;br/&gt;
foo is still 5&lt;br/&gt;
(meta #&apos;foo) --&amp;gt; the private has been lost&lt;/p&gt;</description>
                <environment></environment>
            <key id="15966">CLJ-1148</key>
            <summary>adds docstring support to defonce, and stops it from stomping existing metadata</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="joegallo">Joe Gallo</reporter>
                        <labels>
                    </labels>
                <created>Thu, 17 Jan 2013 17:16:40 -0600</created>
                <updated>Thu, 17 Jan 2013 17:16:40 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11805" name="0001-new-defonce-hotness.patch" size="1226" author="joegallo" created="Thu, 17 Jan 2013 17:16:40 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1147] Threading macro (-&gt;) does not permit inline function declarations</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1147</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(-&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;args&amp;#93;&lt;/span&gt; apply + args))&lt;/p&gt;

&lt;p&gt;CompilerException java.lang.Exception: Unsupported binding form: 1, compiling:(NO_SOURCE_PATH:1:13)&lt;/p&gt;

&lt;p&gt;The expression is expanded to:&lt;/p&gt;

&lt;p&gt;(fn &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;args&amp;#93;&lt;/span&gt; apply + args)&lt;/p&gt;

&lt;p&gt;If this is intended behaviour then at the least the compiler error message is confusing. It would be preferable if the -&amp;gt; macro checked for (fn..) before treating a form as a sequence and injecting the argument.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15962">CLJ-1147</key>
            <summary>Threading macro (-&gt;) does not permit inline function declarations</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="sfnelson">Stephen Nelson</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Jan 2013 21:17:51 -0600</created>
                <updated>Sun, 19 May 2013 22:29:46 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30437" author="jafingerhut" created="Tue, 15 Jan 2013 00:56:46 -0600"  >&lt;p&gt;Note that this works as you might have hoped:&lt;/p&gt;

&lt;p&gt;(-&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; ((fn &lt;span class=&quot;error&quot;&gt;&amp;#91;args&amp;#93;&lt;/span&gt; (apply + args))))&lt;/p&gt;

&lt;p&gt;because it expands into:&lt;/p&gt;

&lt;p&gt;((fn &lt;span class=&quot;error&quot;&gt;&amp;#91;args&amp;#93;&lt;/span&gt; (apply + args)) &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;Your suggestion that -&amp;gt; check for (fn ...) before treating it as a sequence and injecting the argument leaves open the question: Why only (fn ...) should be treated specially?  Why not (let ...), (for ...), (doseq ...), etc?  And if you go that far, how do you decide what should be allowed and what not?&lt;/p&gt;</comment>
                    <comment id="31102" author="cldwalker" created="Fri, 17 May 2013 14:56:30 -0500"  >&lt;p&gt;I agree with Andy, that it&apos;s not realistic suggestion to check for fn,let,etc. Perhaps a doc fix would help here but I&apos;m not sure if we just want to call out (fn ...). I&apos;d recommend closing this unless Stephen speaks up.&lt;/p&gt;</comment>
                    <comment id="31117" author="sfnelson" created="Sun, 19 May 2013 22:29:46 -0500"  >&lt;p&gt;I&apos;m happy with Andy&apos;s synopsis of the problem, and it&apos;s reasonable not to change the behaviour of the threading macro specifically for (fn..).&lt;/p&gt;

&lt;p&gt;However, this is a mistake that I&apos;m sure many others make/have made and it&apos;s hard to diagnose what is going wrong without dumping interpreted form &amp;#8211; hardly a reasonable expectation for a novice user.&lt;/p&gt;

&lt;p&gt;Before closing this issue, I&apos;d like to see improved failure reporting, such as causing the threading macro to throw a compile error or warning if passed a raw (unwrapped) function declaration (are there legitimate use cases this would affect?).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1146] Symbol name starting with digits to defn throws &quot;Unmatched delimiter )&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1146</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When trying to use an invalid symbol name when defining a function, the error message thrown is a confusing and wrong one. The error message is &quot;RuntimeException Unmatched delimiter: )  clojure.lang.Util.runtimeException (Util.java:219)&quot;, which unfortunately is the only message seen in nrepled emacs.&lt;/p&gt;

&lt;p&gt;$ java -jar clojure-1.5.0-RC2.jar&lt;br/&gt;
Clojure 1.5.0-RC2&lt;br/&gt;
user=&amp;gt; (defn 45fn [] nil)&lt;br/&gt;
NumberFormatException Invalid number: 45fn  clojure.lang.LispReader.readNumber (LispReader.java:255)&lt;br/&gt;
[]&lt;br/&gt;
nil&lt;br/&gt;
RuntimeException Unmatched delimiter: )  clojure.lang.Util.runtimeException (Util.java:219)&lt;/p&gt;

&lt;p&gt;Expected:&lt;br/&gt;
When trying to (defn or (def a thing with a non valid symbol name, the last thrown error message should be one stating that the given symbol name is not a valid one.&lt;/p&gt;</description>
                <environment>$java -jar clojure-1.5.0-RC2.jar&lt;br/&gt;
&lt;br/&gt;
$java -version&lt;br/&gt;
java version &amp;quot;1.6.0_37&amp;quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-10M3909)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)&lt;br/&gt;
Mac OS X:&lt;br/&gt;
System Version: Mac OS X 10.6.8 (10K549)&lt;br/&gt;
Kernel Version: Darwin 10.8.0&lt;br/&gt;
</environment>
            <key id="15961">CLJ-1146</key>
            <summary>Symbol name starting with digits to defn throws &quot;Unmatched delimiter )&quot;</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="claj">Linus Ericsson</reporter>
                        <labels>
                        <label>reader</label>
                    </labels>
                <created>Sun, 13 Jan 2013 15:41:03 -0600</created>
                <updated>Sun, 13 Jan 2013 15:41:03 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1145] thread-last can&apos;t accept 0 or 1 forms, thread-first can&apos;t accept 0 forms</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1145</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;At times, as the artifact of repl experimentation or a refactoring in progress, one wants to eval a threaded form with 1 or (less likely) 0 arguments.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;(-&amp;gt; 42) ; fine&lt;/tt&gt;&lt;br/&gt;
&lt;tt&gt;(-&lt;del&gt;&amp;gt;&amp;gt; 42) ; throws &quot;ArityException Wrong number of args (1) passed to: core$&lt;/del&gt;-GT&quot;.&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;(-&amp;gt;) ; throws &quot;ArityException Wrong number of args (0) passed to: core$&quot; (sic)&lt;/tt&gt;&lt;br/&gt;
&lt;tt&gt;(-&lt;del&gt;&amp;gt;&amp;gt;) ; throws &quot;ArityException Wrong number of args (0) passed to: core$&lt;/del&gt;-GT&quot;.&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;Apologies for the text rendering (how to cite code?).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15959">CLJ-1145</key>
            <summary>thread-last can&apos;t accept 0 or 1 forms, thread-first can&apos;t accept 0 forms</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="vemv">V&#237;ctor M. Valenzuela</reporter>
                        <labels>
                    </labels>
                <created>Sat, 12 Jan 2013 14:06:42 -0600</created>
                <updated>Sun, 13 Jan 2013 09:40:39 -0600</updated>
                    <resolved>Sun, 13 Jan 2013 09:40:39 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30425" author="jafingerhut" created="Sat, 12 Jan 2013 15:29:31 -0600"  >&lt;p&gt;Is this a duplicate with &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1086&quot; title=&quot;Support arity-1 for -&amp;gt;&amp;gt;&quot;&gt;CLJ-1086&lt;/a&gt;, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1121&quot; title=&quot;-&amp;gt; and -&amp;gt;&amp;gt; have unexpected behavior when combined with unusual macros&quot;&gt;CLJ-1121&lt;/a&gt;, or the combination of those two?&lt;/p&gt;

&lt;p&gt;If arity 0 is a new aspect of this ticket, what would you expect the arity 0 versions to be transformed into?  nil?&lt;/p&gt;</comment>
                    <comment id="30426" author="vemv" created="Sat, 12 Jan 2013 18:46:37 -0600"  >&lt;p&gt;Surely a duplicate - but Jira&apos;s search couldn&apos;t find those! (used &quot;-&amp;gt;&quot;, &quot;thread-last&quot; etc as search queries).&lt;/p&gt;

&lt;p&gt;While fairly unlikely to use / noisy to implement, the thing about feeding 0-arities to the threading macros is that they throw in exchange an unrelated exception rather than e.g. &quot;ArityException Wrong number of args (0) passed to: core$-&amp;gt;&quot;.&lt;/p&gt;

&lt;p&gt;Don&apos;t know if this is simply how macros (can) work, but it called my attention.&lt;/p&gt;

&lt;p&gt;Feel free to close my issue.&lt;/p&gt;</comment>
                    <comment id="30428" author="jafingerhut" created="Sun, 13 Jan 2013 09:25:23 -0600"  >&lt;p&gt;I will go ahead and close this case as a duplicate.  FYI, below is the behavior if the &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1121&quot; title=&quot;-&amp;gt; and -&amp;gt;&amp;gt; have unexpected behavior when combined with unusual macros&quot;&gt;CLJ-1121&lt;/a&gt; patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1121&quot; title=&quot;-&amp;gt; and -&amp;gt;&amp;gt; have unexpected behavior when combined with unusual macros&quot;&gt;CLJ-1121&lt;/a&gt;-v002.patch and the &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1083&quot; title=&quot;Incorrect ArityException message for function names containing -&amp;gt;&quot;&gt;CLJ-1083&lt;/a&gt; patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1083&quot; title=&quot;Incorrect ArityException message for function names containing -&amp;gt;&quot;&gt;CLJ-1083&lt;/a&gt;-attachments/better-throw-arity-messages.diff are both applied (the second one improves the error message in the 0-arity case):&lt;/p&gt;

&lt;p&gt;Clojure 1.5.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (-&amp;gt;)&lt;br/&gt;
ArityException Wrong number of args (0) passed to: core/-&amp;gt;  clojure.lang.Compiler.macroexpand1 (Compiler.java:6472)&lt;br/&gt;
user=&amp;gt; (-&amp;gt; 5)&lt;br/&gt;
5&lt;br/&gt;
user=&amp;gt; (-&amp;gt;&amp;gt;)&lt;br/&gt;
ArityException Wrong number of args (0) passed to: core/-&amp;gt;&amp;gt;  clojure.lang.Compiler.macroexpand1 (Compiler.java:6472)&lt;br/&gt;
user=&amp;gt; (-&amp;gt;&amp;gt; 5)&lt;br/&gt;
5&lt;/p&gt;</comment>
                    <comment id="30429" author="jafingerhut" created="Sun, 13 Jan 2013 09:40:39 -0600"  >&lt;p&gt;The issue of a poor error message with 0-arity threading macros is improved by the patch attached to ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1083&quot; title=&quot;Incorrect ArityException message for function names containing -&amp;gt;&quot;&gt;CLJ-1083&lt;/a&gt;, and adding handling of the 1-arity case is improved by the patch attached to ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1121&quot; title=&quot;-&amp;gt; and -&amp;gt;&amp;gt; have unexpected behavior when combined with unusual macros&quot;&gt;CLJ-1121&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1143] Minor correction to doc string of ns macro</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1143</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc string of ns says &quot;If :refer-clojure is not used, a default (refer &apos;clojure) is used.&quot;  &apos;clojure should be replaced with &apos;clojure.core&lt;/p&gt;

&lt;p&gt;Clojure group thread: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/rDjZodxOMh8&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/rDjZodxOMh8&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15954">CLJ-1143</key>
            <summary>Minor correction to doc string of ns macro</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Thu, 10 Jan 2013 13:32:17 -0600</created>
                <updated>Fri, 10 May 2013 12:30:41 -0500</updated>
                                    <version>Release 1.6</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30416" author="jafingerhut" created="Thu, 10 Jan 2013 13:34:23 -0600"  >&lt;p&gt;clj-1143-ns-doc-string-correction-v1.txt dated Jan 10 2013 replaces (refer &apos;clojure) with (refer &apos;clojure.core) in the doc string of the ns macro.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11800" name="clj-1143-ns-doc-string-correction-v1.txt" size="918" author="jafingerhut" created="Thu, 10 Jan 2013 13:34:23 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10004">Screened</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1142] Incorrect divide-by-zero error with floating point numbers</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1142</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The unary call for clojure.core// treats a dividend of 0.0 differently than the binary call, likely due to inlining.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(/ 0.0) ;; java.lang.ArithmeticException: Divide by zero
(/ 1 0.0) ;;= Infinity
(/ 1 (identity 0.0)) ;; java.lang.ArithmeticException: Divide by zero&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15953">CLJ-1142</key>
            <summary>Incorrect divide-by-zero error with floating point numbers</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Tue, 8 Jan 2013 16:00:00 -0600</created>
                <updated>Tue, 8 Jan 2013 23:22:50 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30413" author="timmc" created="Tue, 8 Jan 2013 23:22:50 -0600"  >&lt;p&gt;The relevant code seems to be this in clojure.lang.Numbers/divide:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;(yops.isZero((&lt;span class=&quot;code-object&quot;&gt;Number&lt;/span&gt;)y))
  &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; ArithmeticException(&lt;span class=&quot;code-quote&quot;&gt;&quot;Divide by zero&quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Making Numbers/divide be more restrictive than double arithmetic seems like a bug; explicitly throwing an ArithmeticException instead of letting the JVM figure it just seems like more work than necessary.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1141] Allow pre and post-conditions in defprotocol and deftype macros</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1141</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The fn special form and the defn macro allow pre- and post-conditions. It would be nice if one could use that conditions also in method declarations of the defprotocol and deftype macro.&lt;/p&gt;

&lt;p&gt;Currently I use the extend function as workaround where one can specify the methods using a map of keyword-name and fn special form.&lt;/p&gt;</description>
                <environment>Dos not matter.</environment>
            <key id="15937">CLJ-1141</key>
            <summary>Allow pre and post-conditions in defprotocol and deftype macros</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="akiel">Alexander Kiel</reporter>
                        <labels>
                    </labels>
                <created>Wed, 2 Jan 2013 05:08:13 -0600</created>
                <updated>Mon, 7 Jan 2013 17:28:42 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30381" author="michael-drogalis" created="Sun, 6 Jan 2013 18:22:35 -0600"  >&lt;p&gt;Using &lt;tt&gt;:pre&lt;/tt&gt; and &lt;tt&gt;:post&lt;/tt&gt;, IMO, isn&apos;t a good idea. Handling assertions is a two part game. The mechanism needs to account for both detection and reaction, and the latter is missing.&lt;/p&gt;

&lt;p&gt;This isn&apos;t a perfect work-around, as it&apos;s a little verbose, but using &lt;a href=&quot;https://github.com/MichaelDrogalis/dire&quot;&gt;Dire&lt;/a&gt; might work better than using extend. In addition, you get the &quot;reaction&quot; functionality that&apos;s missing from &lt;tt&gt;:pre&lt;/tt&gt; and &lt;tt&gt;:post&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;Example for protocol preconditions: &lt;a href=&quot;https://gist.github.com/4471276&quot;&gt;https://gist.github.com/4471276&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30396" author="akiel" created="Mon, 7 Jan 2013 11:52:08 -0600"  >&lt;p&gt;@Michael I read your &lt;a href=&quot;https://gist.github.com/4471276&quot;&gt;gist&lt;/a&gt; and the README of &lt;a href=&quot;https://github.com/MichaelDrogalis/dire&quot;&gt;Dire&lt;/a&gt;. I think the supervision concept of Erlang has it&apos;s places but I don&apos;t like it for pre- and post-conditions. For me, such conditions have two proposes: &lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;they should document the code and&lt;/li&gt;
	&lt;li&gt;they should fail fast to detect failures early.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;To support my first point, your pre- and post-conditions are just lexical too far away from the actual function definition. For the second point: I think in the case of violations the program should just crash. One could maybe wrap some part of the program with one of your exception supervisors handling an AssertionError. But I don&apos;t think that handling pre- and post-condition violations for individual functions is a good thing.&lt;/p&gt;</comment>
                    <comment id="30402" author="michael-drogalis" created="Mon, 7 Jan 2013 17:28:42 -0600"  >&lt;p&gt;@Alexander Indeed, your points are correct. Dire is meant to be exactly what you described. Lexically removed from application logic, and opportunity to recover from crashing. That was my best shot at aiding your needs quickly, anyway. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1140] {:as x} destructuring with an empty list raises exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1140</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (clojure-version)
&quot;1.4.0&quot;
user=&amp;gt; (let [{:as x} &apos;()] x)
{}

...

user=&amp;gt; (clojure-version)
&quot;1.5.0-RC1&quot;
user=&amp;gt; (let [{:as x} &apos;()] x)
IllegalArgumentException No value supplied for key: null  clojure.lang.PersistentHashMap.create (PersistentHashMap.java:77)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The bug was introduced by a change&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; to support duplicate keys in map&lt;br/&gt;
destructuring. Using PersistentHashMap/create here introduces the above&lt;br/&gt;
bug, since it does not properly handle empty lists.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;: &lt;a href=&quot;https://github.com/clojure/clojure/commit/93c795fe10ee5c92a36b6ec6373b3c80a31135c4&quot;&gt;https://github.com/clojure/clojure/commit/93c795fe10ee5c92a36b6ec6373b3c80a31135c4&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15932">CLJ-1140</key>
            <summary>{:as x} destructuring with an empty list raises exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tcrawley">Toby Crawley</reporter>
                        <labels>
                    </labels>
                <created>Sun, 30 Dec 2012 13:35:52 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 1 Feb 2013 13:12:17 -0600</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30357" author="tcrawley" created="Wed, 2 Jan 2013 11:02:40 -0600"  >&lt;p&gt;There&apos;s been some discussion on clojure-dev around this issue: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/qdDRNfEVfQ8/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/qdDRNfEVfQ8/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30522" author="tcrawley" created="Fri, 1 Feb 2013 10:05:07 -0600"  >&lt;p&gt;An issue I brought up in the email thread is consistency: vector binding works with anything nthable, map binding works with anything associative. With my current patch (empty-list-destructuring-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1140&quot; title=&quot;{:as x} destructuring with an empty list raises exception&quot;&gt;&lt;del&gt;CLJ-1140&lt;/del&gt;&lt;/a&gt;-12.30.12.diff), only ISeqs are supported for kwarg map binding. &lt;/p&gt;

&lt;p&gt;I&apos;d prefer it work with anything seqable, and can provide a patch that does that. I would go ahead and do so, but now that this ticket is now Approval: OK, I didn&apos;t want to alter what had been OK&apos;ed. Let me know if you want a patch that adds support for anything seqable.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11782" name="empty-list-destructuring-CLJ-1140-12.30.12.diff" size="1645" author="tcrawley" created="Sun, 30 Dec 2012 13:40:54 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1139] Compiler exception while compiling swank/commands/basic.clj</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1139</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Current Behavior:&lt;/p&gt;

&lt;p&gt;When attempting to start a swank server, the clojure compiler throws a CompilerException, and the process terminates.&lt;/p&gt;

&lt;p&gt;Expected Behavior:&lt;/p&gt;

&lt;p&gt;A swank server is successfully started.&lt;/p&gt;

&lt;p&gt;Steps to reproduce (terminal session attached):&lt;/p&gt;

&lt;p&gt;1. lein new tmp&lt;br/&gt;
2. Edit the project.clj to require clojure version 1.5.0-RC1&lt;br/&gt;
4. cd tmp&lt;br/&gt;
3. lein swank&lt;/p&gt;
</description>
                <environment>* Clojure: 1.5.0-RC1&lt;br/&gt;
* Java: Java 1.7.0_05 Java HotSpot(TM) 64-Bit Server VM&lt;br/&gt;
* Leiningen: 2.0.0-preview10 &lt;br/&gt;
* lein-swank: 1.4.4&lt;br/&gt;
* lein-ritz: 0.6.0&lt;br/&gt;
&lt;br/&gt;
</environment>
            <key id="15918">CLJ-1139</key>
            <summary>Compiler exception while compiling swank/commands/basic.clj</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="briprowe">Brian Rowe</reporter>
                        <labels>
                    </labels>
                <created>Sun, 23 Dec 2012 04:57:27 -0600</created>
                <updated>Sat, 9 Feb 2013 02:20:30 -0600</updated>
                    <resolved>Sat, 9 Feb 2013 02:20:30 -0600</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30308" author="briprowe" created="Sun, 23 Dec 2012 04:58:58 -0600"  >&lt;p&gt;I suppose I should add that I&apos;m using Mac OS X 10.8.2&lt;/p&gt;</comment>
                    <comment id="30314" author="jafingerhut" created="Mon, 24 Dec 2012 09:27:02 -0600"  >&lt;p&gt;Have you noticed that swank-clojure &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; is deprecated, i.e. no longer under active development, and the developer recommends that you use nrepl.el &lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; instead?&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; &lt;a href=&quot;https://github.com/technomancy/swank-clojure&quot;&gt;https://github.com/technomancy/swank-clojure&lt;/a&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; &lt;a href=&quot;https://github.com/kingtim/nrepl.el&quot;&gt;https://github.com/kingtim/nrepl.el&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30324" author="jafingerhut" created="Wed, 26 Dec 2012 08:55:12 -0600"  >&lt;p&gt;It also appears that someone has created an update to lein-swank (to version 1.4.5) that works with Clojure 1.5.0-RC1:&lt;/p&gt;

&lt;p&gt;    &lt;a href=&quot;https://groups.google.com/forum/#!topic/clojure/CAiajyDWJJg&quot;&gt;https://groups.google.com/forum/#!topic/clojure/CAiajyDWJJg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(in particular Toby Crawley&apos;s post on Dec 26 2012)&lt;/p&gt;</comment>
                    <comment id="30571" author="briprowe" created="Fri, 8 Feb 2013 20:03:40 -0600"  >&lt;p&gt;Yes, this can be closed.&lt;/p&gt;</comment>
                    <comment id="30572" author="jafingerhut" created="Sat, 9 Feb 2013 02:20:30 -0600"  >&lt;p&gt;Submitter agrees this issue was resolved by changes in other software outside of Clojure.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11777" name="tmp.txt" size="8491" author="briprowe" created="Sun, 23 Dec 2012 04:57:27 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1138] data-reader returning nil causes exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1138</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If a data-reader returns nil, the reader throws java.lang.RuntimeException: No dispatch macro...  The error message implies that there is no dispatch macro for whatever the first character of the tag happens to be.&lt;/p&gt;

&lt;p&gt;Here&apos;s a simple example:&lt;/p&gt;

&lt;p&gt;    (binding &lt;span class=&quot;error&quot;&gt;&amp;#91;*data-readers* {&apos;f/ignore (constantly nil)}&amp;#93;&lt;/span&gt; (read-string &quot;#f/ignore 42 10&quot;))&lt;/p&gt;

&lt;p&gt;RuntimeException No dispatch macro for: f  clojure.lang.Util.runtimeException (Util.java:219)&lt;/p&gt;</description>
                <environment>clojure 1.5 beta2, Mac OS X 10.8.2, java version &amp;quot;1.6.0_37&amp;quot;</environment>
            <key id="15916">CLJ-1138</key>
            <summary>data-reader returning nil causes exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>reader</label>
                    </labels>
                <created>Sat, 22 Dec 2012 08:41:18 -0600</created>
                <updated>Thu, 14 Feb 2013 15:06:47 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30289" author="steveminer@gmail.com" created="Sat, 22 Dec 2012 09:43:27 -0600"  >&lt;p&gt;clj-1138-allow-data-reader-to-return-nil-instead-of-throwing.patch allows a data-reader to return nil instead of throwing.  Does sanity check that possible tag or record isJavaIdentifierStart().  Gives better error message for special characters that might actually be dispatch macros (rather than assuming it&apos;s a tagged literal).&lt;/p&gt;</comment>
                    <comment id="30291" author="steveminer@gmail.com" created="Sat, 22 Dec 2012 10:06:06 -0600"  >&lt;p&gt;clj-1138-data-reader-return-nil-for-no-op.patch allows a data-reader returning nil to be treated as a no-op by the reader (like #_).  nil is not normally a useful value (actually it causes an exception in Clojure 1.4 through 1.5 beta2) for a data-reader to return.  With this patch, one could get something like a conditional feature reader using data-readers.&lt;/p&gt;</comment>
                    <comment id="30292" author="steveminer@gmail.com" created="Sat, 22 Dec 2012 10:26:43 -0600"  >&lt;p&gt;clj-1138-allow-data-reader-to-return-nil-instead-of-throwing.patch is the first patch to consider.  It merely allows nil as a value from a data-reader and returns nil as the final value.  I think it does what was originally intended for dispatch macros, and gives a better error message in many cases (mostly typos).&lt;/p&gt;

&lt;p&gt;The second patch, clj-1138-data-reader-return-nil-for-no-op.patch, depends on the other being applied first.  It takes an extra step to treat a nil value returned from a data-reader as a no-op for the reader (like #_).&lt;/p&gt;</comment>
                    <comment id="30310" author="steveminer@gmail.com" created="Sun, 23 Dec 2012 11:52:28 -0600"  >&lt;p&gt;It turns out that you can work around the original problem by having your data-reader return &apos;(quote nil) instead of plain nil.  That expression conveniently evaluates to nil so you can get a nil if necessary.  This also works after applying the patches so there&apos;s still a way to return nil if you really want it.&lt;/p&gt;

&lt;p&gt;    (binding &lt;span class=&quot;error&quot;&gt;&amp;#91;*data-readers* {&apos;x/nil (constantly &apos;(quote nil))}&amp;#93;&lt;/span&gt; (read-string &quot;#x/nil 42&quot;))&lt;br/&gt;
    ;=&amp;gt; (quote nil)&lt;/p&gt;</comment>
                    <comment id="30565" author="jafingerhut" created="Thu, 7 Feb 2013 09:20:27 -0600"  >&lt;p&gt;Patch clj-1138-allow-data-reader-to-return-nil-instead-of-throwing.patch dated Dec 22 2012 still applies cleanly to latest master if you use the following command:&lt;/p&gt;

&lt;p&gt;% git am --keep-cr -s --ignore-whitespace &amp;lt; clj-1138-allow-data-reader-to-return-nil-instead-of-throwing.patch&lt;/p&gt;

&lt;p&gt;Without the --ignore-whitespace option, the patch fails only because some whitespace was changed in Clojure master recently.&lt;/p&gt;</comment>
                    <comment id="30584" author="jafingerhut" created="Wed, 13 Feb 2013 11:24:11 -0600"  >&lt;p&gt;OK, now with latest master (1.5.0-RC15 at this time), patch clj-1138-allow-data-reader-to-return-nil-instead-of-throwing.patch no longer applies cleanly, not even using --ignore-whitespace in the &apos;git am&apos; command given above.  Steve, if you could see what needs to be updated, that would be great.  Using the patch command as suggested in the &quot;Updating stale patches&quot; section of &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt; wasn&apos;t enough, so it should probably be carefully examined by hand to see what needs updating.&lt;/p&gt;</comment>
                    <comment id="30599" author="steveminer@gmail.com" created="Thu, 14 Feb 2013 12:21:27 -0600"  >&lt;p&gt;I removed my patches.  Things have changes recently with the LispReader and new EdnReader.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1137] Metadata on a def gets evaluated twice</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1137</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Metadata on the symbol of a def special form is evaluated twice.&lt;/p&gt;

&lt;p&gt;(def ^{:foo (println &quot;HA&quot;)} a [])&lt;/p&gt;

&lt;p&gt;prints out HA HA.  Offending line is in Compiler$DefExpr, fixed.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15915">CLJ-1137</key>
            <summary>Metadata on a def gets evaluated twice</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gshayban">Ghadi Shayban</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Dec 2012 11:32:28 -0600</created>
                <updated>Fri, 21 Dec 2012 11:32:28 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11772" name="CLJ-1137-eval-metadata-once.diff" size="889" author="gshayban" created="Fri, 21 Dec 2012 11:32:28 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1136] Type hinting for array classes does not work in binding forms</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1136</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Type hints don&apos;t work as expected in binding forms. &lt;/p&gt;

&lt;p&gt;The following form results in a reflection warning:&lt;/p&gt;

&lt;p&gt;    (let [^{:tag (Class/forName &quot;&lt;span class=&quot;error&quot;&gt;&amp;#91;Ljava.lang.Object;&amp;quot;)} a (make-array Object 2)&amp;#93;&lt;/span&gt;&lt;br/&gt;
      (aget a 0))&lt;/p&gt;

&lt;p&gt;However, hinting does appear to work correctly on vars:&lt;/p&gt;

&lt;p&gt;    (def ^{:tag (Class/forName &quot;[Ljava.lang.Object;&quot;)} a (make-array Object 2))&lt;br/&gt;
    (aget a 0) ;; no reflection warning&lt;/p&gt;</description>
                <environment>replicated on OpenJDK 7u9 on Ubuntu 12.04, and Hotspot 1.6.0_37 on OSX Lion</environment>
            <key id="15911">CLJ-1136</key>
            <summary>Type hinting for array classes does not work in binding forms</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="lvanderhart">Luke VanderHart</reporter>
                        <labels>
                        <label>Compiler</label>
                        <label>bug</label>
                    </labels>
                <created>Thu, 20 Dec 2012 14:59:58 -0600</created>
                <updated>Fri, 21 Dec 2012 11:09:56 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30272" author="gshayban" created="Thu, 20 Dec 2012 22:51:22 -0600"  >&lt;p&gt;It&apos;s a little more insidious than type hinting: the compiler doesn&apos;t evaluate metadata in the binding vec.&lt;/p&gt;

&lt;p&gt;This doesn&apos;t throw the necessary exception...&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;^{:foo (Class/forName &amp;quot;not real&amp;quot;)} bar 42&amp;#93;&lt;/span&gt;&lt;br/&gt;
  bar)&lt;/p&gt;

&lt;p&gt;neither this...&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;^{gyorgy ligeti} a 42&amp;#93;&lt;/span&gt;&lt;br/&gt;
  a)&lt;/p&gt;

&lt;p&gt;Gyorgy Ligeti never resolves.&lt;/p&gt;

&lt;p&gt;These two equivalent examples don&apos;t reflect: &lt;br/&gt;
(let &lt;span class=&quot;error&quot;&gt;&amp;#91;^objects a (make-array Object 2)&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (aget a 0))&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;a ^objects (make-array Object 2)&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (aget a 0))&lt;/p&gt;
</comment>
                    <comment id="30275" author="gshayban" created="Fri, 21 Dec 2012 11:09:56 -0600"  >&lt;p&gt;On only the left-hand side of a local binding, metadata on a symbol is not analyzed or evaluated.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1135] Add previous changelog items back to changes.md</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1135</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="15909">CLJ-1135</key>
            <summary>Add previous changelog items back to changes.md</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                    </labels>
                <created>Wed, 19 Dec 2012 13:24:08 -0600</created>
                <updated>Sat, 2 Feb 2013 16:32:09 -0600</updated>
                    <resolved>Sat, 2 Feb 2013 16:32:09 -0600</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11768" name="add-changelog-items.patch" size="29895" author="cosmin" created="Wed, 19 Dec 2012 13:24:08 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1134] star-directive in clojure.pprint/cl-format with an at-prefix (&quot;~n@*&quot;) do not obey its specifications</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1134</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The star-directive in &lt;tt&gt;clojure.pprint/cl-format&lt;/tt&gt; with an at-prefix (&lt;tt&gt;&amp;#126;n@&amp;#42;&lt;/tt&gt;) does not obey its specifications according to &lt;a href=&quot;http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000&quot;&gt;Common Lisp the Language, 2nd Edition&lt;/a&gt;. There are two bugs within &lt;tt&gt;&amp;#126;n@&amp;#42;&lt;/tt&gt; as of right now:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;When &lt;tt&gt;&amp;#126;n@&amp;#42;&lt;/tt&gt; is supposed to jump forward over more than one argument, it jumps one step backward as if it had seen &lt;tt&gt;&amp;#126;:&amp;#42;&lt;/tt&gt;. For instance, &lt;tt&gt;(cl-format nil &quot;~D ~3@*~D&quot; 0 1 2 3)&lt;/tt&gt; will return &lt;tt&gt;&quot;0 0&quot;&lt;/tt&gt; and not &lt;tt&gt;&quot;0 3&quot;&lt;/tt&gt; as expected.&lt;/li&gt;
	&lt;li&gt;When &lt;tt&gt;&amp;#126;@&amp;#42;&lt;/tt&gt; is seen, the formatter is supposed to jump to the first argument (as &lt;tt&gt;n&lt;/tt&gt; defaults to &lt;tt&gt;0&lt;/tt&gt;, see specification linked above). However, whenever a &lt;tt&gt;&amp;#126;@&amp;#42;&lt;/tt&gt;-directive is seen, the formatter jumps to the second argument instead.&lt;/li&gt;
&lt;/ol&gt;


&lt;h4&gt;&lt;a name=&quot;What%28smallsetof%29stepswillreproducetheproblem%3F&quot;&gt;&lt;/a&gt;What (small set of) steps will reproduce the problem?&lt;/h4&gt;

&lt;p&gt;Inside a clean Clojure repl, perform these steps:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (require &apos;[clojure.pprint :refer [cl-format]])
nil
user=&amp;gt; (cl-format nil &quot;~D ~3@*~D&quot; 0 1 2 3)
&quot;0 0&quot;                                           ;; Expected: &quot;0 3&quot;
user=&amp;gt; (cl-format nil &quot;~D~D~D~D ~@*~D&quot; 0 1 2 3)
&quot;0123 1&quot;                                        ;; Expected: &quot;0123 0&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;Whatistheexpectedoutput%3FWhatdoyouseeinstead%3F&quot;&gt;&lt;/a&gt;What is the expected output? What do you see instead?&lt;/h4&gt;

&lt;p&gt;The expected output is &lt;tt&gt;&quot;0 3&quot;&lt;/tt&gt; and &lt;tt&gt;&quot;0123 0&quot;&lt;/tt&gt;, but is &lt;tt&gt;&quot;0 0&quot;&lt;/tt&gt; and &lt;tt&gt;&quot;0123 1&quot;&lt;/tt&gt; as shown above.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Whatversionareyouusing%3F&quot;&gt;&lt;/a&gt;What version are you using?&lt;/h4&gt;

&lt;p&gt;Tested on both &lt;tt&gt;1.4.0&lt;/tt&gt; and &lt;tt&gt;1.5.0-beta2&lt;/tt&gt;, both have the defect described.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Pleaseprovideanyadditionalinformationbelow.&quot;&gt;&lt;/a&gt;Please provide any additional information below.&lt;/h4&gt;

&lt;p&gt;The format strings which reproduces the problem has been compared with the &lt;tt&gt;format&lt;/tt&gt; function from the Common Lisp implementations SBCL, CLisp and Clozure. All of them print the expected output.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15907">CLJ-1134</key>
            <summary>star-directive in clojure.pprint/cl-format with an at-prefix (&quot;~n@*&quot;) do not obey its specifications</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hypirion">Jean Niklas L&apos;orange</reporter>
                        <labels>
                        <label>bug</label>
                        <label>pprint</label>
                    </labels>
                <created>Tue, 18 Dec 2012 20:34:25 -0600</created>
                <updated>Wed, 26 Dec 2012 19:57:30 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30261" author="hypirion" created="Tue, 18 Dec 2012 21:28:03 -0600"  >&lt;p&gt;Patch attached.&lt;/p&gt;

&lt;p&gt;It may be easier to read the changes the patch does from within JIRA instead from the commit message, so I&apos;ve added it here:&lt;/p&gt;

&lt;p&gt;This solves two issues as specified by #&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1134&quot; title=&quot;star-directive in clojure.pprint/cl-format with an at-prefix (&amp;quot;~n@*&amp;quot;) do not obey its specifications&quot;&gt;CLJ-1134&lt;/a&gt;. Issue #1 is solved by doing a&lt;br/&gt;
relative jump forward within &lt;tt&gt;absolute-reposition&lt;/tt&gt; in &lt;tt&gt;cl_format.clj&lt;/tt&gt;, line 114 by&lt;br/&gt;
switching &lt;tt&gt;(- (:pos navigator) position)&lt;/tt&gt; with &lt;tt&gt;(- position (:pos navigator))&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;Issue #2 is handled by changing the default &lt;tt&gt;n&lt;/tt&gt;-parameter to &lt;tt&gt;*&lt;/tt&gt; depending on&lt;br/&gt;
whether the &lt;tt&gt;@&lt;/tt&gt;-prefix is placed or not. If it is placed, then &lt;tt&gt;n&lt;/tt&gt; defaults to&lt;br/&gt;
0, otherwise it defaults to 1.&lt;/p&gt;

&lt;p&gt;In addition, new tests have been appended to &lt;tt&gt;test_cl_format.clj&lt;/tt&gt; to ensure the&lt;br/&gt;
correctness of this patch. The tests have been tested on the Common Lisp&lt;br/&gt;
implementation GNU CLISP 2.49, which presumably handle the &lt;tt&gt;~n@*&lt;/tt&gt;&lt;br/&gt;
correctly. This patch and GNU CLISP returns the same output for each format&lt;br/&gt;
call, sans case for printed symbols; Common Lisp has case-insensitive symbols,&lt;br/&gt;
whereas Clojure has not.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11767" name="clj-1134-star-directive-in-cl-format.txt" size="4067" author="hypirion" created="Tue, 18 Dec 2012 21:28:03 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1133] Certain actions on mutable fields in deftype lead to very strange error messages</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1133</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Consider the following code:&lt;/p&gt;

&lt;p&gt;(definterface Test&lt;br/&gt;
  (^void fail []))&lt;/p&gt;

&lt;p&gt;(deftype TestImpl&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;^{:unsynchronized-mutable true :tag int} x&amp;#93;&lt;/span&gt;&lt;br/&gt;
  Test&lt;br/&gt;
  (fail &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (set! x (dec x))))&lt;/p&gt;

&lt;p&gt;Its compilation fails with the following message:&lt;br/&gt;
CompilerException java.lang.VerifyError: (class: test/TestImpl, method: fail signature: ()V) Expecting to find integer on stack, compiling&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;.../test.clj:27) &lt;/p&gt;

&lt;p&gt;The following code works:&lt;/p&gt;

&lt;p&gt;(definterface Test&lt;br/&gt;
  (^void fail []))&lt;/p&gt;

&lt;p&gt;(deftype TestImpl&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;^{:unsynchronized-mutable true :tag int} x&amp;#93;&lt;/span&gt;&lt;br/&gt;
  Test&lt;br/&gt;
  (fail &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (set! x (int (dec x)))))&lt;/p&gt;

&lt;p&gt;The only change here is that I have wrapped (dec x) form into (int) call.&lt;/p&gt;

&lt;p&gt;I understand that in fact the former code should not work anyway (or at least should not work as I have expected) because (dec) is defined as a call to clojure.lang.Numbers.dec(), which is overloaded for double, long and Object only (in fact, changing :tag int to :tag long in the first example allows the program to compile).  However, the error message is completely uninformative and misleading; it also looks like that it is a consequence of compiler error. It is also not a problem of this concrete example; I found this error in more complex interface method implementation where (set!) call was right in the middle of its body.&lt;/p&gt;

&lt;p&gt;I&apos;m using Clojure 1.4.0 and have experienced this problem on Archlinux x86_64 and Windows 7 x86_64.&lt;/p&gt;

&lt;p&gt;Full stack trace of the error, in case it would be helpful:&lt;/p&gt;

&lt;p&gt;java.lang.VerifyError: (class: test/TestImpl, method: fail signature: ()V) Expecting to find integer on stack, compiling&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;.../test.clj:27)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6462)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:518)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:5919)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6508)&lt;br/&gt;
	at clojure.lang.Compiler.load(Compiler.java:6952)&lt;br/&gt;
	at clojure.lang.Compiler.loadFile(Compiler.java:6912)&lt;br/&gt;
	at clojure.lang.RT$3.invoke(RT.java:307)&lt;br/&gt;
	at test$eval3224.invoke(NO_SOURCE_FILE:43)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6511)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6477)&lt;br/&gt;
	at clojure.core$eval.invoke(core.clj:2797)&lt;br/&gt;
	at clojure.main$repl$read_eval_print__6405.invoke(main.clj:245)&lt;br/&gt;
	at clojure.main$repl$fn__6410.invoke(main.clj:266)&lt;br/&gt;
	at clojure.main$repl.doInvoke(main.clj:266)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:421)&lt;br/&gt;
	at clojure.main$repl_opt.invoke(main.clj:332)&lt;br/&gt;
	at clojure.main$main.doInvoke(main.clj:428)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:397)&lt;br/&gt;
	at clojure.lang.Var.invoke(Var.java:411)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
	at clojure.lang.Var.applyTo(Var.java:532)&lt;br/&gt;
	at clojure.main.main(main.java:37)&lt;br/&gt;
Caused by: java.lang.VerifyError: (class: test/TestImpl, method: fail signature: ()V) Expecting to find integer on stack&lt;br/&gt;
	at java.lang.Class.forName0(Native Method)&lt;br/&gt;
	at java.lang.Class.forName(Class.java:264)&lt;br/&gt;
	at clojure.lang.RT.classForName(RT.java:2039)&lt;br/&gt;
	at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:957)&lt;br/&gt;
	at clojure.lang.Compiler$HostExpr.access$400(Compiler.java:736)&lt;br/&gt;
	at clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2473)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	... 45 more&lt;/p&gt;</description>
                <environment>Archlinux x86_64, Windows 7 x86_64</environment>
            <key id="15905">CLJ-1133</key>
            <summary>Certain actions on mutable fields in deftype lead to very strange error messages</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dpx-infinity">Vladimir Matveev</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Dec 2012 13:48:31 -0600</created>
                <updated>Wed, 19 Dec 2012 01:20:28 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30255" author="dpx-infinity" created="Tue, 18 Dec 2012 13:51:17 -0600"  >&lt;p&gt;Shouldn&apos;t have set major priority; but I cannot edit issue again &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="30263" author="jafingerhut" created="Wed, 19 Dec 2012 01:20:28 -0600"  >&lt;p&gt;Reduced priority to minor, since ticket creator could not do so themselves.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1132] For record type Rec,  (instance? Rec (map-&gt;Rec {...})) need not return true, though (instance? Rec (Rec. ...)) does.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1132</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;    (defrecord Rec ...)&lt;/p&gt;

&lt;p&gt;    (instance? Rec (Rec. ...))        ;=&amp;gt; true&lt;br/&gt;
    (instance? Rec (map-&amp;gt;Rec {...}))  ;=&amp;gt; can be false  &lt;br/&gt;
&lt;br/&gt;
This occurs when the code is wrapped in a tomcat servlet by `lein ring&lt;br/&gt;
uberwar`, but &lt;b&gt;not&lt;/b&gt; when run at the REPL or under Jetty, say.&lt;br/&gt;
&lt;br/&gt;
Although produced under ring, this seems to me to be a general problem&lt;br/&gt;
with the map-&amp;gt; constructor, as (true? (instance? Rec (map-&amp;gt;Rec {...})))&lt;br/&gt;
should be an invariant, regardless of the environment or context.&lt;br/&gt;
The problem seems to arise in some aspect of the class loading process:&lt;/p&gt;

&lt;p&gt;    (.getClassLoader Rec)                    ;=&amp;gt; WebappClassLoader (delegate: false, repositories: /WEB-INF/classes/, parent: org.apache.catalina.loader.StandardClassLoader@790bc49d)&lt;br/&gt;
    (.getClassLoader (class (Rec. ...)))     ;=&amp;gt; WebappClassLoader (same as the previous line)&lt;br/&gt;
    (.getClassLoader (class (map-&amp;gt;Rec ...))) ;=&amp;gt; clojure.lang.DynamicClassLoader@2e7227a8&lt;/p&gt;

&lt;p&gt;The map-&amp;gt;Rec delegates to the create method, which seems to be where the problem lies.&lt;/p&gt;

&lt;p&gt;The record namespace is AOT compiled, properly I think/hope, and the requisite classes &lt;br/&gt;
imported as they should be.&lt;/p&gt;

&lt;p&gt;I have attached a minimal web app that reproduces the problem and shows&lt;br/&gt;
the configuration. As a sanity check, I have also created a trivial &lt;br/&gt;
workaround defrecord* that creates a clojure-native map constructor, &lt;br/&gt;
for which the problem does not occur. See the README.md in the tar &lt;br/&gt;
file for usage details, and the project.clj for my configuration.&lt;/p&gt;

&lt;p&gt;Again, I&apos;ve only been able to reproduce the problem under Tomcat,&lt;br/&gt;
not under Jetty or at the REPL.&lt;/p&gt;</description>
                <environment>Apache Tomcat/6.0.24 JVM/1.6.0_26-b03  Linux 2.6.32-279.el6.x86_64&lt;br/&gt;
&lt;br/&gt;
Clojure 1.4.0,  Ring 1.1.6, Compojure 1.1.3, Lein-Ring Plugin 0.7.5 (for lein ring uberwar)&lt;br/&gt;
</environment>
            <key id="15902">CLJ-1132</key>
            <summary>For record type Rec,  (instance? Rec (map-&gt;Rec {...})) need not return true, though (instance? Rec (Rec. ...)) does.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cg-at">Christopher Genovese</reporter>
                        <labels>
                        <label>constructor</label>
                        <label>defrecord</label>
                    </labels>
                <created>Tue, 18 Dec 2012 10:58:29 -0600</created>
                <updated>Tue, 18 Dec 2012 10:58:29 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11766" name="recordbug.tgz" size="5373405" author="cg-at" created="Tue, 18 Dec 2012 10:58:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1131] Importing a non-existent class causes an exception that does not fully identify the source file</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1131</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;m in the process of stripping out some OSGi support, and I missed one import.&lt;/p&gt;

&lt;p&gt;The exception identifies &quot;init.clj&quot;, but I&apos;d prefer to see the full path there, as I have a few different &quot;init.clj&quot; files in my overall project.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;:core-services:compileClojure
Reflection warning, com/annadaletech/nexus/services/registry.clj:37 - call to unregisterAll can&apos;t be resolved.
Reflection warning, com/annadaletech/nexus/services/registry.clj:131 - call to getConfiguration can&apos;t be resolved.
Reflection warning, com/annadaletech/nexus/services/registry.clj:150 - call to getConfiguration can&apos;t be resolved.
Exception in thread &quot;main&quot; java.lang.ClassNotFoundException: org.osgi.framework.ServiceRegistration, compiling:(init.clj:1)
	at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3387)
	at clojure.lang.Compiler.compile1(Compiler.java:7035)
	at clojure.lang.Compiler.compile1(Compiler.java:7025)
	at clojure.lang.Compiler.compile(Compiler.java:7097)
	at clojure.lang.RT.compile(RT.java:387)
	at clojure.lang.RT.load(RT.java:427)
	at clojure.lang.RT.load(RT.java:400)
	at clojure.core$load$fn__4890.invoke(core.clj:5415)
	at clojure.core$load.doInvoke(core.clj:5414)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invoke(core.clj:5227)
	at clojure.core$compile$fn__4895.invoke(core.clj:5426)
	at clojure.core$compile.invoke(core.clj:5425)
	at clojuresque.tasks.compile$main$fn__64.invoke(compile.clj:23)
	at clojuresque.cli$with_command_line_STAR_.invoke(cli.clj:92)
	at clojuresque.tasks.compile$main.doInvoke(compile.clj:6)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invoke(core.clj:601)
	at clojure.lang.Var.invoke(Var.java:419)
	at clojuresque.Driver.main(Driver.java:39)
Caused by: java.lang.ClassNotFoundException: org.osgi.framework.ServiceRegistration
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15899">CLJ-1131</key>
            <summary>Importing a non-existent class causes an exception that does not fully identify the source file</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hlewisship">Howard Lewis Ship</reporter>
                        <labels>
                        <label>feedback</label>
                    </labels>
                <created>Mon, 17 Dec 2012 18:13:02 -0600</created>
                <updated>Fri, 17 May 2013 15:56:48 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31104" author="cldwalker" created="Fri, 17 May 2013 15:56:48 -0500"  >&lt;p&gt;While it&apos;s reasonable to want this for your case, having long path names in a stacktrace could be inconvenient for others. I&apos;d recommend posting your desired change on the dev list - &lt;a href=&quot;https://groups.google.com/forum/?fromgroups#!forum/clojure-dev&quot;&gt;https://groups.google.com/forum/?fromgroups#!forum/clojure-dev&lt;/a&gt; . If they&apos;re ok with it, then I&apos;d recommend submitting a patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1130] Invoking a static method with the wrong number of arguments results in a NoSuchFieldException, rather than a proper message that the arguments could not be matched to the method</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1130</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;My code inadventently invoked a method that expected a single parameter, but passed no parameters.&lt;/p&gt;

&lt;p&gt;The exception:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;Exception in thread &quot;main&quot; java.lang.NoSuchFieldException: getService, compiling:(com/annadaletech/nexus/services/registry.clj:168)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6462)
	at clojure.lang.Compiler.analyze(Compiler.java:6262)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)
	at clojure.lang.Compiler.analyze(Compiler.java:6262)
	at clojure.lang.Compiler.access$100(Compiler.java:37)
	at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:5883)
....
Caused by: java.lang.NoSuchFieldException: getService
	at java.lang.Class.getField(Class.java:1520)
	at clojure.lang.Compiler$StaticFieldExpr.&amp;lt;init&amp;gt;(Compiler.java:1180)
	at clojure.lang.Compiler$HostExpr$Parser.parse(Compiler.java:923)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)
	... 78 more
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That threw me for a bit; really, it looks like the compiler is attempting to access a field and invoke it as an IFn.  However, a proper message would be &quot;getService() requires 1 parameter, not 0&quot; (or something to that effect).  Even &quot;invalid number of parameters for SmashRuntime/getService()&quot; would be better.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15898">CLJ-1130</key>
            <summary>Invoking a static method with the wrong number of arguments results in a NoSuchFieldException, rather than a proper message that the arguments could not be matched to the method</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hlewisship">Howard Lewis Ship</reporter>
                        <labels>
                        <label>feedback</label>
                    </labels>
                <created>Mon, 17 Dec 2012 17:57:44 -0600</created>
                <updated>Sun, 6 Jan 2013 18:44:47 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30382" author="michael-drogalis" created="Sun, 6 Jan 2013 18:44:47 -0600"  >&lt;p&gt;It looks like it&apos;s first trying to resolve a field by name, since field access with &lt;tt&gt;/&lt;/tt&gt; is legal. For example:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;user=&amp;gt; (Integer/parseInt)&lt;/tt&gt;&lt;br/&gt;
&lt;tt&gt;CompilerException java.lang.NoSuchFieldException: parseInt, compiling:(NO_SOURCE_PATH:1)&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;user=&amp;gt; (Integer/MAX_VALUE)&lt;/tt&gt;&lt;br/&gt;
&lt;tt&gt;2147483647&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;Would trying to resolve a method before a field fix this?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1129] Invalid ns macro can yield a difficult to trace exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1129</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I inadvertently stripped off the namespace part of my ns macro, so that it was &lt;tt&gt;(ns (:use ...&lt;/tt&gt;.  Clearly a user error, but an easy one.  However, the result (from the REPL or the AOT compiler) was not ideal:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;Exception in thread &quot;main&quot; java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.Named
	at clojure.core$name.invoke(core.clj:1489)
	at clojure.core$root_resource.invoke(core.clj:5210)
	at clojure.core$load_one.invoke(core.clj:5227)
	at clojure.core$compile$fn__4895.invoke(core.clj:5426)
	at clojure.core$compile.invoke(core.clj:5425)
	at clojuresque.tasks.compile$main$fn__64.invoke(compile.clj:23)
	at clojuresque.cli$with_command_line_STAR_.invoke(cli.clj:92)
	at clojuresque.tasks.compile$main.doInvoke(compile.clj:6)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invoke(core.clj:601)
	at clojure.lang.Var.invoke(Var.java:419)
	at clojuresque.Driver.main(Driver.java:39)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The problem here is that there is no indication of what file was being loaded and compiled at the time of the error. Since I was in the middle of refactoring a big swath of code, I had some work to do to track down which file I had mangled.&lt;/p&gt;

&lt;p&gt;I would like to see a little more logging to the System/err to identify what resource file was being read and compiled by the compiler at the time of the exception.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15897">CLJ-1129</key>
            <summary>Invalid ns macro can yield a difficult to trace exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hlewisship">Howard Lewis Ship</reporter>
                        <labels>
                        <label>aot</label>
                        <label>feedback</label>
                    </labels>
                <created>Mon, 17 Dec 2012 16:56:53 -0600</created>
                <updated>Wed, 19 Dec 2012 01:09:27 -0600</updated>
                    <resolved>Wed, 19 Dec 2012 01:09:27 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30249" author="jafingerhut" created="Tue, 18 Dec 2012 01:12:18 -0600"  >&lt;p&gt;Howard, is this perhaps a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-939&quot; title=&quot;Exceptions thrown in the top level ns form are reported without file or line number&quot;&gt;CLJ-939&lt;/a&gt;?  Let me know, and I can close this ticket as a duplicate if so.&lt;/p&gt;</comment>
                    <comment id="30252" author="hlewisship" created="Tue, 18 Dec 2012 11:10:39 -0600"  >&lt;p&gt;Yes, looks like a dupe to me. Sorry about that, I did do a search for existing issue before adding mine, but they can be hard to find.&lt;/p&gt;</comment>
                    <comment id="30262" author="jafingerhut" created="Wed, 19 Dec 2012 01:09:27 -0600"  >&lt;p&gt;Closed as duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-939&quot; title=&quot;Exceptions thrown in the top level ns form are reported without file or line number&quot;&gt;CLJ-939&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1128] Improve merge-with</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1128</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Set a first map as an initial value for reduce to&lt;br/&gt;
avoid merge-entry (series of contains? calls and etc) call on the first map.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15888">CLJ-1128</key>
            <summary>Improve merge-with</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="edtsech">Edward Tsech</reporter>
                        <labels>
                    </labels>
                <created>Thu, 13 Dec 2012 13:29:35 -0600</created>
                <updated>Thu, 13 Dec 2012 17:41:39 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30225" author="edtsech" created="Thu, 13 Dec 2012 13:36:23 -0600"  >&lt;p&gt;Tests pass.&lt;/p&gt;</comment>
                    <comment id="30226" author="jafingerhut" created="Thu, 13 Dec 2012 14:32:13 -0600"  >&lt;p&gt;Edward, your patch replaces the expression (or m1 {}) with m1.  It was changed from m1 to (or m1 {}) in a commit on Oct 16, 2008 with descriptive text &quot;improved nil handling in merge, merge-with&quot;, so I am pretty sure it would be best to leave it as (or m1 {}).  I believe the intent is to allow all but one of the map arguments to merge-with be nil, and everything will still work.&lt;/p&gt;

&lt;p&gt;The rest of the patch for avoiding one merge call seems sound to me.&lt;/p&gt;

&lt;p&gt;Your change would be even better at preserving any metadata on the first non-nil map in the list, if instead of calling with the first map, it called it with the first non-nil item of the list, and then the rest of the list after that.&lt;/p&gt;</comment>
                    <comment id="30228" author="edtsech" created="Thu, 13 Dec 2012 17:41:39 -0600"  >&lt;p&gt;I figured out that `reduce1` did pass a head of the list for me. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; (&lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L887&quot;&gt;https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L887&lt;/a&gt;)&lt;br/&gt;
But case with first nil argument is still valid. Correct me, please, if i&apos;m wrong.&lt;/p&gt;

&lt;p&gt;I&apos;m not sure about `(or m1 {})`. I don&apos;t see any problems which can happen. Probably behaviour of functions which are used internally was changed since 2008.&lt;/p&gt;

&lt;p&gt;(contains? nil :a) ;=&amp;gt; false&lt;br/&gt;
(assoc nil :a 1) ;=&amp;gt; {:a 1}&lt;br/&gt;
(get nil :a) ;=&amp;gt; nil&lt;/p&gt;

&lt;p&gt;I could write some tests for that.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11761" name="0001-Improve-merge-with.patch" size="851" author="edtsech" created="Thu, 13 Dec 2012 13:29:35 -0600" />
                    <attachment id="11762" name="0002-Improve-merge-with.patch" size="1077" author="edtsech" created="Thu, 13 Dec 2012 17:41:39 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1125] Clojure can leak memory when used in a servlet container</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1125</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When used within a servlet container&lt;br/&gt;
(Jetty/Tomcat/JBossAS/Immutant/etc), the thread locals Var.dvals (used&lt;br/&gt;
to store dynamic bindings) and LockingTransaction.transaction (used to&lt;br/&gt;
store the currently active transaction(s)) prevent all of the classes&lt;br/&gt;
loaded by an application&apos;s clojure runtime from being garbage collected, &lt;br/&gt;
resulting in a memory leak.&lt;/p&gt;

&lt;p&gt;The issue comes from threads living beyond the lifetime of a&lt;br/&gt;
deployment - servlet containers use thread pools that are shared&lt;br/&gt;
across all applications within the container. Currently, the dvals and&lt;br/&gt;
transaction thread locals are not discarded when they are no longer&lt;br/&gt;
needed, causing their contents to retain a hard reference to their&lt;br/&gt;
classloaders, which, in turn, causes all of the classes loaded under&lt;br/&gt;
the application&apos;s classloader to be retained until the thread exits&lt;br/&gt;
(which is generally at JVM shutdown).&lt;/p&gt;

&lt;p&gt;I&apos;ve attached a patch that does the following:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Var.dvals is now removed when the thread bindings are popped&lt;/li&gt;
	&lt;li&gt;Var.dvals no longer has an initialValue, so checking to see if it is&lt;br/&gt;
  set will no longer set it to an empty Frame&lt;/li&gt;
	&lt;li&gt;The outer transaction in LockingTransaction.transaction now removes&lt;br/&gt;
  the thread local when it is finished&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;There is still the opportunity for memory leaks if agents or futures &lt;br/&gt;
are used, and the executors used for them are not shutdown when the&lt;br/&gt;
app is undeployed. That&apos;s a solvable problem, but should probably be&lt;br/&gt;
solved by the containers themselves (and/or the war generation tools) &lt;br/&gt;
instead of in clojure itself.&lt;/p&gt;

&lt;p&gt;This patch has a small performance impact: its use of a try/finally &lt;br/&gt;
around running transactions to remove the outer transaction adds &lt;br/&gt;
4-6 microseconds to each transaction call on my hardware.&lt;/p&gt;

&lt;p&gt;Providing an automated test for this patch is difficult - I&apos;ve tested&lt;br/&gt;
it locally with repeated deployments to a container while monitoring&lt;br/&gt;
GC and permgen. All of clojure&apos;s tests pass with it applied.&lt;/p&gt;

&lt;p&gt;The above is a condensation of:&lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/3CXDe8_9G58/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/3CXDe8_9G58/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;m happy to provide whatever feedback/work is needed to get this&lt;br/&gt;
applied.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15882">CLJ-1125</key>
            <summary>Clojure can leak memory when used in a servlet container</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tcrawley">Toby Crawley</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Dec 2012 15:01:15 -0600</created>
                <updated>Mon, 13 May 2013 19:30:16 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>8</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="31088" author="trptcolin" created="Mon, 13 May 2013 19:30:16 -0500"  >&lt;p&gt;This patch works great for me to avoid OOM/PermGen crashes from classloaders being retained &lt;span class=&quot;error&quot;&gt;&amp;#91;mine is a non-servlet use case&amp;#93;&lt;/span&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11756" name="threadlocal-removal-tcrawley-2012-12-11.diff" size="3685" author="tcrawley" created="Tue, 11 Dec 2012 15:01:15 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1124] for-as</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1124</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A common pattern in programming is building up some data structure step by step:&lt;/p&gt;

&lt;p&gt;In Python:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;code&amp;#93;&lt;/span&gt;&lt;br/&gt;
x = {0: 1}&lt;br/&gt;
for item in stuff:&lt;br/&gt;
    x&lt;span class=&quot;error&quot;&gt;&amp;#91;item&amp;#93;&lt;/span&gt; = item * x.get(item - 1, 0)&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;/code&amp;#93;&lt;/span&gt;&lt;br/&gt;
etc.&lt;/p&gt;

&lt;p&gt;In an imperative for loop this is easy since we have easy access to the &quot;current&quot; data structure being built up.&lt;/p&gt;

&lt;p&gt;I propose the addition of a function for-as similar to as-&amp;gt; except the value of the last loop iteration is bound to the name.&lt;/p&gt;

&lt;p&gt;So we can write the above as:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;code&amp;#93;&lt;/span&gt;&lt;br/&gt;
(last (for-as &lt;span class=&quot;error&quot;&gt;&amp;#91;x {0 1}&amp;#93;&lt;/span&gt;&lt;br/&gt;
        &lt;span class=&quot;error&quot;&gt;&amp;#91;item stuff&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (assoc x item (* item (get x (- item 1) 0)))))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;/code&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;An (un-optimized) implementation might be something like:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;code&amp;#93;&lt;/span&gt;&lt;br/&gt;
(defmacro reduce-for [&lt;span class=&quot;error&quot;&gt;&amp;#91;res init&amp;#93;&lt;/span&gt; for-seq-exprs body-expr]&lt;br/&gt;
  `(reduce #(%2 %1) ~init&lt;br/&gt;
    (for ~for-seq-exprs&lt;br/&gt;
      (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;~res&amp;#93;&lt;/span&gt;&lt;br/&gt;
        ~body-expr))))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;/code&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Note: reduce-for does not return a seq, instead it returns the result of the last loop body iteration.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15880">CLJ-1124</key>
            <summary>for-as</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="yongqli">Yongqian Li</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Dec 2012 23:27:10 -0600</created>
                <updated>Mon, 10 Dec 2012 23:33:43 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30208" author="yongqli" created="Mon, 10 Dec 2012 23:31:11 -0600"  >&lt;p&gt;(Fixed formatting)&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;x = {0: 1}
&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; item in stuff:
    x[item] = item * x.get(item - 1, 0)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(last (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt;-as [x {0 1}]
        [item stuff]
  (assoc x item (* item (get x (- item 1) 0)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defmacro reduce-&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [[res init] &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt;-seq-exprs body-expr]
  `(reduce #(%2 %1) ~init
    (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; ~&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt;-seq-exprs
      (fn [~res]
        ~body-expr))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(Someone please fix the formatting in above and delete this comment.)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1123] UNIX/Windows line endings - clojure.pprint tests cause failure in Windows build</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1123</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I ran a test build of the latest Clojure 1.5 master (372f03e) on Windows and found a number of failures in the &quot;clojure.test-clojure.pprint&quot; tests. All of these seem to be caused by incorrect assumptions about line endings. Example:&lt;/p&gt;

&lt;p&gt;     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; {:clojure.test/vars (ns-macro-test),&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :thread/name &quot;main&quot;,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :pid 1528,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :thread 1,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :type :assert/fail,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :level :warn,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :test/actual&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  (not&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   (clojure.core/=&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;    &quot;(ns slam.hound.stitch\r\n  (:use [slam.hound.prettify :only &lt;span class=&quot;error&quot;&gt;&amp;#91;prettify&amp;#93;&lt;/span&gt;]))\r\n&quot;&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;    &quot;(ns slam.hound.stitch\n  (:use [slam.hound.prettify :only &lt;span class=&quot;error&quot;&gt;&amp;#91;prettify&amp;#93;&lt;/span&gt;]))\n&quot;)),&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :test/expected&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  (clojure.core/=&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   (clojure.core/with-out-str&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;    (clojure.pprint/with-pprint-dispatch&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     clojure.pprint/code-dispatch&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     (clojure.pprint/pprint&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;      (clojure.core/read-string&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;       &quot;(ns slam.hound.stitch\n  (:use [slam.hound.prettify :only &lt;span class=&quot;error&quot;&gt;&amp;#91;prettify&amp;#93;&lt;/span&gt;]))&quot;))))&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   (clojure.core/str&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;    &quot;(ns slam.hound.stitch\n  (:use [slam.hound.prettify :only &lt;span class=&quot;error&quot;&gt;&amp;#91;prettify&amp;#93;&lt;/span&gt;]))&quot;&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;    &quot;\n&quot;)),&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :line 173,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :tstamp 1355113319212,&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  :file &quot;test_pretty.clj&quot;}&lt;/p&gt;

&lt;p&gt;It isn&apos;t totally clear what the right behaviour should be: should pprint be producing platform specific line endings or not? Either way, the test should confirm the expected behaviour.&lt;/p&gt;</description>
                <environment>Windows 7, Maven 3.0.4</environment>
            <key id="15878">CLJ-1123</key>
            <summary>UNIX/Windows line endings - clojure.pprint tests cause failure in Windows build</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mikera">Mike Anderson</reporter>
                        <labels>
                        <label>platform-specific</label>
                        <label>pprint</label>
                    </labels>
                <created>Sun, 9 Dec 2012 22:41:15 -0600</created>
                <updated>Mon, 10 Dec 2012 11:45:23 -0600</updated>
                    <resolved>Mon, 10 Dec 2012 11:45:23 -0600</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30199" author="jafingerhut" created="Mon, 10 Dec 2012 01:57:04 -0600"  >&lt;p&gt;Most likely this should be closed as a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1076&quot; title=&quot;pprint tests fail on Windows, expecting \n&quot;&gt;CLJ-1076&lt;/a&gt;.  The symptoms sound the same, and &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1076&quot; title=&quot;pprint tests fail on Windows, expecting \n&quot;&gt;CLJ-1076&lt;/a&gt; has a patch for it that should fix the problem.&lt;/p&gt;</comment>
                    <comment id="30200" author="mikera" created="Mon, 10 Dec 2012 02:03:58 -0600"  >&lt;p&gt;Hi Andy - yes this looks like a duplicate, thanks for spotting. Should be closed.&lt;/p&gt;</comment>
                    <comment id="30204" author="jafingerhut" created="Mon, 10 Dec 2012 11:45:23 -0600"  >&lt;p&gt;Duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1076&quot; title=&quot;pprint tests fail on Windows, expecting \n&quot;&gt;CLJ-1076&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1122] Add contributing.md file to github repository (shows clear message on issues/pull request create form)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1122</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This adds a clear message when someone wants to create a pull request/issue and invites the user to read the contribution guidelines: see &lt;a href=&quot;https://github.com/blog/1184-contributing-guidelines&quot;&gt;https://github.com/blog/1184-contributing-guidelines&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The same thing could be done for all the clojure/* repositories.&lt;/p&gt;

&lt;p&gt;The content of the file is just a markdown version of &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Preview here: &lt;a href=&quot;https://github.com/mpenet/clojure/blob/aef170ca5eca1b71a2eb1ef320223d1277df0e5e/CONTRIBUTING.md&quot;&gt;https://github.com/mpenet/clojure/blob/aef170ca5eca1b71a2eb1ef320223d1277df0e5e/CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15877">CLJ-1122</key>
            <summary>Add contributing.md file to github repository (shows clear message on issues/pull request create form)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mpenet">Max Penet</reporter>
                        <labels>
                    </labels>
                <created>Sun, 9 Dec 2012 14:14:57 -0600</created>
                <updated>Fri, 17 May 2013 09:04:31 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30349" author="stu" created="Wed, 2 Jan 2013 06:31:18 -0600"  >&lt;p&gt;Please change this to link to the definitive prose, so we don&apos;t have to maintain that in two places.&lt;/p&gt;</comment>
                    <comment id="30350" author="mpenet" created="Wed, 2 Jan 2013 06:51:49 -0600"  >&lt;p&gt;Feel free to correct the wording, I used something simple.&lt;/p&gt;</comment>
                    <comment id="31098" author="cldwalker" created="Fri, 17 May 2013 09:04:03 -0500"  >&lt;p&gt;Stu, he linked to clojure.org as you requested so I&apos;m moving this along.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11754" name="contributing.patch" size="3555" author="mpenet" created="Sun, 9 Dec 2012 14:14:57 -0600" />
                    <attachment id="11787" name="contributing-v2.patch" size="563" author="mpenet" created="Wed, 2 Jan 2013 06:52:38 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1121] -&gt; and -&gt;&gt; have unexpected behavior when combined with unusual macros</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1121</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;My intuitive understanding of the classic threading macros is that the meaning of forms like &lt;tt&gt;(-&amp;gt; a b c)&lt;/tt&gt; can be understood syntactically independent of the meaning of the symbols involved or the fact that the two threading macros are defined recursively. However the recursive definition breaks that expectation. After&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(macroexpand-1 (macroexpand-1 &apos;(-&amp;gt; a b c)))

=&amp;gt; (c (-&amp;gt; a b))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;tt&gt;c&lt;/tt&gt; is now in control if it is a macro, and is now seeing the argument &lt;tt&gt;(-&amp;gt; a b)&lt;/tt&gt; rather than &lt;tt&gt;(b a)&lt;/tt&gt; as would be the case if we had written &lt;tt&gt;(c (b a))&lt;/tt&gt; originally.&lt;/p&gt;

&lt;p&gt;Admittedly I do not know of a realistic example where this is an important distinction (I noticed this when playing with a rather perverse use of &lt;tt&gt;-&amp;gt;&amp;gt;&lt;/tt&gt; with macros from korma), but at the very least it means that the behavior of the threading macros isn&apos;t quite as easy to accurately explain as I thought it was.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15875">CLJ-1121</key>
            <summary>-&gt; and -&gt;&gt; have unexpected behavior when combined with unusual macros</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gfredericks">Gary Fredericks</reporter>
                        <labels>
                    </labels>
                <created>Thu, 6 Dec 2012 20:28:37 -0600</created>
                <updated>Fri, 12 Apr 2013 09:52:24 -0500</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="30183" author="gfredericks" created="Fri, 7 Dec 2012 09:19:46 -0600"  >&lt;p&gt;I just realized that my patch also implements &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1086&quot; title=&quot;Support arity-1 for -&amp;gt;&amp;gt;&quot;&gt;CLJ-1086&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="30290" author="stu" created="Sat, 22 Dec 2012 09:48:55 -0600"  >&lt;p&gt;Would be nice if tests also demonstrated that metadata is preserved correctly.&lt;/p&gt;</comment>
                    <comment id="30329" author="gfredericks" created="Wed, 26 Dec 2012 20:16:45 -0600"  >&lt;p&gt;New patch in response to stuarthalloway feedback.&lt;/p&gt;</comment>
                    <comment id="30414" author="timmc" created="Wed, 9 Jan 2013 18:47:26 -0600"  >&lt;p&gt;This patch also prevents an infinite loop in the macroexpander when fed the following expression:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(-&amp;gt;&amp;gt; a b (-&amp;gt;&amp;gt; c d))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Edit: Far simpler example.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11751" name="0001-CLJ-1121-Reimplement-and-without-recursion.patch" size="2680" author="gfredericks" created="Thu, 6 Dec 2012 20:33:40 -0600" />
                    <attachment id="11780" name="CLJ-1121-v002.patch" size="4843" author="gfredericks" created="Wed, 26 Dec 2012 20:16:45 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1120] Introduce ex-message and ex-cause to abstract away the platform in dealing with ExceptionInfo</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1120</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As described in the title. See &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-429&quot; title=&quot;Data Conveying Exception: ex-data and ex-info&quot;&gt;&lt;del&gt;CLJS-429&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15872">CLJ-1120</key>
            <summary>Introduce ex-message and ex-cause to abstract away the platform in dealing with ExceptionInfo</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="michalmarczyk">Micha&#322; Marczyk</assignee>
                                <reporter username="michalmarczyk">Micha&#322; Marczyk</reporter>
                        <labels>
                    </labels>
                <created>Thu, 6 Dec 2012 06:19:15 -0600</created>
                <updated>Fri, 21 Dec 2012 23:03:36 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30177" author="michalmarczyk" created="Thu, 6 Dec 2012 06:23:10 -0600"  >&lt;p&gt;The attached patch implements ex-message and ex-cause to work on arbitrary Throwables.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11749" name="0001-CLJ-1120-ex-message-ex-cause.patch" size="1357" author="michalmarczyk" created="Thu, 6 Dec 2012 06:23:10 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1119] inconsistent behavior of lazy-seq w/ macro &amp; closure on excptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1119</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;lazy-seq seems to evaluate inconsistently when body includes a macro and throws and exception. 1st evalutation throws the exceptions, subsequent ones return empty sequence.&lt;/p&gt;

&lt;p&gt;demo code:&lt;/p&gt;

&lt;p&gt;(defn gen-lazy []&lt;br/&gt;
  (let [coll &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;]&lt;br/&gt;
    (lazy-seq&lt;br/&gt;
      (when-let &lt;span class=&quot;error&quot;&gt;&amp;#91;s (seq coll)&amp;#93;&lt;/span&gt;&lt;br/&gt;
        (throw (Exception.))))))&lt;/p&gt;

&lt;p&gt;(def lazy (gen-lazy))&lt;/p&gt;

&lt;p&gt;(try&lt;br/&gt;
  (println &quot;lazy:&quot; lazy)&lt;br/&gt;
  (catch Exception ex&lt;br/&gt;
    (println ex)))&lt;/p&gt;

&lt;p&gt;(try&lt;br/&gt;
  (println &quot;lazy, again:&quot; lazy)&lt;br/&gt;
  (catch Exception ex&lt;br/&gt;
    (println ex)))&lt;/p&gt;

&lt;p&gt;It should throw an exception both times but only does on 1st. Generally speaking an expression shouldn&apos;t evaluate to different things depending on whether it&apos;s been evaluated before.&lt;/p&gt;

&lt;p&gt;When removing the closure ...&lt;/p&gt;

&lt;p&gt;(defn gen-lazy []&lt;br/&gt;
  (lazy-seq&lt;br/&gt;
    (when-let [s (seq &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;)]&lt;br/&gt;
      (throw (Exception.)))))&lt;/p&gt;

&lt;p&gt;... or removing the when-let macro ...&lt;/p&gt;

&lt;p&gt;(defn gen-lazy []&lt;br/&gt;
  (let [coll &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;]&lt;br/&gt;
    (lazy-seq&lt;br/&gt;
      (seq coll)&lt;br/&gt;
      (throw (Exception.)))))&lt;/p&gt;

&lt;p&gt;It works i.e. consistently throws the exception, so seems to be some interaction between the closure and the macro at work here. This particular combination is used in the &apos;map&apos; function.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/Z3EiBUQ7Inc&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/Z3EiBUQ7Inc&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15869">CLJ-1119</key>
            <summary>inconsistent behavior of lazy-seq w/ macro &amp; closure on excptions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hank">Hank</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Dec 2012 03:00:15 -0600</created>
                <updated>Sun, 16 Dec 2012 04:06:49 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30147" author="hank" created="Mon, 3 Dec 2012 04:26:02 -0600"  >&lt;p&gt;N.B. The primary use case I have for this, in case it matters, is interrupting the evaluation of a &apos;map&apos; expression in which the mapped fn is slow to evaluate (throwing an InterruptedException), because I am not interested in its result any more. Then later I re-evaluate it because I am interested in the result after all, however with above bug the lazy sequence terminates instead of recommencing where it left off.&lt;/p&gt;

&lt;p&gt;(UPDATE: This use case is similar to the kind of ersatz continuations that Jetty does (RetryRequest runtime exception) or even Clojure itself when barging STM transactions with the RetryEx exception.)&lt;/p&gt;</comment>
                    <comment id="30149" author="hank" created="Mon, 3 Dec 2012 08:45:27 -0600"  >&lt;p&gt;Related to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-457&quot; title=&quot;lazy recursive definition giving incorrect results&quot;&gt;CLJ-457&lt;/a&gt; according to Christophe. His patch fixes this,too.&lt;/p&gt;</comment>
                    <comment id="30172" author="hank" created="Tue, 4 Dec 2012 05:02:32 -0600"  >&lt;p&gt;Sorry Christophe&apos;s patch doesn&apos;t work for me here. It avoids evaluating the LazySeq a second time by prematurely throwing an exception. However a LazySeq might evaluate properly the second time around b/c the situation causing the exception was transient. As per comment above an evaluation might get interrupted, throwing InterruptedException the first time around but not the second time.&lt;/p&gt;

&lt;p&gt;Also the observation with the closure and macro need explanation IMHO.&lt;/p&gt;</comment>
                    <comment id="30189" author="hank" created="Sat, 8 Dec 2012 03:51:04 -0600"  >&lt;p&gt;further insight: &apos;delay&apos; exhibits the same behavior and is a more simple case to examine. the macro suspicion is a red herring: as demoed below it is actually the closed over variable magically turns to nil, the when-let macro simply turned that into a nil for the whole expression.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def delayed
  (let [a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
    (delay
      (print &lt;span class=&quot;code-quote&quot;&gt;&quot;a=&quot;&lt;/span&gt; a)
      (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (Exception.)))))

(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (print &lt;span class=&quot;code-quote&quot;&gt;&quot;delayed 1:&quot;&lt;/span&gt;)
  (force delayed)
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception ex (println ex)))

(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (print &lt;span class=&quot;code-quote&quot;&gt;&quot;delayed 2:&quot;&lt;/span&gt;)
  (force delayed)
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception ex (println ex)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;prints:&lt;/p&gt;

&lt;p&gt;delayed 1:a= true#&amp;lt;Exception java.lang.Exception&amp;gt;&lt;br/&gt;
delayed 2:a= nil#&amp;lt;Exception java.lang.Exception&amp;gt;&lt;/p&gt;</comment>
                    <comment id="30193" author="hank" created="Sun, 9 Dec 2012 01:31:54 -0600"  >&lt;p&gt;The above leads to dodgy outcomes such as: The following expression leads to an Exception on 1st evaluation and to &quot;w00t!&quot; on subsequent ones.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def delayed
  (let [a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
    (delay
      (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; a
        (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (Exception.))
        &lt;span class=&quot;code-quote&quot;&gt;&quot;w00t!&quot;&lt;/span&gt;))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Try it like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (print &lt;span class=&quot;code-quote&quot;&gt;&quot;delayed 1:&quot;&lt;/span&gt; )
  (println (force delayed))
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception ex (println ex)))

(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (print &lt;span class=&quot;code-quote&quot;&gt;&quot;delayed 2:&quot;&lt;/span&gt;)
  (println (force delayed))
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception ex (println ex)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Results in:&lt;br/&gt;
delayed 1:#&amp;lt;Exception java.lang.Exception&amp;gt;&lt;br/&gt;
delayed 2:w00t!&lt;/p&gt;

&lt;p&gt;This code shows that the problem is tied to the :once flag as suspected.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def test-once
  (let [a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
    (^{:once &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} fn* foo []
	    (println &lt;span class=&quot;code-quote&quot;&gt;&quot;a=&quot;&lt;/span&gt; a)
	    (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (Exception.)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Invoking the fn twice will show &apos;a&apos; turning from &apos;true&apos; to &apos;nil&apos;, try it like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (print &lt;span class=&quot;code-quote&quot;&gt;&quot;test-once 1:&quot;&lt;/span&gt;)
  (test-once)
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception ex (println ex)))

(&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
  (print &lt;span class=&quot;code-quote&quot;&gt;&quot;test-once 2:&quot;&lt;/span&gt;)
  (test-once)
  (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception ex (println ex)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Results in:&lt;br/&gt;
test-once 1:a= true&lt;br/&gt;
#&amp;lt;Exception java.lang.Exception&amp;gt;&lt;br/&gt;
test-once 2:a= nil&lt;br/&gt;
#&amp;lt;Exception java.lang.Exception&amp;gt;&lt;/p&gt;

&lt;p&gt;That doesn&apos;t happen when the ^{:once true} is removed. Now one could argue that above fn is invoked twice, which is exactly what one is not supposed to do when decorated with the :once flag, but I argue that an unsuccessful call doesn&apos;t count as invocation towards the :once flag. The delay and lazy-seq macros agree with me there as the resulting objects are not considered realized (as per realized? function) if the evaluation of the body throws an exception, and realization/evaluation of the body is therefore repeated on re-evaluation of the delay/lazy-seq.&lt;/p&gt;

&lt;p&gt;Try this using &lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(realized? delayed)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; after the first evaluation in the code above. In the implementation this can be seen e.g. &lt;a href=&quot;https://github.com/clojure/clojure/blob/d0c380d9809fd242bec688c7134e900f0bbedcac/src/jvm/clojure/lang/Delay.java#L33&quot;&gt;here for clojure.lang.Delay&lt;/a&gt; (similarly for LazySeq), the body-fn is set to null (meaning realized) after the invocation returns &lt;b&gt;successfully&lt;/b&gt; only.&lt;/p&gt;

&lt;p&gt;The :once flag affects &lt;a href=&quot;https://github.com/clojure/clojure/blob/d0c380d9809fd242bec688c7134e900f0bbedcac/src/jvm/clojure/lang/Compiler.java#L4701&quot;&gt;this part of the compiler only&lt;/a&gt;. Some field is set to nil there in the course of a function invocation, for the good reason of letting the garbage compiler collect objects, however this should to be done after the function successfully completes only. Can this be changed?&lt;/p&gt;</comment>
                    <comment id="30240" author="hank" created="Sun, 16 Dec 2012 04:02:08 -0600"  >&lt;p&gt;A workaround for the case of the &apos;map&apos; function as described in the 1st comment, works as this: The original map function, if you take out the cases for several colls, the performance enhancements for chunked seqs and forcing the coll argument to a seq, looks like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn map [f s]
  (lazy-seq
    (cons (f (first s)) (map f (&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; s)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In my workaround I evaluate f &lt;b&gt;twice&lt;/b&gt;:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn map [f s]
  (lazy-seq
    (f (first s))
    (cons (f (first s)) (map f (&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; s)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because the downstream functions that are slow to evaluate are all of the deref kind that cache their result (more lazy-seqs, delays, futures, promises), the InterruptedException can only happen during the 1st evaluation, while the tail call optimization that sets closed-over variables to nil (it pays to read this here: &lt;a href=&quot;http://clojure.org/lazy&quot;&gt;http://clojure.org/lazy&lt;/a&gt;) only happens on the second call. The first still creates an fn that captures the head of the sequence &apos;s&apos;, however this is not being held onto as it is not returned.&lt;/p&gt;

&lt;p&gt;I use this special version of map (and other, similarly rewritten functions based on lazy-seq such as iterate) when I want interruptible, restartable seq evaluations.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1118] inconsistent numeric comparison semantics between BigDecimal and other Numerics</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1118</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user&amp;gt; &lt;b&gt;clojure-version&lt;/b&gt;&lt;br/&gt;
{:major 1, :minor 5, :incremental 0, :qualifier &quot;beta1&quot;}&lt;br/&gt;
user&amp;gt; (== 2.0 2.0M)&lt;br/&gt;
true&lt;br/&gt;
user&amp;gt; (== 2 2.0M)&lt;br/&gt;
false                  &amp;lt;-- this one is not like the others&lt;br/&gt;
user&amp;gt; (== 2 2.0)&lt;br/&gt;
true&lt;br/&gt;
user&amp;gt; (== 2N 2.0)&lt;br/&gt;
true&lt;br/&gt;
user&amp;gt; (== 2 (double 2.0M))&lt;br/&gt;
true&lt;/p&gt;


&lt;p&gt;It&apos;s not clear if this is a bug or an enhancement request, Should BigDecimal&apos;s be special in comparason to their smaller equivalents?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15867">CLJ-1118</key>
            <summary>inconsistent numeric comparison semantics between BigDecimal and other Numerics</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="arthurulfeldt">Arthur Ulfeldt</reporter>
                        <labels>
                    </labels>
                <created>Fri, 30 Nov 2012 13:36:57 -0600</created>
                <updated>Thu, 25 Apr 2013 19:58:50 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30113" author="arthurulfeldt" created="Fri, 30 Nov 2012 13:51:10 -0600"  >&lt;p&gt;I understand that the definition of equality between bigDecimals is dependent on both value and scale as in this case:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (== 0.000000M 0.0M)&lt;br/&gt;
false&lt;/p&gt;

&lt;p&gt;I just want to make sure the decission to propagate that semantic across types is intentional. If this is on purpose than this is not a bug.&lt;/p&gt;</comment>
                    <comment id="30114" author="arthurulfeldt" created="Fri, 30 Nov 2012 14:03:16 -0600"  >&lt;p&gt;this could be fixed by calling stripTrailingZeros on bigDecimals before comparing them to Longs or BigInts.  &lt;/p&gt;

&lt;p&gt;(== 2 (double (. 2.0M stripTrailingZeros)))&lt;br/&gt;
true&lt;/p&gt;

&lt;p&gt;Edited by Andy Fingerhut: Unfortunately that fails for BigDecimal values equal to 0, unless they happen to have a scale that matches what you are comparing it to.&lt;/p&gt;

&lt;p&gt;I think a more complete solution is to use BigDecimal&apos;s compareTo method, e.g.:&lt;/p&gt;

&lt;p&gt;(zero? (.compareTo 2.0M (bigdec 2)))&lt;br/&gt;
true&lt;/p&gt;</comment>
                    <comment id="30166" author="halgari" created="Mon, 3 Dec 2012 11:31:33 -0600"  >&lt;p&gt;It seems we need some more eyes on this issue, can you bring this up on clojure-dev and see what they think?&lt;/p&gt;</comment>
                    <comment id="30959" author="jafingerhut" created="Sun, 14 Apr 2013 04:03:23 -0500"  >&lt;p&gt;Patch clj-1118-make-double-equals-true-for-more-bigdecimals-patch-v1.txt dated Apr 14 2013 changes equiv for BigDecimals so that instead of using BigDecimal.equals(), it uses BigDecimal.compareTo() and checks the return value is equal to 0.&lt;/p&gt;

&lt;p&gt;The Java docs for these methods explicitly state that BigDecimal.equals() will treat values that are otherwise equal numerically, but differ in scale, as not equal.&lt;/p&gt;

&lt;p&gt;They also say that BigDecimal.compareTo() will return 0 for such BigDecimals.&lt;/p&gt;

&lt;p&gt;I&apos;m not sure if this is the preferred behavior for Clojure, but if it is, this patch should do it.&lt;/p&gt;</comment>
                    <comment id="30961" author="jafingerhut" created="Mon, 15 Apr 2013 00:18:55 -0500"  >&lt;p&gt;clj-1118-make-double-equals-true-for-more-bigdecimals-patch-v2.txt dated Apr 14 2013 is same as clj-1118-make-double-equals-true-for-more-bigdecimals-patch-v1.txt described in previous comment, except it also has some new tests included.&lt;/p&gt;</comment>
                    <comment id="30963" author="jafingerhut" created="Mon, 15 Apr 2013 21:07:44 -0500"  >&lt;p&gt;clj-1118-make-double-equals-true-for-more-bigdecimals-patch-v3.txt dated Apr 15 2013 is the same as the the previous patch clj-1118-make-double-equals-true-for-more-bigdecimals-patch-v2.txt, except for the following:&lt;/p&gt;

&lt;p&gt;By changing == behavior for BigDecimal by modifying the BigDecimalOps.equiv() method, that also changes the behavior of = when comparing BigDecimal values to other numbers.  hash should be consistent with =, so now hash should return same value for all numerically equal BigDecimal values.  This patch should achieve that.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11960" name="clj-1118-make-double-equals-true-for-more-bigdecimals-patch-v3.txt" size="4136" author="jafingerhut" created="Mon, 15 Apr 2013 21:07:44 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1117] Partition does not follow docs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1117</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc for partition states &quot;In case there are not enough padding elements, return a partition with less than n items.&quot;&lt;/p&gt;

&lt;p&gt;However, the behavior of this function is as follows:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (partition 3 (range 10))&lt;br/&gt;
((0 1 2) (3 4 5) (6 7 8))&lt;br/&gt;
user=&amp;gt; (partition 4 (range 10))&lt;br/&gt;
((0 1 2 3) (4 5 6 7))&lt;br/&gt;
user=&amp;gt; (partition 5 (range 10))&lt;br/&gt;
((0 1 2 3 4) (5 6 7 8 9))&lt;/p&gt;

&lt;p&gt;Either the doc should be updated to make it clear that not providing a pad will mean that items are dropped, or the functionality of partition should be fixed to the following:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (partition 3 (range 10))&lt;br/&gt;
((0 1 2) (3 4 5) (6 7 8) (9))&lt;/p&gt;</description>
                <environment>OS X, 10.8</environment>
            <key id="15864">CLJ-1117</key>
            <summary>Partition does not follow docs</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="halgari">Timothy Baldridge</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Nov 2012 13:28:02 -0600</created>
                <updated>Fri, 17 May 2013 10:14:56 -0500</updated>
                                    <version>Release 1.6</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30091" author="jafingerhut" created="Thu, 29 Nov 2012 14:15:09 -0600"  >&lt;p&gt;That would be a potentially breaking change for some people&apos;s code that uses partition.  partition-all behaves as you wish.&lt;/p&gt;

&lt;p&gt;Also, your concern with the documentation is for when there are padding elements specified as an argument, but your examples don&apos;t specify any padding elements.&lt;/p&gt;</comment>
                    <comment id="30094" author="halgari" created="Thu, 29 Nov 2012 14:55:11 -0600"  >&lt;p&gt;I agree, but I think the docs should then explicitly state: &quot;if no padding is given, not all input elements may be returned in the output partitions&quot; or something to that line. &lt;/p&gt;</comment>
                    <comment id="30101" author="jafingerhut" created="Thu, 29 Nov 2012 16:43:22 -0600"  >&lt;p&gt;More precise documentation of current behavior is always welcome in my opinion.&lt;/p&gt;</comment>
                    <comment id="31099" author="cldwalker" created="Fri, 17 May 2013 10:14:56 -0500"  >&lt;p&gt;I&apos;ve uploaded a patch that calls out when and how partition drops tail elements:&lt;br/&gt;
&quot;If a pad collection is not supplied, any tail elements that remain from dividing the input collection length by n will not be included in a partition.&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11994" name="clj-1117.patch" size="1392" author="cldwalker" created="Fri, 17 May 2013 10:14:56 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1116] More REPL-friendly &apos;ns macro</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1116</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &apos;ns macro is not as dynamic as it could be.&lt;br/&gt;
For instance, the following line typed in a repl (ns a)(ns b (:require a)) currently (1.4, 1.3, etc.) fails with an exception because the (:require a) call tries to reach the filesystem for file a.clj or a__init.class.&lt;/p&gt;

&lt;p&gt;The attached patch ( dynamic-ns-patch2.diff ) allows a successful call to (ns a) behave the same as a successful call to (require &apos;a), adding namespace a to the list of &lt;b&gt;loaded-libs&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Discussion on googlegroup&apos;s mailing list: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/fb231e6fab4a5ad&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/fb231e6fab4a5ad&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15863">CLJ-1116</key>
            <summary>More REPL-friendly &apos;ns macro</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="laurentpetit">Laurent Petit</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Nov 2012 09:18:58 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Tue, 11 Dec 2012 11:14:05 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="30084" author="richhickey" created="Thu, 29 Nov 2012 09:31:08 -0600"  >&lt;p&gt;screeners, please make sure this has tests before passing on&lt;/p&gt;</comment>
                    <comment id="30088" author="laurentpetit" created="Thu, 29 Nov 2012 10:41:25 -0600"  >&lt;p&gt;Tests added&lt;/p&gt;</comment>
                    <comment id="30110" author="halgari" created="Fri, 30 Nov 2012 11:35:58 -0600"  >&lt;p&gt;Patch applies, fixes the bug. All tests pass. &lt;/p&gt;

&lt;p&gt;Screened&lt;/p&gt;</comment>
                    <comment id="30148" author="bendlas" created="Mon, 3 Dec 2012 07:52:30 -0600"  >&lt;p&gt;I see this has already been screened, but FWIW I tested the repl with this patch and the behavior works for me.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11725" name="dynamic-ns-patch2.diff" size="2012" author="laurentpetit" created="Thu, 29 Nov 2012 10:40:33 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1115] multi arity into</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1115</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Any reason why into isn&apos;t multi arity?&lt;/p&gt;

&lt;p&gt;(into to &amp;amp; froms) =&amp;gt; (reduce into to froms)&lt;/p&gt;


&lt;p&gt;(into #{} &lt;span class=&quot;error&quot;&gt;&amp;#91;3 3 4&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;2 1&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;a&amp;quot;&amp;#93;&lt;/span&gt;) looks better than (reduce into #{} [&lt;span class=&quot;error&quot;&gt;&amp;#91;3 3 4&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;2 1&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;a&amp;quot;&amp;#93;&lt;/span&gt;])&lt;/p&gt;</description>
                <environment></environment>
            <key id="15854">CLJ-1115</key>
            <summary>multi arity into</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="yongqli">Yongqian Li</reporter>
                        <labels>
                    </labels>
                <created>Sun, 25 Nov 2012 07:50:56 -0600</created>
                <updated>Sun, 9 Dec 2012 07:39:55 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30051" author="halgari" created="Tue, 27 Nov 2012 11:25:46 -0600"  >&lt;p&gt;Seems to be a valid enhancement. I can&apos;t see any issues we&apos;d have with it. Vetted. &lt;/p&gt;</comment>
                    <comment id="30090" author="halgari" created="Thu, 29 Nov 2012 14:06:44 -0600"  >&lt;p&gt;Added patch &amp;amp; test. This patch retains the old performance characteristics of into in the case that there is only one collection argument. For example: (into [] &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;) . &lt;/p&gt;

&lt;p&gt;Since the multi-arity version will be slightly slower, I opted to provide it as a second body instead of unifying both into a single body. If someone has a problem with this, I can rewrite the patch. At least this way, into won&apos;t get slower. &lt;/p&gt;</comment>
                    <comment id="30195" author="richhickey" created="Sun, 9 Dec 2012 07:39:55 -0600"  >&lt;p&gt;This is a good example of an idea for an enhancement I haven&apos;t approved, and thus is not yet vetted.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11726" name="multi-arity-into.diff" size="3156" author="halgari" created="Thu, 29 Nov 2012 14:06:44 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1114] reify ignores :pre and :post</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1114</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;reify ignores :pre and :post assertions&lt;/p&gt;

&lt;p&gt;user=&amp;gt; ((reify clojure.lang.IFn (invoke &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; {:pre &lt;span class=&quot;error&quot;&gt;&amp;#91;false&amp;#93;&lt;/span&gt;} (println &quot;hello&quot;))))&lt;br/&gt;
hello&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; ((fn &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; {:pre &lt;span class=&quot;error&quot;&gt;&amp;#91;false&amp;#93;&lt;/span&gt;} (println &quot;hello&quot;)) 0)&lt;br/&gt;
AssertionError Assert failed: false  user/eval39/fn--40 (NO_SOURCE_FILE:13)&lt;/p&gt;

&lt;p&gt;Expected exception to be thrown&lt;/p&gt;</description>
                <environment></environment>
            <key id="15853">CLJ-1114</key>
            <summary>reify ignores :pre and :post</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="yongqli">Yongqian Li</reporter>
                        <labels>
                    </labels>
                <created>Sun, 25 Nov 2012 02:52:05 -0600</created>
                <updated>Sat, 15 Dec 2012 07:30:40 -0600</updated>
                    <resolved>Sat, 15 Dec 2012 07:30:40 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30031" author="stu" created="Sun, 25 Nov 2012 18:52:57 -0600"  >&lt;p&gt;reify is not documented to support these, so this should be classified as an enhancement&lt;/p&gt;</comment>
                    <comment id="30119" author="halgari" created="Fri, 30 Nov 2012 14:51:29 -0600"  >&lt;p&gt;Vetted. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1113] `reductions` reducer</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1113</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It would be nice to have a reducers implementation of the core `reductions` function.&lt;/p&gt;

&lt;p&gt;Initial implementation attempt included.  This version requires an initial reduction value parameter (vs using (f)) and includes that initial value in the final reduction.  I&apos;m not certain either of these decisions is optimal, but results in a function which most closely mimics `clojure.core/reductions`.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15848">CLJ-1113</key>
            <summary>`reductions` reducer</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="llasram">Marshall T. Vandegrift</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Nov 2012 08:22:37 -0600</created>
                <updated>Fri, 23 Nov 2012 08:22:37 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11703" name="reductions-reducer.diff" size="2172" author="llasram" created="Fri, 23 Nov 2012 08:22:37 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1112] Var *loading-verbosely* should initialize from a JVM system property</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1112</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I often find myself adding :verbose to a (require) or (use) clause of my (ns) in order to debug problems (especially macros, or bad namespace declarations). It would be very nice if I could define a JVM system property (say -Dclojure.load-verbosely=true) to default &lt;b&gt;loading-verbosely&lt;/b&gt; to true for a REPL session, or as part of a build. &lt;/p&gt;

&lt;p&gt;Sometimes I just like to see that namespaces load as a measure of progress, when starting an application, or when running a set of tests.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15845">CLJ-1112</key>
            <summary>Var *loading-verbosely* should initialize from a JVM system property</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hlewisship">Howard Lewis Ship</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Wed, 21 Nov 2012 13:19:20 -0600</created>
                <updated>Thu, 22 Nov 2012 02:14:32 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30006" author="tsdh" created="Thu, 22 Nov 2012 02:12:02 -0600"  >&lt;p&gt;This patch implements the suggested feature.&lt;/p&gt;

&lt;p&gt;The new system property is called &lt;tt&gt;clojure.core.loading-verbosely&lt;/tt&gt; in analogy to the existing &lt;tt&gt;clojure.compile.warn-on-reflection&lt;/tt&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11697" name="0001-Allow-setting-loading-verbosely-by-system-property.patch" size="1456" author="tsdh" created="Thu, 22 Nov 2012 02:12:02 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1111] Loops returning primtives are boxed even in return position</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1111</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Reported here: &lt;a href=&quot;https://groups.google.com/d/topic/clojure/atoFzbyuyos/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/atoFzbyuyos/discussion&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defn first-bit?
  {:inline (fn [n] `(== 1 (clojure.lang.Numbers/and ~n, 1)) )}
  [^long n]
  (== 1 (clojure.lang.Numbers/and n, 1)))

(defn exp-int
  ^double [^double x, ^long c]
  (loop [result 1.0, factor x, c c]
    (if (&amp;gt; c 0)
        (recur
         (if (first-bit? c)
           (* result factor)
           result),
         (* factor factor),
         (bit-shift-right c 1))
      result)))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Last lines of the Java bytecode of `exp-int`:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;59 dload 5;               /* result */
61 invokestatic 40;       /* java.lang.Double java.lang.Double.valueOf(double c) */
64 checkcast 85;          /* java.lang.Number */
67 invokevirtual 89;      /* double doubleValue() */
70 dreturn;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The compiler doesn&apos;t currently infer the primitive type as soon as there is a recur:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(use &apos;[clojure.contrib.repl-utils :only [expression-info]])
(expression-info &apos;(loop [a 1] a))
;=&amp;gt; {:class long, :primitive? true}
(expression-info &apos;(loop [a 1] (if true a (recur a)))
;=&amp;gt; nil
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Patch attached.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15841">CLJ-1111</key>
            <summary>Loops returning primtives are boxed even in return position</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="cgrand">Christophe Grand</assignee>
                                <reporter username="cgrand">Christophe Grand</reporter>
                        <labels>
                    </labels>
                <created>Wed, 21 Nov 2012 05:17:11 -0600</created>
                <updated>Sat, 22 Dec 2012 09:53:50 -0600</updated>
                    <resolved>Sat, 22 Dec 2012 09:53:50 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30033" author="stu" created="Sun, 25 Nov 2012 19:12:19 -0600"  >&lt;p&gt;Tests pass, code looks reasonable. Would appreciate additional review.&lt;/p&gt;</comment>
                    <comment id="30036" author="halgari" created="Mon, 26 Nov 2012 10:59:59 -0600"  >&lt;p&gt;Tests also pass here. Looked through the code and played with a patched version of Clojure. I can&apos;t see a problem with it. &lt;/p&gt;</comment>
                    <comment id="30046" author="cgrand" created="Tue, 27 Nov 2012 04:40:05 -0600"  >&lt;p&gt;FYI, gvec.clj has two loops which return primitives and thus was formerly boxed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11693" name="prim-loop.diff" size="3083" author="cgrand" created="Wed, 21 Nov 2012 05:17:11 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1110] let-&gt; needs improvement</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1110</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The function clojure.core/let-&amp;gt; is suboptimal in a few regards:&lt;br/&gt;
  1. It&apos;s name lends you to believe it is &quot;let-like&quot;, but it is not - it does not take a binding form, and its arguments are &apos;backwards&apos;&lt;br/&gt;
  2. It&apos;s docstring doesn&apos;t make clear that it is intended for use solely in a threading-macro expression&lt;br/&gt;
  3. It arbitrarily does not support destructuring, where it easily could.&lt;/p&gt;

&lt;p&gt;Possible solutions:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;rename it (e.g. to &quot;bind-&amp;gt;&quot;) to make clear it is not let-like&lt;/li&gt;
	&lt;li&gt;allow destructuring of the &apos;name&apos; parameter&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Google groups discussion: &lt;a href=&quot;https://groups.google.com/d/topic/clojure/67JQ7xSUOM4/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/67JQ7xSUOM4/discussion&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15839">CLJ-1110</key>
            <summary>let-&gt; needs improvement</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="alexnixon">Alex Nixon</reporter>
                        <labels>
                    </labels>
                <created>Tue, 20 Nov 2012 09:08:00 -0600</created>
                <updated>Tue, 11 Dec 2012 01:03:39 -0600</updated>
                    <resolved>Thu, 29 Nov 2012 08:08:45 -0600</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30210" author="yongqli" created="Tue, 11 Dec 2012 00:22:11 -0600"  >&lt;p&gt;Has it been decided whether as-&amp;gt; supports de-structuring or not? Right now it is inconsistent.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(as-&amp;gt; [0 1]
      [a b]
  [(inc a) (inc b)])

 =&amp;gt; [1 2]



(as-&amp;gt; {:a 0 :b 1}
      {:keys [a b]}
  {:a (inc a) :b (inc b)})

 =&amp;gt; {:keys [1 2]}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30211" author="yongqli" created="Tue, 11 Dec 2012 00:50:08 -0600"  >&lt;p&gt;Also, what about changing the name to &lt;del&gt;&amp;gt;as? -&amp;gt;as reads like &quot;pipeline as name&quot;, whereas as&lt;/del&gt;&amp;gt; implies that you are starting a new pipeline.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(-&amp;gt; 0
  (-&amp;gt;as name 
    (...))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Makes it clearer that you are consuming a pipeline and the expressions within -&amp;gt;as are no longer being influenced by -&amp;gt;.&lt;/p&gt;</comment>
                    <comment id="30212" author="yongqli" created="Tue, 11 Dec 2012 01:03:39 -0600"  >&lt;p&gt;Has the addition of -&amp;gt;&amp;gt;as been considered? That way you can use it inside a -&amp;gt;&amp;gt; like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(-&amp;gt;&amp;gt; a 
  (-&amp;gt;&amp;gt;as name
    (...)))

(-&amp;gt; a 
  (-&amp;gt;as name
    (...)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The signature would be &lt;span class=&quot;error&quot;&gt;&amp;#91;name forms init-expr&amp;#93;&lt;/span&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1109] Oracle Java 5 fails to run tests when building Clojure</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1109</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This is due to the way that reducers.clj currently handles the ForkJoin library.&lt;/p&gt;</description>
                <environment>Oracle Java 1.5.0_22, at least</environment>
            <key id="15837">CLJ-1109</key>
            <summary>Oracle Java 5 fails to run tests when building Clojure</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Mon, 19 Nov 2012 15:48:53 -0600</created>
                <updated>Sat, 15 Dec 2012 07:33:44 -0600</updated>
                    <resolved>Sat, 15 Dec 2012 07:33:44 -0600</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29981" author="jafingerhut" created="Mon, 19 Nov 2012 15:50:51 -0600"  >&lt;p&gt;Patch patch-enable-java-5-to-pass-tests-v1.txt dated Nov 19 2012 enables at least Oracle Java 1.5.0_22 to build and pass all tests in latest master.&lt;/p&gt;

&lt;p&gt;No, tt doesn&apos;t implement a ForkJoin library.  It simply declares some Clojure fj functions to throw an exception if they are called.  In today&apos;s Clojure tests they never are.&lt;/p&gt;</comment>
                    <comment id="29986" author="jafingerhut" created="Tue, 20 Nov 2012 15:45:00 -0600"  >&lt;p&gt;Updated patch with proper name and email address.&lt;/p&gt;</comment>
                    <comment id="30121" author="halgari" created="Fri, 30 Nov 2012 15:05:09 -0600"  >&lt;p&gt;IMO, more tests are always good. Vetted.&lt;/p&gt;</comment>
                    <comment id="30234" author="richhickey" created="Sat, 15 Dec 2012 07:33:34 -0600"  >&lt;p&gt;This is the wrong approach to this problem. A better approach is to make reducers work even if no fj support is present by simply defining fold as sequential reduce in that case.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11690" name="patch-enable-java-5-to-pass-tests-v1.txt" size="2729" author="jafingerhut" created="Tue, 20 Nov 2012 15:45:00 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1108] Allow to specify an Executor instance to be used with future-call</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1108</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This adds an arity to future-call that expects a java.util.concurrent/ExecutorService instance to be used instead of clojure.lang.Agent/soloExecutor. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15830">CLJ-1108</key>
            <summary>Allow to specify an Executor instance to be used with future-call</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mpenet">Max Penet</reporter>
                        <labels>
                    </labels>
                <created>Sun, 18 Nov 2012 06:32:18 -0600</created>
                <updated>Thu, 27 Dec 2012 02:25:43 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30328" author="jafingerhut" created="Wed, 26 Dec 2012 16:50:58 -0600"  >&lt;p&gt;Rich Hickey committed a change on Dec 21, 2012 to the future-call function that made the patch bac37b91230d8e4ab3a1e6042a6e8c4b7e9cbf53.patch dated Nov 18 2012 no longer apply cleanly.&lt;/p&gt;

&lt;p&gt;clj-1108-enhance-future-call-patch-v2.txt dated Dec 26 2012 is identical to that earlier patch, except it has been updated to apply cleanly to the latest master.&lt;/p&gt;

&lt;p&gt;It would be best if Max Penet, author of the earlier patch, could verify I&apos;ve merged his patch to the latest Clojure master correctly.&lt;/p&gt;</comment>
                    <comment id="30330" author="mpenet" created="Thu, 27 Dec 2012 02:25:43 -0600"  >&lt;p&gt;It&apos;s verified, it applies correctly to the latest master 00978c76edfe4796bd6ebff3a82182e235211ed0 .&lt;/p&gt;

&lt;p&gt;Thanks Andy. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11685" name="bac37b91230d8e4ab3a1e6042a6e8c4b7e9cbf53.patch" size="3316" author="mpenet" created="Sun, 18 Nov 2012 06:32:18 -0600" />
                    <attachment id="11779" name="clj-1108-enhance-future-call-patch-v2.txt" size="2953" author="jafingerhut" created="Wed, 26 Dec 2012 16:50:58 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1107] &apos;get&apos; should throw exception on non-Associative argument</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1107</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The implementation of clojure.core/get returns null if its argument is not a valid associative collection. However, calling &apos;get&apos; on something which is neither nil nor an Associative collection is almost certainly a bug, and should be indicated by an exception.&lt;/p&gt;

&lt;p&gt;This behavior can obscure common programmer errors such as:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def a (atom {:a 1 :b 2})

(:foo a)   ; forgot to deref a
;;=&amp;gt; nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-932&quot; title=&quot;contains? should throw exception on non-keyed collections&quot;&gt;&lt;del&gt;CLJ-932&lt;/del&gt;&lt;/a&gt; was accepted as a similar enhancement to &apos;clojure.core/contains?&apos;&lt;/p&gt;

&lt;p&gt;Attached patch 0001 throws an IllegalArgumentException as the fall-through case of RT.getFrom.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15823">CLJ-1107</key>
            <summary>&apos;get&apos; should throw exception on non-Associative argument</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 Nov 2012 13:20:33 -0600</created>
                <updated>Tue, 13 Nov 2012 13:57:31 -0600</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11672" name="0001-CLJ-1107-Throw-exception-for-get-called-on-unsupport.patch" size="3204" author="stuart.sierra" created="Tue, 13 Nov 2012 13:57:31 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1106] Broken equality for sets</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1106</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Equality for sets is not consistent with other persistent collections when the hashCode differs:&lt;/p&gt;

&lt;p&gt;(= {(Integer. -1) :foo} {(Long. -1) :foo})&lt;br/&gt;
=&amp;gt; true&lt;/p&gt;

&lt;p&gt;(= &lt;span class=&quot;error&quot;&gt;&amp;#91;(Integer. -1)&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;(Long. -1)&amp;#93;&lt;/span&gt;)&lt;br/&gt;
=&amp;gt; true&lt;/p&gt;

&lt;p&gt;(= #{(Integer. -1)} #{(Long. -1)})&lt;br/&gt;
=&amp;gt; false&lt;/p&gt;

&lt;p&gt;Attached is what I believe to be a basic fix. It removes a hashCode check from APersistentSet.equals. A similar check was removed from APersistentMap in the following commit:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&quot;&gt;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this patch, set equality works as expected and all tests pass.&lt;/p&gt;

&lt;p&gt;My understanding of the implications of this change are limited, so someone more knowledgeable would need to chime in about its correctness.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15818">CLJ-1106</key>
            <summary>Broken equality for sets</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="aaron">Aaron Bedra</assignee>
                                <reporter username="jkkramer">Justin Kramer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 9 Nov 2012 09:42:48 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 8 Feb 2013 07:31:35 -0600</resolved>
                            <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>6</watches>
                        <comments>
                    <comment id="29926" author="jafingerhut" created="Fri, 9 Nov 2012 09:48:32 -0600"  >&lt;p&gt;Can you add some unit tests that fail with the current code but succeed with the change?&lt;/p&gt;</comment>
                    <comment id="29927" author="jkkramer" created="Fri, 9 Nov 2012 10:24:55 -0600"  >&lt;p&gt;Revised patch with unit test that fails in master and succeeds with patch&lt;/p&gt;</comment>
                    <comment id="30150" author="halgari" created="Mon, 3 Dec 2012 09:04:02 -0600"  >&lt;p&gt;vetting&lt;/p&gt;</comment>
                    <comment id="30508" author="gfredericks" created="Tue, 29 Jan 2013 17:32:14 -0600"  >&lt;p&gt;This came up when we were trying to diff two datasets by putting them in sets and comparing. We had Integers because they came back from JDBC that way.&lt;/p&gt;</comment>
                    <comment id="30509" author="aaron" created="Tue, 29 Jan 2013 17:35:36 -0600"  >&lt;p&gt;I&apos;m going to take a look and try to get this shipped. It hit us and I would love to to see it in 1.5&lt;/p&gt;</comment>
                    <comment id="30510" author="pjstadig" created="Tue, 29 Jan 2013 19:14:37 -0600"  >&lt;p&gt;I applied the patch on master (ca465d6d) and it applied cleanly and fixes the issue.&lt;/p&gt;</comment>
                    <comment id="30515" author="bjeanes" created="Wed, 30 Jan 2013 11:19:41 -0600"  >&lt;p&gt;Instead of removing &lt;tt&gt;m.hashCode() != hashCode()&lt;/tt&gt;, perhaps we should use `Util.hasheq()` instead. It already seems to special case numbers (&lt;a href=&quot;https://github.com/clojure/clojure/blob/f48d024e97/src/jvm/clojure/lang/Util.java#L164-L172&quot;&gt;https://github.com/clojure/clojure/blob/f48d024e97/src/jvm/clojure/lang/Util.java#L164-L172&lt;/a&gt;) and won&apos;t have the potential performance impact that skipping hashCode checks could bring.&lt;/p&gt;</comment>
                    <comment id="30516" author="bjeanes" created="Wed, 30 Jan 2013 11:39:30 -0600"  >&lt;p&gt;Attaching a patch with an alternate fix for this issue that does not skip hashCode checking.&lt;/p&gt;

&lt;p&gt;It passes all existing tests and fixes this issue.&lt;/p&gt;

&lt;p&gt;I want to benchmark the difference, too.&lt;/p&gt;</comment>
                    <comment id="30517" author="bjeanes" created="Wed, 30 Jan 2013 13:32:08 -0600"  >&lt;p&gt;On further thought and comparison to &lt;tt&gt;APersistentMap&lt;/tt&gt;, I&apos;m not sure if that&apos;s the best use of &lt;tt&gt;Util.hasheq()&lt;/tt&gt;. I can&apos;t find good reference on the semantic differences and am not familiar enough with the Clojure source to infer it, yet.&lt;/p&gt;</comment>
                    <comment id="30529" author="aaron" created="Sat, 2 Feb 2013 12:33:12 -0600"  >&lt;p&gt;Bo, I don&apos;t see you listed on the contributors list. Did you send in a CA?&lt;/p&gt;</comment>
                    <comment id="30530" author="aaron" created="Sat, 2 Feb 2013 13:36:27 -0600"  >&lt;p&gt;Both of the patches above are not complete. APersistentSet equiv calls equals. APersistentMap has two separate ways of handling this. This is the path that the fix should take.&lt;/p&gt;</comment>
                    <comment id="30531" author="aaron" created="Sat, 2 Feb 2013 14:37:29 -0600"  >&lt;p&gt;This patch addresses the difference between equals and equiv.&lt;/p&gt;</comment>
                    <comment id="30549" author="stu" created="Mon, 4 Feb 2013 21:55:56 -0600"  >&lt;p&gt;The Set equality code currently in Clojure uses .hashCode to quickly bail out of comparisons in both .equals and .equiv. This feels wrong since .equals and .equiv presume different hashes. The map equality code avoids the problem by not checking any hash.&lt;/p&gt;

&lt;p&gt;Aaron&apos;s 2/13 patch makes set equality work like map equality, not checking the hash. (I think a much shorter patch that accomplishes the same thing merely drops the call to hash.)&lt;/p&gt;

&lt;p&gt;It seems to me a separate problem that both hash and set are broken for Java .equals rules, because of the equiv-based handling of their keys.&lt;/p&gt;

&lt;p&gt;I think this needs more consideration.&lt;/p&gt;</comment>
                    <comment id="30552" author="stu" created="Tue, 5 Feb 2013 08:57:10 -0600"  >&lt;p&gt;Notes from discussion with Rich:&lt;/p&gt;

&lt;p&gt;1. Aaron&apos;s 2/2/13 patch, which mimics map logic into set, is the preferred approach.&lt;/p&gt;

&lt;p&gt;2. The broader issue I was worried about is the semantic collision between Map&apos;s containsKey and Associative&apos;s containsKey. This is out of scope here, and perhaps ever.&lt;/p&gt;</comment>
                    <comment id="30553" author="aaron" created="Tue, 5 Feb 2013 09:38:48 -0600"  >&lt;p&gt;Any chance this will make 1.5?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11825" name="0001-CLJ-1106-Use-Util.hasheq-in-hashCode-for-persistent-.patch" size="772" author="bjeanes" created="Wed, 30 Jan 2013 11:39:30 -0600" />
                    <attachment id="11829" name="0001-Fixing-set-equality.patch" size="2640" author="aaron" created="Sat, 2 Feb 2013 14:37:29 -0600" />
                    <attachment id="11669" name="setequals.diff" size="1672" author="jkkramer" created="Fri, 9 Nov 2012 10:24:55 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1105] defrecord classes implement IPersistentCollection but not .empty, clojure.walk assumes collections support empty</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1105</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using clojure.walk functions fails surprisingly for data containing records defined with defrecord:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defrecord Foo &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.Foo&lt;br/&gt;
user=&amp;gt; (def f (Foo. :x))&lt;br/&gt;
#&apos;user/f&lt;br/&gt;
user=&amp;gt; (use &apos;clojure.walk)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (postwalk identity {:foo f})&lt;br/&gt;
UnsupportedOperationException Can&apos;t create empty: user.Foo  user.Foo (NO_SOURCE_FILE:1)&lt;/p&gt;

&lt;p&gt;This seems to be because clojure.walk/walk guards a call to (empty form) with a (coll? form) check. The check succeeds because records implement IPersistentCollection, but (empty form) throws an exception. This looks to me like a bug in clojure.walk (it should check records separately and either treat them as atomic or implement a way of walking through them) but perhaps it is a sign of some unclarity in the contract of collections.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15817">CLJ-1105</key>
            <summary>defrecord classes implement IPersistentCollection but not .empty, clojure.walk assumes collections support empty</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jks">Jouni K. Sepp&#228;nen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 8 Nov 2012 08:20:52 -0600</created>
                <updated>Fri, 12 Apr 2013 09:42:00 -0500</updated>
                                    <version>Release 1.4</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29912" author="bronsa" created="Thu, 8 Nov 2012 14:35:42 -0600"  >&lt;p&gt;maybe clojure should follow clojurescript&apos;s footsteps and move empty out of IPersistentCollection and create an&lt;br/&gt;
interface IEmptyableCollection extends IPersistentCollection {
  IEmptyableCollection empty();
}&lt;/p&gt;</comment>
                    <comment id="30029" author="stu" created="Sun, 25 Nov 2012 18:39:22 -0600"  >&lt;p&gt;Can whoever claims this please consider walk&apos;s behavior in the face of all different collection types? I think it also fails with Java collections. &lt;/p&gt;

&lt;p&gt;Also, the collection partitioning code in clojure.data may be of use.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1104] Concurrent with-redefs do not unwind properly, leaving a var permanently changed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1104</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;On 1.4 and latest master:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (defn ten [] 10)&lt;br/&gt;
#&apos;user/ten&lt;br/&gt;
user&amp;gt; (doall (pmap #(with-redefs [ten (fn [] %)] (ten)) (range 20 100)))&lt;br/&gt;
(20 21 22 23 24 25 34 27 28 29 30 31 32 33 34 35 36 37 38 39 39 35 42 43 44 45 48 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 79 87 88 89 90 91 92 93 94 95 97 92 98 99)&lt;br/&gt;
user&amp;gt; (ten)&lt;br/&gt;
79&lt;/p&gt;

&lt;p&gt;Not sure if this is a bug per se, but the doc doesn&apos;t mention lack of concurrency safety and my expectation was that the original value would always be restored after any (arbitrarily interleaved) sequence of with-redefs calls. &lt;/p&gt;</description>
                <environment>Mac OS, Java 6</environment>
            <key id="15816">CLJ-1104</key>
            <summary>Concurrent with-redefs do not unwind properly, leaving a var permanently changed</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Wed, 7 Nov 2012 17:46:19 -0600</created>
                <updated>Fri, 21 Dec 2012 23:05:10 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Approved Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29907" author="timmc" created="Wed, 7 Nov 2012 20:50:49 -0600"  >&lt;p&gt;The with-redefs doc (v1.4.0) says &quot;These temporary changes will be visible in all threads.&quot; That sounds non-thread-safe to me.&lt;/p&gt;

&lt;p&gt;In general, changes to var root bindings are not thread safe.&lt;/p&gt;</comment>
                    <comment id="29908" author="bendlas" created="Thu, 8 Nov 2012 09:17:31 -0600"  >&lt;p&gt;As I understand it, with-redefs is mainly used in test suites to mock out vars. It was introduced when vars became static by default and a lot of testsuites had been using binding for mocking. Maybe the docstring should be amended with something along the lines of: When using this you have to ensure that only a single thread is interacting with redef&apos;d vars.&lt;/p&gt;</comment>
                    <comment id="30030" author="stu" created="Sun, 25 Nov 2012 18:41:17 -0600"  >&lt;p&gt;Behavior find as is, doc string change would be fine.&lt;/p&gt;</comment>
                    <comment id="30032" author="jafingerhut" created="Sun, 25 Nov 2012 18:57:16 -0600"  >&lt;p&gt;Patch clj-1104-doc-unsafety-of-concurrent-with-redefs-v1.txt dated Nov 25 2012 updates doc string of with-redefs to make it clear that concurrent use is unsafe.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11708" name="clj-1104-doc-unsafety-of-concurrent-with-redefs-v1.txt" size="1091" author="jafingerhut" created="Sun, 25 Nov 2012 18:57:16 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1103] Make conj assoc dissoc and transient versions handle args similarly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1103</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A discussion came up in the Clojure Google group about conj giving an error when taking only a coll as an argument, as opposed to disj which works for this case:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/Z9mFxsTYTqQ&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/Z9mFxsTYTqQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I looked through the rest of the code for similar cases, and found that conj! assoc assoc! and disj! also had the same property, and there were some other differences between them in how different numbers of arguments were handled, such as:&lt;/p&gt;

&lt;p&gt;conj handles an arbitrary number of arguments, but conj! does not.&lt;br/&gt;
assoc checks for a final key with no value specified (&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1052&quot; title=&quot;assoc should throw exception if missing val for last key&quot;&gt;&lt;del&gt;CLJ-1052&lt;/del&gt;&lt;/a&gt;), but assoc! did not.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15815">CLJ-1103</key>
            <summary>Make conj assoc dissoc and transient versions handle args similarly</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Nov 2012 18:00:32 -0600</created>
                <updated>Sun, 9 Dec 2012 17:30:00 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29901" author="jafingerhut" created="Sun, 4 Nov 2012 18:04:54 -0600"  >&lt;p&gt;clj-1103-make-conj-assoc-dissoc-handle-args-similarly-v1.txt dated Nov 4 2012 makes conj conj! assoc assoc! dissoc dissoc! handle args similarly to each other.&lt;/p&gt;</comment>
                    <comment id="30197" author="bbloom" created="Sun, 9 Dec 2012 17:30:00 -0600"  >&lt;p&gt;I too ran into this and started an additional discussion here: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/wL5hllfhw4M/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/wL5hllfhw4M/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In particular, I don&apos;t buy the argument that (into coll xs) is sufficient, since into implies conj and there isn&apos;t an terse and idiomatic way to write (into map (parition 2 keyvals))&lt;/p&gt;

&lt;p&gt;So +1 from me&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11663" name="clj-1103-make-conj-assoc-dissoc-handle-args-similarly-v1.txt" size="8667" author="jafingerhut" created="Sun, 4 Nov 2012 18:04:54 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1102] Better handling of exceptions with empty stack traces</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1102</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I don&apos;t know what I did to cause some exceptions to be thrown while running Clojure tests that return a length 0 array from (.getStackTrace throwable), but according to the Java docs this is legal.  I searched all places in the Clojure code that call .getStackTrace and found two that don&apos;t handle this correctly, one of which causes an ArrayOutOfBoundsException (that is the one I found during my testing).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15814">CLJ-1102</key>
            <summary>Better handling of exceptions with empty stack traces</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Nov 2012 17:03:47 -0600</created>
                <updated>Fri, 30 Nov 2012 14:57:46 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29900" author="jafingerhut" created="Sun, 4 Nov 2012 17:07:36 -0600"  >&lt;p&gt;clj-1102-improve-empty-stack-trace-handling-v1.txt dated Nov 4 2012 improves the handling of .getStackTrace returning a length 0 array in two places.  I checked all other places .getStackTrace was called and they seem to already handle this case gracefully.&lt;/p&gt;</comment>
                    <comment id="30120" author="halgari" created="Fri, 30 Nov 2012 14:57:37 -0600"  >&lt;p&gt;Vetting.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11662" name="clj-1102-improve-empty-stack-trace-handling-v1.txt" size="1791" author="jafingerhut" created="Sun, 4 Nov 2012 17:07:36 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1101] *default-data-reader-fn* should be set!-able in REPL</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1101</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-927&quot; title=&quot;default tagged literal reader&quot;&gt;&lt;del&gt;CLJ-927&lt;/del&gt;&lt;/a&gt;, Nicola Mometto pointed out that &amp;#42;default-data-reader-fn* should be set!-able.  The fix needs to be added to clojure.main/with-bindings.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15813">CLJ-1101</key>
            <summary>*default-data-reader-fn* should be set!-able in REPL</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Sat, 3 Nov 2012 09:28:36 -0500</created>
                <updated>Sat, 13 Apr 2013 09:36:37 -0500</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29898" author="steveminer@gmail.com" created="Sat, 3 Nov 2012 09:32:36 -0500"  >&lt;p&gt;Add &amp;#42;default-data-reader-fn* to the special bindings in main.clj so that it is set!-able in the REPL&lt;/p&gt;</comment>
                    <comment id="30155" author="steveminer@gmail.com" created="Mon, 3 Dec 2012 10:07:37 -0600"  >&lt;p&gt;This is a one-liner that makes &amp;#42;default-data-reader-fn* convenient to use in the REPL, similar to how &amp;#42;data-readers* works.  I&apos;d like to have this fix in Clojure 1.5.&lt;/p&gt;</comment>
                    <comment id="30750" author="steveminer@gmail.com" created="Tue, 12 Mar 2013 20:10:02 -0500"  >&lt;p&gt;work-around for REPL:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(alter-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;-root #&apos;clojure.core/*&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;-data-reader-fn* (constantly my-&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;-reader))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11659" name="CLJ-1101-make-default-data-reader-fn-set-able-in-REPL.patch" size="850" author="steveminer@gmail.com" created="Sat, 3 Nov 2012 09:32:36 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10004">Screened</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1100] Reader literals cannot contain periods</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1100</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The LispReader tries to read a record instead of a literal if the tag contains periods:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L1171&quot;&gt;https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L1171&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which effectively means that reader tags cannot contain periods.&lt;br/&gt;
The EDN spec is unclear on this: &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;edn supports extensibility through a simple mechanism. # followed immediately by a symbol starting with an alphabetic character indicates that that symbol is a tag.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;(issue opened: &lt;a href=&quot;https://github.com/edn-format/edn/issues/39&quot;&gt;https://github.com/edn-format/edn/issues/39&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;If periods are allowed, then the LispReader should first check to see if the tag is in &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt; and only then if not try to initialize a Java class.&lt;/p&gt;

&lt;p&gt;I&apos;m happy to write the patch if this behavior is what is desired.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15812">CLJ-1100</key>
            <summary>Reader literals cannot contain periods</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="lynaghk">Kevin Lynagh</reporter>
                        <labels>
                        <label>reader</label>
                    </labels>
                <created>Fri, 2 Nov 2012 23:57:22 -0500</created>
                <updated>Thu, 14 Feb 2013 15:04:53 -0600</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29904" author="steveminer@gmail.com" created="Tue, 6 Nov 2012 09:41:44 -0600"  >&lt;p&gt;The suggested patch (clj-1100-reader-literal-periods.patch) will break reading records when &amp;#42;default-data-reader-fn* is set.  Try adding a test like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest tags-containing-periods-with-&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;
      ;; we need a predefined record &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; test so we (mis)use clojure.reflect.Field &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; convenience
      (let [v &lt;span class=&quot;code-quote&quot;&gt;&quot;#clojure.reflect.Field{:name \&quot;&lt;/span&gt;fake\&lt;span class=&quot;code-quote&quot;&gt;&quot; :type :fake :declaring-class \&quot;&lt;/span&gt;Fake\&lt;span class=&quot;code-quote&quot;&gt;&quot; :flags nil}&quot;&lt;/span&gt;]
        (binding [*&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;-data-reader-fn* nil]
          (is (= (read-string v) #clojure.reflect.Field{:name &lt;span class=&quot;code-quote&quot;&gt;&quot;fake&quot;&lt;/span&gt; :type :fake :declaring-class &lt;span class=&quot;code-quote&quot;&gt;&quot;Fake&quot;&lt;/span&gt; :flags nil})))
        (binding [*&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;-data-reader-fn* (fn [tag val] (assoc val :meaning 42))]
          (is (= (read-string v) #clojure.reflect.Field{:name &lt;span class=&quot;code-quote&quot;&gt;&quot;fake&quot;&lt;/span&gt; :type :fake :declaring-class &lt;span class=&quot;code-quote&quot;&gt;&quot;Fake&quot;&lt;/span&gt; :flags nil})))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30085" author="richhickey" created="Thu, 29 Nov 2012 09:36:46 -0600"  >&lt;p&gt;The problem assessment is ok, but the resolution approach may not be. What happens should be based not upon what is in data-readers but whether or not the name names a class.&lt;/p&gt;

&lt;p&gt;Is the intent here to allow readers to circumvent records? I&apos;m not in favor of that.&lt;/p&gt;</comment>
                    <comment id="30098" author="steveminer@gmail.com" created="Thu, 29 Nov 2012 16:01:00 -0600"  >&lt;p&gt;New patch following Rich&apos;s comments.  The decision to read a record is now based on the symbol containing periods and not having a namespace.  Otherwise, it is considered a data reader tag.  User&lt;br/&gt;
defined tags are required to be qualified but they may now have periods in the name.  Tests added to show that&lt;br/&gt;
data readers cannot override record classes.  Note: Clojure-defined data reader tags may be unqualified, but they should not contain periods in order to avoid confusion with record classes.&lt;/p&gt;</comment>
                    <comment id="30100" author="steveminer@gmail.com" created="Thu, 29 Nov 2012 16:17:32 -0600"  >&lt;p&gt;I deleted my old patch and some comments referring to it to avoid confusion.&lt;/p&gt;

&lt;p&gt;In Clojure 1.5 beta 1, # followed by a qualified symbol with a period in the name is considered a record and causes an exception for the missing record class.  With the patch, only non-qualified symbols containing periods are considered records.  That allows user-defined qualified symbols with periods in their names to be used as data reader tags.&lt;/p&gt;</comment>
                    <comment id="30564" author="jafingerhut" created="Thu, 7 Feb 2013 09:05:09 -0600"  >&lt;p&gt;clj-1100-periods-in-data-reader-tags-patch-v2.txt dated Feb 7 2013 is identical to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1100&quot; title=&quot;Reader literals cannot contain periods&quot;&gt;CLJ-1100&lt;/a&gt;-periods-in-data-reader-tags.patch dated Nov 29 2012, except it applies cleanly to latest master.  The only change appears to be in some white space in the context lines.&lt;/p&gt;</comment>
                    <comment id="30567" author="jafingerhut" created="Thu, 7 Feb 2013 12:53:25 -0600"  >&lt;p&gt;I&apos;ve removed clj-1100-periods-in-data-reader-tags-patch-v2.txt mentioned in the previous comment, because I learned that &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1100&quot; title=&quot;Reader literals cannot contain periods&quot;&gt;CLJ-1100&lt;/a&gt;-periods-in-data-reader-tags.patch dated Nov 29 2012 applies cleanly to latest master and passes all tests if you use this command to apply it.&lt;/p&gt;

&lt;p&gt;% git am --keep-cr -s --ignore-whitespace &amp;lt; &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1100&quot; title=&quot;Reader literals cannot contain periods&quot;&gt;CLJ-1100&lt;/a&gt;-periods-in-data-reader-tags.patch&lt;/p&gt;

&lt;p&gt;I&apos;ve already updated the JIRA workflow and screening patches wiki pages to mention this --ignore-whitespace option.&lt;/p&gt;</comment>
                    <comment id="30585" author="jafingerhut" created="Wed, 13 Feb 2013 11:31:03 -0600"  >&lt;p&gt;Both of the current patches, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1100&quot; title=&quot;Reader literals cannot contain periods&quot;&gt;CLJ-1100&lt;/a&gt;-periods-in-data-reader-tags.patch dated Nov 29 2012, and clj-1100-reader-literal-periods.patch dated Nov 6 2012, fail to apply cleanly to latest master (1.5.0-RC15) as of today, although they did last week.  Given all of the changes around read / read-string and edn recently, they should probably be evaluated by their authors to see how they should be updated.&lt;/p&gt;</comment>
                    <comment id="30600" author="steveminer@gmail.com" created="Thu, 14 Feb 2013 12:23:26 -0600"  >&lt;p&gt;I deleted my patch: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1100&quot; title=&quot;Reader literals cannot contain periods&quot;&gt;CLJ-1100&lt;/a&gt;-periods-in-data-reader-tags.patch.  clj-1100-reader-literal-periods.patch is clearly wrong, but the original author or an administrator has to delete that.&lt;/p&gt;</comment>
                    <comment id="30602" author="lynaghk" created="Thu, 14 Feb 2013 13:28:04 -0600"  >&lt;p&gt;I cannot figure out how to remove my attachment (clj-1100-reader-literal-periods.patch) in JIRA.&lt;/p&gt;</comment>
                    <comment id="30603" author="steveminer@gmail.com" created="Thu, 14 Feb 2013 13:43:45 -0600"  >&lt;p&gt;Downarrow (popup) menu to the right of the &quot;Attachments&quot; section.  Choose &quot;manager attachments&quot;.&lt;/p&gt;</comment>
                    <comment id="30604" author="lynaghk" created="Thu, 14 Feb 2013 14:02:50 -0600"  >&lt;p&gt;Great, thanks Steve. Are you going to take another pass at this issue, or should I give it a go?&lt;/p&gt;</comment>
                    <comment id="30605" author="steveminer@gmail.com" created="Thu, 14 Feb 2013 15:04:53 -0600"  >&lt;p&gt;Kevin, I&apos;m not planning to work on this right now as 1.5 is pretty much done.  It might be worthwhile discussing the issue a bit on the dev mailing list before working on a patch, but that&apos;s up to you.  I think my approach was correct, although now changes would have to be applied to both LispReader and EdnReader.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1099] better error message when passing non-seq to seq</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1099</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Design discussion &lt;a href=&quot;http://dev.clojure.org/display/design/Better+Error+Messages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This patch improves Clojure&apos;s error message for a single common error: passing a non-seq where a seq is neede. More importantly, it is intended as a prototype for other similar improvements in the future.&lt;/p&gt;

&lt;p&gt;Error message before:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(cons 1 2)
=&amp;gt; IllegalArgumentException Don&apos;t know how to create ISeq from: java.lang.Long
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Error message after:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (cons 1 2)
ExceptionInfo Don&apos;t know how to create ISeq from: java.lang.Long
user=&amp;gt; (ex-data *e)
{:instance 2}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15809">CLJ-1099</key>
            <summary>better error message when passing non-seq to seq</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Thu, 1 Nov 2012 10:03:14 -0500</created>
                <updated>Fri, 12 Apr 2013 11:36:35 -0500</updated>
                                                    <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29932" author="michaelklishin" created="Mon, 12 Nov 2012 10:34:49 -0600"  >&lt;p&gt;Wouldn&apos;t it be better to make it read &quot;Don&apos;t know how to create ISeq from: 2 (java.lang.Long)&quot;? How many beginners will figure&lt;br/&gt;
out ex-data exists and how to use it?&lt;/p&gt;</comment>
                    <comment id="30946" author="stu" created="Fri, 12 Apr 2013 11:36:35 -0500"  >&lt;p&gt;Hi Michael,&lt;/p&gt;

&lt;p&gt;ex-info messages should not, in general, pr-str things into their bodies.  This raises the question of print-length and print-level in a place where the user doesn&apos;t have good control, while the whole point of ex-info is to be in the data business, not the string business. Users can control printing from ex-data any way they like.&lt;/p&gt;

&lt;p&gt;There are two possible ways to make beginners aware of ex-data: Tell them about it in one (or a few places) in docs, or in an infinite number of places saying &quot;This would have been useful here, but we didn&apos;t use it because you might not know about it.&quot;  I prefer the former.&lt;/p&gt;

&lt;p&gt;That said, I think it would be great to increase the visibility of ex-info and ex-data early on in documentation for beginners, and to make sure that things like exception printing in logs are flexible enough not to lose the benefits of ex-info.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11653" name="better-error-message-for-seq.patch" size="4724" author="stu" created="Thu, 1 Nov 2012 10:03:14 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1098] Extend CollFold and IKVReduce to nil</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1098</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, reduce-kv and fold throw when used on nil, because their respective protocols don&apos;t extend to nil. This seems strange, since Clojure tends to handle nils gracefully where possible, especially in places where collections are expected.&lt;/p&gt;

&lt;p&gt;See thread &lt;a href=&quot;https://groups.google.com/d/topic/clojure/tGI8sIKQoh0/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/tGI8sIKQoh0/discussion&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15808">CLJ-1098</key>
            <summary>Extend CollFold and IKVReduce to nil</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Wed, 31 Oct 2012 13:24:54 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 25 Jan 2013 07:40:32 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29882" author="bendlas" created="Wed, 31 Oct 2012 20:44:29 -0500"  >&lt;p&gt;Attached patch with tests&lt;/p&gt;</comment>
                    <comment id="30436" author="jafingerhut" created="Mon, 14 Jan 2013 11:04:24 -0600"  >&lt;p&gt;Another discussion thread: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/xPDDybYGvmc&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/xPDDybYGvmc&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11648" name="0001-CLJ-1098-Implement-IKVReduce-and-CollFold-for-nil.patch" size="1739" author="bendlas" created="Wed, 31 Oct 2012 20:44:29 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1097] node-seq for clojure.zip</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1097</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Many times it&apos;s easier to get to a zipper node via (first (filter pred ...)) instead of manually walking the tree via next/up/down. Other times it&apos;s easier to process certain nodes via filter &amp;amp; map instead of again, walking the tree. This patch provides a single function called node-seq that uses zip/next to generate a lazy-seq of nodes. Tests provide two examples.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15803">CLJ-1097</key>
            <summary>node-seq for clojure.zip</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="halgari">Timothy Baldridge</reporter>
                        <labels>
                        <label>clojure.zip</label>
                    </labels>
                <created>Mon, 29 Oct 2012 21:37:18 -0500</created>
                <updated>Mon, 29 Oct 2012 21:37:18 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11641" name="node-seq.diff" size="1571" author="halgari" created="Mon, 29 Oct 2012 21:37:18 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1096] Make destrucring emit direct keyword lookups</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1096</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently associative destructuring emits calls to get. The attached patch modify desctruture to emit direct keyword lookups when possible. &lt;/p&gt;

&lt;p&gt;Approved here &lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/MaYcHQck8VA/nauMus4mzPgJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/MaYcHQck8VA/nauMus4mzPgJ&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15801">CLJ-1096</key>
            <summary>Make destrucring emit direct keyword lookups</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cgrand">Christophe Grand</assignee>
                                <reporter username="cgrand">Christophe Grand</reporter>
                        <labels>
                    </labels>
                <created>Mon, 29 Oct 2012 08:05:45 -0500</created>
                <updated>Sat, 26 Jan 2013 08:15:49 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                                <attachments>
                    <attachment id="11639" name="desctructure-keyword-lookup.diff" size="1586" author="cgrand" created="Mon, 29 Oct 2012 08:05:45 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1095] Allow map-indexed to accept multiple collections (a la map)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1095</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Bring external interface of map-indexed in line with map. Existing usages of map-indexed unchanged both in implementation and interface.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;examples&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(map vector (range 10 20) (range 30 35)) ;=&amp;gt; ([10 30] [11 31] [12 32] [13 33] [14 34])
(map-indexed vector (range 10 20) (range 30 35)) ;=&amp;gt; ([0 10 30] [1 11 31] [2 12 32] [3 13 33] [4 14 34])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The attached patch is not necessarily the best implementation (I haven&apos;t benchmarked it or tried any alternatives yet) but hopefully enough to start a conversation about whether this is an addition that is warranted. I know I wished for this behavior a few weeks ago though I ended up finding another way.&lt;/p&gt;

&lt;p&gt;(I haven&apos;t sent my CA yet, but I have it signed and ready to send in the next few days)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15784">CLJ-1095</key>
            <summary>Allow map-indexed to accept multiple collections (a la map)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bjeanes">Bo Jeanes</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Oct 2012 16:30:01 -0500</created>
                <updated>Thu, 8 Nov 2012 14:58:13 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29802" author="aaron" created="Thu, 25 Oct 2012 17:11:09 -0500"  >&lt;p&gt;Can you add a test for the improved functionality?&lt;/p&gt;</comment>
                    <comment id="29803" author="bjeanes" created="Thu, 25 Oct 2012 17:20:56 -0500"  >&lt;p&gt;You bet. I tried to before submitting this but found no existing tests for map-indexed to expand upon. Given that, I decided to just start the conversation first. If you think this is a good addition, I&apos;ll find a place to stick the tests and add a new patch file.&lt;/p&gt;</comment>
                    <comment id="29804" author="bjeanes" created="Thu, 25 Oct 2012 20:05:14 -0500"  >&lt;p&gt;Add two unit tests for &lt;tt&gt;map-indexed&lt;/tt&gt;. One tests old behavior (single collection) and the second tests mapping across 3 collections. &lt;/p&gt;

&lt;p&gt;There were no existing tests for &lt;tt&gt;map-indexed&lt;/tt&gt; that I could see to expand upon (using &lt;tt&gt;git grep map-indexed src/clojure&lt;/tt&gt;)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11615" name="0001-map-indexed-accepts-multiple-collections.patch" size="2422" author="bjeanes" created="Thu, 25 Oct 2012 16:30:01 -0500" />
                    <attachment id="11616" name="0002-Add-test-for-multi-collection-map-indexed-fn.patch" size="924" author="bjeanes" created="Thu, 25 Oct 2012 20:05:14 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1094] Zero-arity versions of every-pred and some-fn</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1094</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This patch adds zero-arity versions of every-pred and some-fn with these semantics.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(every-pred) === (constantly true)
(some-fn)    === (constantly nil)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These variants are useful in situations like the following:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;;; compute-preds-for may return zero or many predicate fns
(let [preds (compute-preds-for something)]
  (filter (apply every-pred preds) some-coll))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15780">CLJ-1094</key>
            <summary>Zero-arity versions of every-pred and some-fn</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>patch</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 25 Oct 2012 07:08:28 -0500</created>
                <updated>Thu, 25 Oct 2012 07:12:35 -0500</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29799" author="tsdh" created="Thu, 25 Oct 2012 07:12:35 -0500"  >&lt;p&gt;This is the thread where Max Penet suggested to have 0-arity versions of the two fns:&lt;/p&gt;

&lt;p&gt;  &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/IRlN-4LH_U0&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/IRlN-4LH_U0&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11611" name="0001-Add-zero-arity-variants-for-every-pred-and-some-fn.patch" size="3462" author="tsdh" created="Thu, 25 Oct 2012 07:08:28 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1093] Empty record literals gets incorrectly evaluated to array-maps</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1093</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;before patch:&lt;br/&gt;
user=&amp;gt; (defrecord a &lt;span class=&quot;error&quot;&gt;&amp;#91;b&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.a&lt;br/&gt;
user=&amp;gt; #user.a{}&lt;br/&gt;
{}&lt;/p&gt;

&lt;p&gt;after patch:&lt;br/&gt;
user=&amp;gt; (defrecord a &lt;span class=&quot;error&quot;&gt;&amp;#91;b&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.a&lt;br/&gt;
user=&amp;gt; #user.a{}&lt;br/&gt;
#user.a{:b nil}&lt;/p&gt;</description>
                <environment></environment>
            <key id="15776">CLJ-1093</key>
            <summary>Empty record literals gets incorrectly evaluated to array-maps</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="4" iconUrl="http://dev.clojure.org/jira/images/icons/status_reopened.gif">Reopened</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="halgari">Timothy Baldridge</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Oct 2012 09:13:56 -0500</created>
                <updated>Wed, 13 Mar 2013 14:04:29 -0500</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30052" author="halgari" created="Tue, 27 Nov 2012 11:41:24 -0600"  >&lt;p&gt;Unable to reproduce this bug on latest version of master. Most likely fixed by some of the recent changes to data literal readers. &lt;/p&gt;

&lt;p&gt;Marking Not-Approved. &lt;/p&gt;</comment>
                    <comment id="30053" author="halgari" created="Tue, 27 Nov 2012 11:41:53 -0600"  >&lt;p&gt;Could not reproduce in master. &lt;/p&gt;</comment>
                    <comment id="30681" author="bronsa" created="Fri, 1 Mar 2013 13:23:09 -0600"  >&lt;p&gt;I just checked, and the problem still exists for records with no arguments:&lt;/p&gt;

&lt;p&gt;Clojure 1.6.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (defrecord a [])&lt;br/&gt;
user.a&lt;br/&gt;
user=&amp;gt; #user.a[]&lt;br/&gt;
{}&lt;/p&gt;

&lt;p&gt;Admittedly it&apos;s an edge case and I see little usage for no-arguments records, but I think it should be addressed aswell since the current behaviour is not what one would expect&lt;/p&gt;</comment>
                    <comment id="30685" author="bendlas" created="Sat, 2 Mar 2013 08:14:28 -0600"  >&lt;p&gt;Got the following REPL interaction:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;% java -jar ~/.m2/repository/org/clojure/clojure/1.5.0/clojure-1.5.0.jar
user=&amp;gt; (defrecord a [])
user.a
user=&amp;gt; (a.)
#user.a{}
user=&amp;gt; #user.a{}
{}
#user.a[]
{}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This should be reopened or declined for another reason than reproducability.&lt;/p&gt;</comment>
                    <comment id="30721" author="bronsa" created="Sun, 10 Mar 2013 14:18:03 -0500"  >&lt;p&gt;I&apos;m reopening this since the bug is still there.&lt;/p&gt;
</comment>
                    <comment id="30759" author="jafingerhut" created="Wed, 13 Mar 2013 14:04:29 -0500"  >&lt;p&gt;Patch clj-1093-fix-empty-record-literal-patch-v2.txt dated Mar 13, 2013 is identical to Bronsa&apos;s patch 001-fix-empty-record-literal.patch dated Oct 24, 2012, except that it applies cleanly to latest master.  I&apos;m not sure why the older patch doesn&apos;t but git doesn&apos;t like something about it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11609" name="001-fix-empty-record-literal.patch" size="2007" author="bronsa" created="Wed, 24 Oct 2012 09:19:36 -0500" />
                    <attachment id="11914" name="clj-1093-fix-empty-record-literal-patch-v2.txt" size="1771" author="jafingerhut" created="Wed, 13 Mar 2013 14:04:29 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1092] New function re-quote-replacement has incorrect :added metadata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1092</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I created the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-870&quot; title=&quot;clojure.string/replace behaves unexpectedly when \ or $ are part of the result string&quot;&gt;&lt;del&gt;CLJ-870&lt;/del&gt;&lt;/a&gt; that added the function re-quote-replacement before Clojure 1.4 was released, and I was apparently hoping it would get into that release.  It is in now, but incorrectly states that fn re-quote-replacement was added in 1.4.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15770">CLJ-1092</key>
            <summary>New function re-quote-replacement has incorrect :added metadata</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Oct 2012 20:42:38 -0500</created>
                <updated>Sat, 22 Dec 2012 09:53:50 -0600</updated>
                    <resolved>Sat, 22 Dec 2012 09:53:50 -0600</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29771" author="jafingerhut" created="Mon, 22 Oct 2012 21:01:29 -0500"  >&lt;p&gt;And before creating this patch, I did a diff between Clojure 1.4 and 1.5-beta1 source code, and verified that every other function with :added metadata that has been added since 1.4 says &quot;1.5&quot;.  Only re-quote-replacement was mislabeled in this way.&lt;/p&gt;</comment>
                    <comment id="30068" author="redinger" created="Tue, 27 Nov 2012 15:42:07 -0600"  >&lt;p&gt;As you&apos;d expect, this patch applies cleanly and improves the correctness of the documentation.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11603" name="fix-added-metadata-for-re-quote-replacement.txt" size="893" author="jafingerhut" created="Mon, 22 Oct 2012 20:42:38 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1091] update changes.md to include 1.5 changes</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1091</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="15769">CLJ-1091</key>
            <summary>update changes.md to include 1.5 changes</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="halgari">Timothy Baldridge</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Oct 2012 19:50:19 -0500</created>
                <updated>Tue, 11 Dec 2012 13:09:08 -0600</updated>
                    <resolved>Tue, 11 Dec 2012 13:09:08 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29953" author="jafingerhut" created="Thu, 15 Nov 2012 11:01:27 -0600"  >&lt;p&gt;changes-draft-v1.md is not a patch, but an outline of a proposed new changes.md file for Clojure 1.5 with some of the content fleshed out.  It still has lots of occurrences of &quot;TBD&quot; for &quot;To Be Documented&quot; in it.&lt;/p&gt;

&lt;p&gt;It does mention every ticket that had a patch committed since Clojure 1.4.0 until Nov 15 2012.&lt;/p&gt;

&lt;p&gt;I am hoping someone who is more knowledgeable of the &quot;TBD&quot; parts takes this and runs with it.&lt;/p&gt;</comment>
                    <comment id="30008" author="jafingerhut" created="Thu, 22 Nov 2012 19:16:57 -0600"  >&lt;p&gt;changes-draft-v2.md is very similar to the earlier changes-draft-v1.md described above, but has a few additions.&lt;/p&gt;</comment>
                    <comment id="30040" author="halgari" created="Mon, 26 Nov 2012 14:41:58 -0600"  >&lt;p&gt;V3 of the draft...should be almost good to go. Someone with more info on reducers should take a look at that section as have yet to actually use them much. &lt;/p&gt;</comment>
                    <comment id="30044" author="jafingerhut" created="Mon, 26 Nov 2012 20:47:24 -0600"  >&lt;p&gt;Removed V2 of the draft as Timothy&apos;s V3 had all of it and more.&lt;/p&gt;</comment>
                    <comment id="30049" author="halgari" created="Tue, 27 Nov 2012 08:52:19 -0600"  >&lt;p&gt;Fleshed out the reducers section a bit. &lt;/p&gt;</comment>
                    <comment id="30050" author="halgari" created="Tue, 27 Nov 2012 08:53:33 -0600"  >&lt;p&gt;Alright, I think this is ready for a final review by someone besides me. &lt;/p&gt;</comment>
                    <comment id="30077" author="redinger" created="Wed, 28 Nov 2012 12:48:22 -0600"  >&lt;p&gt;Editorial cleanup&lt;/p&gt;</comment>
                    <comment id="30078" author="jafingerhut" created="Wed, 28 Nov 2012 12:56:01 -0600"  >&lt;p&gt;Christopher, isn&apos;t this file intended to be in Markdown format, not HTML?&lt;/p&gt;</comment>
                    <comment id="30079" author="redinger" created="Wed, 28 Nov 2012 12:58:30 -0600"  >&lt;p&gt;uploading the correct md file&lt;/p&gt;</comment>
                    <comment id="30080" author="jafingerhut" created="Wed, 28 Nov 2012 13:12:00 -0600"  >&lt;p&gt;changes-draft-v6.md same as v5, except for a couple of spelling corrections.&lt;/p&gt;</comment>
                    <comment id="30083" author="halgari" created="Thu, 29 Nov 2012 08:38:52 -0600"  >&lt;p&gt;Missing desc on when-&amp;gt;. Fixed in v7 of the doc&lt;/p&gt;</comment>
                    <comment id="30143" author="richhickey" created="Sun, 2 Dec 2012 18:37:58 -0600"  >&lt;p&gt;&quot;1.1 Clojure 1.5 requires Java 1.6 or later&quot;&lt;/p&gt;

&lt;p&gt;did you mean &quot;building Clojure 1.5&quot;?&lt;/p&gt;

&lt;p&gt;I don&apos;t know that anything requires 1.6&lt;/p&gt;</comment>
                    <comment id="30144" author="richhickey" created="Sun, 2 Dec 2012 18:41:29 -0600"  >&lt;p&gt;test-&amp;gt;, let-&amp;gt; when-&amp;gt; &lt;/p&gt;

&lt;p&gt;are now:&lt;/p&gt;

&lt;p&gt;cond-&amp;gt;, as-&amp;gt; and some-&amp;gt;&lt;/p&gt;</comment>
                    <comment id="30145" author="jafingerhut" created="Sun, 2 Dec 2012 18:49:18 -0600"  >&lt;p&gt;I&apos;ll put up an updated version soon, but that headline wasn&apos;t properly updated to match the later occurrence of it in the body, which is: &quot;Clojure 1.5 reducers library requires Java 6 or later&quot;.  Is it true that the ForkJoin library requires Java 6 or later?  If not, how can it be made to work with Java 5?&lt;/p&gt;</comment>
                    <comment id="30146" author="jafingerhut" created="Sun, 2 Dec 2012 20:42:23 -0600"  >&lt;p&gt;changes-draft-v8.md updates the table of contents headings to match those in the body, and updates names of new threading macros.&lt;/p&gt;</comment>
                    <comment id="30152" author="steveminer@gmail.com" created="Mon, 3 Dec 2012 09:40:58 -0600"  >&lt;p&gt;changes-draft-v8.md, section 2.4, needs an update for description of some-&amp;gt;.  The document says &quot;logical true&quot; where it should say &quot;not nil&quot;.  Same comment applies to some-&amp;gt;&amp;gt;.  The point is that false will thread through the forms.  This is a change from the replaced when-&amp;gt; (in 1.5-beta1).&lt;/p&gt;</comment>
                    <comment id="30154" author="halgari" created="Mon, 3 Dec 2012 10:02:39 -0600"  >&lt;p&gt;updated to reflect changes to some-&amp;gt; and some-&amp;gt;&amp;gt;&lt;/p&gt;</comment>
                    <comment id="30156" author="steveminer@gmail.com" created="Mon, 3 Dec 2012 10:15:23 -0600"  >&lt;p&gt;Sorry to nit pick, but there are two more &quot;logical true&quot; phrases in v9 that need to change to &quot;not nil&quot; in those some-&amp;gt; and some-&amp;gt;&amp;gt; descriptions.&lt;/p&gt;</comment>
                    <comment id="30157" author="halgari" created="Mon, 3 Dec 2012 10:22:18 -0600"  >&lt;p&gt;Not a problem. Thanks for looking it over!&lt;/p&gt;</comment>
                    <comment id="30169" author="stu" created="Mon, 3 Dec 2012 13:30:36 -0600"  >&lt;p&gt;I find the following sentence a little vague: &quot;Clojure 1.5 can still be compiled and run with Java 5, but the test suite will not pass due to the lack of support for ForkJoin.&quot;&lt;/p&gt;

&lt;p&gt;The problem is the application of the &quot;but&quot; to both parts of the conjunction. Isn&apos;t the intent actually: &quot;Clojure can run with Java version 1.5 or later. Running the Clojure build requires 1.6, in order to test features that work with ForkJoin.&quot;&lt;/p&gt;</comment>
                    <comment id="30170" author="jafingerhut" created="Mon, 3 Dec 2012 13:52:27 -0600"  >&lt;p&gt;Stuart H, that is almost the intent, and probably close enough for this kind of documentation.&lt;/p&gt;

&lt;p&gt;The full gory details are as follows:&lt;/p&gt;

&lt;p&gt;Clojure can build and run with Java version 1.5 or later.  A Java version 1.5 build of Clojure only works if you do not run the test suite, e.g. by using the command &quot;ant jar&quot;.  To build Clojure including running the test suite, or to use the new reducers library, requires Java 1.6 or later.&lt;/p&gt;

&lt;p&gt;If the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1109&quot; title=&quot;Oracle Java 5 fails to run tests when building Clojure&quot;&gt;&lt;del&gt;CLJ-1109&lt;/del&gt;&lt;/a&gt; is applied, the full gory details become simpler to state:&lt;/p&gt;

&lt;p&gt;Clojure can build and run with Java version 1.5 or later.  Using the new reducers library requires Java 1.6 or later.&lt;/p&gt;</comment>
                    <comment id="30171" author="jafingerhut" created="Mon, 3 Dec 2012 13:59:40 -0600"  >&lt;p&gt;changes-draft-v11.md changes the description of Java 5 limitations to match the current gory details, and hopefully address Stuart H&apos;s concerns raised above.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11739" name="changes-draft-v10.md" size="18448" author="halgari" created="Mon, 3 Dec 2012 10:21:42 -0600" />
                    <attachment id="11744" name="changes-draft-v11.md" size="18550" author="jafingerhut" created="Mon, 3 Dec 2012 13:59:40 -0600" />
                    <attachment id="11719" name="changes-draft-v5.md" size="18318" author="redinger" created="Wed, 28 Nov 2012 12:58:30 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1090] Indirect function calls through Var instances fail to clear locals</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1090</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you make a function call indirectly by invoking a Var object (which derefs itself and invokes the result), the invocation parameters remain in the thread&apos;s local stack for the duration of the function call, even though they are needed only long enough to be passed into the deref&apos;d function. As a result, passing a lazy seq into a function invoked in its Var form may run out of memory if the seq is forced inside that function. For example:&lt;/p&gt;

&lt;p&gt;(defn total &lt;span class=&quot;error&quot;&gt;&amp;#91;xs&amp;#93;&lt;/span&gt; (reduce + 0 xs))&lt;br/&gt;
(total (range 1000000000))   ; this works, though takes a while&lt;br/&gt;
(#&apos;total (range 1000000000)) ; this dies with out of memory error&lt;/p&gt;

&lt;p&gt;I can provide a patch if it would be useful. The fix should be trivial, something along the lines of wrapping each argN in clojure/lang/Var.java inside a Util.ret1(argN, argN = null) as is done in RestFn.java.&lt;/p&gt;</description>
                <environment>Probably all, but observed on Ubuntu 12.04, OpenJDK 6</environment>
            <key id="15768">CLJ-1090</key>
            <summary>Indirect function calls through Var instances fail to clear locals</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stfactual">Spencer Tipping</reporter>
                        <labels>
                        <label>performance</label>
                    </labels>
                <created>Mon, 22 Oct 2012 18:43:19 -0500</created>
                <updated>Fri, 30 Nov 2012 14:26:45 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29776" author="stfactual" created="Tue, 23 Oct 2012 13:37:16 -0500"  >&lt;p&gt;Sorry, I typo&apos;d the example. (defn total ...) should be (defn sum ...).&lt;/p&gt;</comment>
                    <comment id="30054" author="halgari" created="Tue, 27 Nov 2012 11:45:43 -0600"  >&lt;p&gt;fixed typeo in example&lt;/p&gt;</comment>
                    <comment id="30055" author="halgari" created="Tue, 27 Nov 2012 11:47:35 -0600"  >&lt;p&gt;Couldn&apos;t reproduce the exception, but the 2nd example did chew through about 4x the amount of memory. Vetting. &lt;/p&gt;</comment>
                    <comment id="30095" author="halgari" created="Thu, 29 Nov 2012 14:57:28 -0600"  >&lt;p&gt;adding a patch. Since most of Clojure ends up running this code in one way or another, I&apos;d assert that tests are included as part of the normal Clojure test process. &lt;/p&gt;

&lt;p&gt;Patch simply calls Util.ret1(argx, argx=null) on all invoke calls. &lt;/p&gt;</comment>
                    <comment id="30097" author="halgari" created="Thu, 29 Nov 2012 15:17:52 -0600"  >&lt;p&gt;And as a note, both examples in the original report now have extremely similar memory usages. &lt;/p&gt;</comment>
                    <comment id="30118" author="stfactual" created="Fri, 30 Nov 2012 14:22:14 -0600"  >&lt;p&gt;Sounds great, and the patch looks good too. Let me know if I need to do anything else.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11729" name="var-clear-locals.diff" size="19020" author="halgari" created="Thu, 29 Nov 2012 14:57:28 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1089] clojure.java.io/copy interprets read count of 0 as eos</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1089</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;According to the interface &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(&quot;&gt;http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(&lt;/a&gt;)&lt;br/&gt;
InputStream.read() family of methods return -1 when the end of stream is reached.&lt;/p&gt;

&lt;p&gt;do-copy methods currently use a test: (pos? size) to determine whether eos is reached. This mostly works, but the specification is pretty clear in that InputStream implementations are allowed to return reads of zero bytes before returning more bytes.&lt;/p&gt;

&lt;p&gt;##EDIT changed title of ticket from &quot;clojure.java.io/copy should test for -1 instead of 0 for end of stream&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15767">CLJ-1089</key>
            <summary>clojure.java.io/copy interprets read count of 0 as eos</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Oct 2012 15:35:15 -0500</created>
                <updated>Mon, 22 Oct 2012 16:57:16 -0500</updated>
                    <resolved>Mon, 22 Oct 2012 16:57:16 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29758" author="bendlas" created="Mon, 22 Oct 2012 15:40:47 -0500"  >&lt;p&gt;Attached patch changes do-copy methods to test for -1&lt;/p&gt;</comment>
                    <comment id="29759" author="jafingerhut" created="Mon, 22 Oct 2012 16:56:34 -0500"  >&lt;p&gt;Herwig, can you elaborate on &quot;the specification is pretty clear in that InputStream implementations are allowed to return reads of zero bytes before returning more bytes&quot;?&lt;/p&gt;

&lt;p&gt;I ask because in the very InputStream documentation page you link to, it seems to explicitly say the opposite of what you claim: &quot;If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.&quot;&lt;/p&gt;</comment>
                    <comment id="29760" author="bendlas" created="Mon, 22 Oct 2012 16:57:16 -0500"  >&lt;p&gt;I reread the spec for InputStream.read and it clearly says &lt;/p&gt;

&lt;p&gt;&quot;If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.&quot;&lt;/p&gt;

&lt;p&gt;The reason I originally thought of this as an issue was a misbehaving ServletInputStream from Jetty.&lt;/p&gt;

&lt;p&gt;I closed the issue as declined. Sorry for the noise!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11599" name="0001-CLJ-1089-clojure.java.io-do-copy-methods-determine-e.patch" size="1984" author="bendlas" created="Mon, 22 Oct 2012 15:40:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1088] repl/source could support protocol functions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1088</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (source clojure.core.protocols/coll-reduce)
Source not found&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But since the protocol fn&apos;s var&apos;s metadata points to the protocol var, and the protocol var knows the file and line where it was defined, it would be trivial to improve &apos;source&apos; to look like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (source clojure.core.protocols/coll-reduce)
(defprotocol CollReduce
  &quot;Protocol &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; collection types that can implement reduce faster than
  first/next recursion. Called by clojure.core/reduce. Baseline
  implementation defined in terms of Iterable.&quot;
  (coll-reduce [coll f] [coll f val]))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15763">CLJ-1088</key>
            <summary>repl/source could support protocol functions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Sun, 21 Oct 2012 09:53:35 -0500</created>
                <updated>Sun, 21 Oct 2012 12:41:12 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29737" author="chouser@n01se.net" created="Sun, 21 Oct 2012 10:00:50 -0500"  >&lt;p&gt;Add one-line patch to clojure.repl/source so that it will find the protocol definition for a given protocol function.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11592" name="0001-Add-support-for-protocol-fns-to-repl-source.-CLJ-1088.patch" size="1965" author="chouser@n01se.net" created="Sun, 21 Oct 2012 10:00:50 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1087] clojure.data/diff uses set union on key seqs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1087</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;clojure.data/diff&lt;/tt&gt;, on line 118, defines:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;java.util.Map
(diff-similar [a b]
  (diff-associative a b (set/union (keys a) (keys b))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since &lt;tt&gt;keys&lt;/tt&gt; returns a key seq, this seems like an error. &lt;tt&gt;clojure.set/union&lt;/tt&gt; has strange and inconsistent behavior with regard to non-sets, and in this case the two key seqs are concatenated. Based on a cursory benchmark, it seems that this bug &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/help_16.gif&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; is a slight performance gain when the maps have no common keys, and a significant performance loss when the maps have the same keys. The results are still correct because of the merging reduce in &lt;tt&gt;diff-associative&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;The patch is easy (just call set on each key seq).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15753">CLJ-1087</key>
            <summary>clojure.data/diff uses set union on key seqs</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tomoj">Tom Jack</reporter>
                        <labels>
                        <label>bug</label>
                        <label>performance</label>
                    </labels>
                <created>Mon, 15 Oct 2012 03:59:52 -0500</created>
                <updated>Mon, 15 Oct 2012 14:52:42 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29650" author="jafingerhut" created="Mon, 15 Oct 2012 14:52:04 -0500"  >&lt;p&gt;clj-1087-diff-perf-enhance-patch-v1.txt dated Oct 15 2012 implements Tom&apos;s suggested performance enhancement, although not exactly in the way he suggested.  It does calculate the union of the two key sequences.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11562" name="clj-1087-diff-perf-enhance-patch-v1.txt" size="760" author="jafingerhut" created="Mon, 15 Oct 2012 14:52:04 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1086] Support arity-1 for -&gt;&gt;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1086</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently (as of Clojure 1.4) -&amp;gt;&amp;gt; doesn&apos;t support arity-1, though -&amp;gt; does. Arity-1 for -&amp;gt;&amp;gt; would be useful to let somebody comment out forms as follows:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(-&amp;gt;&amp;gt; foo
  #_(bar baz)
  #_quux)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Discussion: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/_IVl0Tb7Au4&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/_IVl0Tb7Au4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My name on contributor list page &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt; is: Shantanu Kumar&lt;/p&gt;</description>
                <environment>Clojure and ClojureScript</environment>
            <key id="15748">CLJ-1086</key>
            <summary>Support arity-1 for -&gt;&gt;</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="kumarshantanu">Shantanu Kumar</reporter>
                        <labels>
                    </labels>
                <created>Fri, 12 Oct 2012 13:39:09 -0500</created>
                <updated>Sat, 12 Jan 2013 18:48:06 -0600</updated>
                                    <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29909" author="jafingerhut" created="Thu, 8 Nov 2012 13:37:03 -0600"  >&lt;p&gt;Shantanu, you give your name on the contributing page, but I don&apos;t see it there.  Is your CA in transit, perhaps?&lt;/p&gt;</comment>
                    <comment id="29910" author="kumarshantanu" created="Thu, 8 Nov 2012 13:43:15 -0600"  >&lt;p&gt;@Andy I can see my name on the contributors page when I search for the text &quot;Shantanu&quot;. My CA was submitted more than a year ago.&lt;/p&gt;</comment>
                    <comment id="29911" author="jafingerhut" created="Thu, 8 Nov 2012 13:53:45 -0600"  >&lt;p&gt;Right you are.  I somehow accidentally got my browser to enable case matching, and was expecting it to search case insensitively.  Sorry for the noise.&lt;/p&gt;</comment>
                    <comment id="30427" author="vemv" created="Sat, 12 Jan 2013 18:48:06 -0600"  >&lt;p&gt;Just for the record, the patch provided at &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1121&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-1121&lt;/a&gt; addresses this issue.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11556" name="thread-last-arity-1.diff" size="835" author="kumarshantanu" created="Fri, 12 Oct 2012 13:39:09 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1085] clojure.main/repl unconditionally refers REPL utilities into *ns*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1085</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A number of vars from &lt;tt&gt;clojure.repl&lt;/tt&gt;, &lt;tt&gt;clojure.java.javadoc&lt;/tt&gt;, and &lt;tt&gt;clojure.pprint&lt;/tt&gt; are unconditionally referred into &lt;tt&gt;&amp;#42;ns&amp;#42;&lt;/tt&gt; by &lt;tt&gt;clojure.main/repl&lt;/tt&gt;.  This is fine when it is being used e.g. as the primary driver of a terminal-bound Clojure REPL, but other usages can end up bringing those utility vars into namespaces other than &lt;tt&gt;&apos;user&lt;/tt&gt;.  This can cause problems if &lt;tt&gt;clojure.main/repl&lt;/tt&gt; is used to drive a REPL within namespaces that already have referred or interned vars with the same names as those utility vars, e.g.:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;$ java -jar ~/.m2/repository/org/clojure/clojure/1.5.0-alpha6/clojure-1.5.0-alpha6.jar
Clojure 1.5.0-alpha6
user=&amp;gt; (ns foo)
nil
foo=&amp;gt; (defn pp [] &lt;span class=&quot;code-quote&quot;&gt;&quot;hi!&quot;&lt;/span&gt;)
#&apos;foo/pp
foo=&amp;gt; (pp)
&lt;span class=&quot;code-quote&quot;&gt;&quot;hi!&quot;&lt;/span&gt;
foo=&amp;gt; (clojure.main/repl)
foo=&amp;gt; (pp)
nil
nil
foo=&amp;gt; (defn pp [] &lt;span class=&quot;code-quote&quot;&gt;&quot;whoops&quot;&lt;/span&gt;)
CompilerException java.lang.IllegalStateException: pp already refers to: #&apos;clojure.pprint/pp in namespace: foo, compiling:(NO_SOURCE_PATH:7:1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Worse, nREPL uses &lt;tt&gt;clojure.main/repl&lt;/tt&gt; (in large part to maximize the consistency of REPL behaviour across different Clojure versions), where each user expression is evaluated through a separate &lt;tt&gt;clojure.main/repl&lt;/tt&gt; invocation.  This leads to the same problems as above, but for every nREPL user, session, and expression (reported @ &lt;a href=&quot;http://dev.clojure.org/jira/browse/NREPL-31&quot; title=&quot;REPL utilities are refered into *ns* prior to every expression evaluation&quot;&gt;&lt;del&gt;NREPL-31&lt;/del&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A simple fix for this is to perform these refers only if &lt;tt&gt;&amp;#42;ns&amp;#42;&lt;/tt&gt; is &lt;tt&gt;&apos;user&lt;/tt&gt; (which, AFAICT, was the only intended effect of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-310&quot; title=&quot;clojure.repl namespace&quot;&gt;&lt;del&gt;CLJ-310&lt;/del&gt;&lt;/a&gt;, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-454&quot; title=&quot;docstrings for special ops&quot;&gt;&lt;del&gt;CLJ-454&lt;/del&gt;&lt;/a&gt;, and &lt;a href=&quot;https://github.com/clojure/clojure/commit/04764db&quot;&gt;https://github.com/clojure/clojure/commit/04764db&lt;/a&gt;, the changes that added these automatic implicit refers to &lt;tt&gt;clojure.main/repl&lt;/tt&gt;).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15744">CLJ-1085</key>
            <summary>clojure.main/repl unconditionally refers REPL utilities into *ns*</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Oct 2012 13:33:36 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29628" author="cemerick" created="Wed, 10 Oct 2012 13:36:52 -0500"  >&lt;p&gt;Patch attached to only refer in the utility vars if in the &lt;tt&gt;user&lt;/tt&gt; namespace.&lt;/p&gt;</comment>
                    <comment id="29629" author="steveminer@gmail.com" created="Wed, 10 Oct 2012 14:03:48 -0500"  >&lt;p&gt;It would probably be better to test with ns-name (as opposed to comparing strings):&lt;/p&gt;

&lt;p&gt;    (= &apos;user (ns-name &lt;b&gt;ns&lt;/b&gt;))&lt;/p&gt;</comment>
                    <comment id="29630" author="hiredman" created="Wed, 10 Oct 2012 14:18:31 -0500"  >&lt;p&gt;I don&apos;t follow how it is required to call `clojure.main/repl` for every input&lt;/p&gt;</comment>
                    <comment id="29631" author="cemerick" created="Wed, 10 Oct 2012 14:19:36 -0500"  >&lt;p&gt;Gah, of course.  :-/  Patch updated.&lt;/p&gt;</comment>
                    <comment id="29632" author="cemerick" created="Wed, 10 Oct 2012 14:32:42 -0500"  >&lt;p&gt;@Kevin: It&apos;s not &lt;em&gt;required&lt;/em&gt;, but I found it far more straightforward to not try to pretend that the underlying transport was stream-based when it&apos;s actually message-based.  It also means that sessions can be very lightweight: unless code is being evaluated within a session, it is not occupying a thread, and takes up only as much space as its map of thread-local bindings.&lt;/p&gt;</comment>
                    <comment id="29649" author="cemerick" created="Mon, 15 Oct 2012 05:10:04 -0500"  >&lt;p&gt;Based on discussion on clojure-dev, I have attached an alternative patch ({{&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1085&quot; title=&quot;clojure.main/repl unconditionally refers REPL utilities into *ns*&quot;&gt;&lt;del&gt;CLJ-1085&lt;/del&gt;&lt;/a&gt;-refactor.diff}}), which:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;breaks out the libspecs specifying the implicit refers into their own var (so that they can be consistently applied by other REPL implementations)&lt;/li&gt;
	&lt;li&gt;moves the default &lt;tt&gt;require&lt;/tt&gt; of the libspecs to be invoked only when REPL is started from &lt;tt&gt;clojure.main&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="29696" author="stu" created="Fri, 19 Oct 2012 14:12:51 -0500"  >&lt;p&gt;Screened and liked the second &quot;refactor&quot; patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11549" name="CLJ-1085.diff" size="1037" author="cemerick" created="Wed, 10 Oct 2012 14:19:36 -0500" />
                    <attachment id="11560" name="CLJ-1085-refactor.diff" size="1844" author="cemerick" created="Mon, 15 Oct 2012 04:47:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1084] (object-array [1]) is ~3x slower than (object-array (rseq [1]))</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1084</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;{{user=&amp;gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 10000000&amp;#93;&lt;/span&gt; (object-array &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;)))&lt;br/&gt;
&quot;Elapsed time: 1178.116257 msecs&quot;&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 10000000&amp;#93;&lt;/span&gt; (object-array (rseq &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;))))&lt;br/&gt;
&quot;Elapsed time: 422.42248 msecs&quot;&lt;br/&gt;
nil}}&lt;/p&gt;


&lt;p&gt;This appears to be because PersistentVector$ChunkedSeq does not implement Counted, so RT.count is iterating the ChunkedSeq to get its count.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15743">CLJ-1084</key>
            <summary>(object-array [1]) is ~3x slower than (object-array (rseq [1]))</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Tue, 9 Oct 2012 14:07:53 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29623" author="pjstadig" created="Tue, 9 Oct 2012 14:11:21 -0500"  >&lt;p&gt;I don&apos;t believe this is Major priority, but I cannot edit the ticket after having created it.&lt;/p&gt;</comment>
                    <comment id="29633" author="tsdh" created="Thu, 11 Oct 2012 10:17:56 -0500"  >&lt;p&gt;This patch makes PersistentVector$ChunkedSeq implement Counted.&lt;/p&gt;

&lt;p&gt;Performance before:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(let [v (vec (range 10000))
      vs (seq v)]
  (time (dotimes [_ 10000]
          (count v)))
  (time (dotimes [_ 10000]
          (count vs))))
;&quot;Elapsed time: 0.862259 msecs&quot;
;&quot;Elapsed time: 7228.72486 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Performance after (with the patch):&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(let [v (vec (range 10000))
      vs (seq v)]
  (time (dotimes [_ 10000]
          (count v)))
  (time (dotimes [_ 10000]
          (count vs))))
;&quot;Elapsed time: 0.967301 msecs&quot;
;&quot;Elapsed time: 0.99391 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also with Paul&apos;s test case.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(time (dotimes [_ 10000000] (object-array [1])))
;&quot;Elapsed time: 1668.346997 msecs&quot;
(time (dotimes [_ 10000000] (object-array (rseq [1]))))
;&quot;Elapsed time: 662.820591 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(time (dotimes [_ 10000000] (object-array [1])))
;&quot;Elapsed time: 757.084577 msecs&quot;
(time (dotimes [_ 10000000] (object-array (rseq [1]))))
;&quot;Elapsed time: 680.602921 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29693" author="stu" created="Fri, 19 Oct 2012 13:46:44 -0500"  >&lt;p&gt;Two patches to be applied together, the 10/19 patch adds tests and updates to latest test.generative.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11551" name="0001-Make-PersistentVector-ChunkedSeq-implement-Counted.patch" size="1168" author="tsdh" created="Thu, 11 Oct 2012 10:17:56 -0500" />
                    <attachment id="11580" name="CLJ-1084-tests.patch" size="1575" author="stu" created="Fri, 19 Oct 2012 13:46:44 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1083] Incorrect ArityException message for function names containing -&gt;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1083</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user=&amp;gt; (defn a-&amp;gt;b [])&lt;br/&gt;
#&apos;user/a-&amp;gt;b&lt;br/&gt;
user=&amp;gt; (a-&amp;gt;b 1)&lt;br/&gt;
ArityException Wrong number of args (1) passed to: user$a  clojure.lang.AFn.throwArity (AFn.java:437)&lt;/p&gt;

&lt;p&gt;Note that the reported function name in the stack trace is &quot;user$a&quot;, where it should be &quot;user$a-&amp;gt;b&quot; (or some mangled variant thereof?)&lt;/p&gt;

&lt;p&gt;See discussion here: &lt;a href=&quot;https://groups.google.com/d/msg/clojure/PVNoLclhhB0/_NWqyE0cPAUJ&quot;&gt;https://groups.google.com/d/msg/clojure/PVNoLclhhB0/_NWqyE0cPAUJ&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15742">CLJ-1083</key>
            <summary>Incorrect ArityException message for function names containing -&gt;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="alexnixon">Alex Nixon</reporter>
                        <labels>
                    </labels>
                <created>Tue, 9 Oct 2012 11:18:48 -0500</created>
                <updated>Fri, 12 Apr 2013 09:42:00 -0500</updated>
                                    <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30034" author="halgari" created="Mon, 26 Nov 2012 10:27:31 -0600"  >&lt;p&gt;Fix for this defect.&lt;/p&gt;</comment>
                    <comment id="30035" author="halgari" created="Mon, 26 Nov 2012 10:30:13 -0600"  >&lt;p&gt;The throwArity now attempts to locate and call clojure.main/demunge. If it finds the function it invokes it and uses the returned string in the error. Otherwise it just throws the actual class name. This results in the following behaviour:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defn a-&amp;gt;b [])&lt;br/&gt;
#&apos;user/a-&amp;gt;b&lt;br/&gt;
user=&amp;gt; (a-&amp;gt;b 32)&lt;br/&gt;
ArityException Wrong number of args (1) passed to: user/a-&amp;gt;b  clojure.lang.AFn.throwArity (AFn.java:449)&lt;br/&gt;
user=&amp;gt; &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11710" name="better-throw-arity-messages.diff" size="1340" author="halgari" created="Mon, 26 Nov 2012 10:27:31 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1082] Subvecs of primitive vectors cannot be reduced</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1082</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I could reproduce on current 10/05 git.&lt;/p&gt;

&lt;p&gt;Reduce doesn&apos;t work on subvecs of primitive vectors.&lt;br/&gt;
Root cause seems to be that RT/subvec and APersistentVector$SubVector make assumptions about implementation&lt;/p&gt;

&lt;p&gt;If reduce on a subvec doesn&apos;t work then neither will nice ops like fold.&lt;/p&gt;

&lt;p&gt;How to cause: &lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;prim-vec (into (vector-of :long) (range 10000))&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (reduce + (subvec prim-vec 1 500)))&lt;/p&gt;

&lt;p&gt;-&amp;gt;&amp;gt; ClassCastException clojure.core.Vec cannot be cast to clojure.lang.PersistentVector  clojure.lang.APersistentVector$SubVector.iterator (APersistentVector.java:523)&lt;/p&gt;
</description>
                <environment>1.7.0-08, OS X 10.8</environment>
            <key id="15733">CLJ-1082</key>
            <summary>Subvecs of primitive vectors cannot be reduced</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gshayban">Ghadi Shayban</reporter>
                        <labels>
                    </labels>
                <created>Fri, 5 Oct 2012 18:49:21 -0500</created>
                <updated>Sat, 26 Jan 2013 07:29:55 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30056" author="halgari" created="Tue, 27 Nov 2012 11:52:48 -0600"  >&lt;p&gt;Confirmed to be broken on master. Vetting. Not sure what it&apos;s going to take to fix this, however. If this is of intrest for you, you might want to help push it along by providing a patch. &lt;/p&gt;</comment>
                    <comment id="30058" author="jafingerhut" created="Tue, 27 Nov 2012 12:09:26 -0600"  >&lt;p&gt;There is no code or ticket for this yet, but I wanted to mention that I&apos;ve begun working on an implementation of RRB-Tree (Relaxed Radix Balanced Tree) vectors for Clojure (see discussion at &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure-dev/xnbtzTVEK9A&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure-dev/xnbtzTVEK9A&lt;/a&gt;).  Assuming it is no big deal to get reducers to work on such vectors, subvec could be implemented in O(log n) time in such a way that the result was the same concrete type of vector as you started with, and thus reducers would work on them, too.&lt;/p&gt;

&lt;p&gt;It would mean O(log n) time for subvec instead of today&apos;s O(1), but this would likely fix other limitations that exist today with subvec&apos;s, e.g. &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-761&quot; title=&quot;print-dup generates call to nonexistent method for APersistentVector$SubVector&quot;&gt;CLJ-761&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="30461" author="mikera" created="Sun, 20 Jan 2013 05:14:04 -0600"  >&lt;p&gt;I have a fix for this and a regression test in the tree below:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mikera/clojure/tree/winfix&quot;&gt;https://github.com/mikera/clojure/tree/winfix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not sure how best to make this into a patch though - I also have the pprint fix in here (&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1076&quot; title=&quot;pprint tests fail on Windows, expecting \n&quot;&gt;CLJ-1076&lt;/a&gt;)&lt;/p&gt;</comment>
                    <comment id="30462" author="mikera" created="Sun, 20 Jan 2013 18:41:50 -0600"  >&lt;p&gt;Attached a patch that I created with: &lt;/p&gt;

&lt;p&gt;git format-patch winfix --stdout HEAD~3..HEAD &amp;gt; clj-1082.patch&lt;/p&gt;

&lt;p&gt;Does this do the trick? I had to use the HEAD~3..HEAD to just get the most recent 3 commits and exclude the pprint changes that I needed in order to build on Windows.&lt;/p&gt;</comment>
                    <comment id="30463" author="mikera" created="Sun, 20 Jan 2013 18:42:24 -0600"  >&lt;p&gt;Patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1082&quot; title=&quot;Subvecs of primitive vectors cannot be reduced&quot;&gt;CLJ-1082&lt;/a&gt;, containing 3 commits&lt;/p&gt;</comment>
                    <comment id="30465" author="jafingerhut" created="Mon, 21 Jan 2013 01:11:04 -0600"  >&lt;p&gt;Mike, your patch clj-1082.patch applies cleanly to latest master for me, so looks like you found one way to do it.&lt;/p&gt;

&lt;p&gt;Another would be as follows, and closer to the directions on the JIRA workflow page: &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt; (but not identical).  Note that these commands would work on Mac OS X or Linux.  I&apos;m not sure what the correct corresponding command would be on Windows for the &quot;git am&quot; step below, unless that just happens to work because Windows and/or git implement the input redirection with &quot;&amp;lt;&quot; somehow.&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Check out a fresh repo&lt;br/&gt;
$ git clone git://github.com/clojure/clojure.git&lt;br/&gt;
$ cd clojure&lt;/li&gt;
&lt;/ol&gt;


&lt;ol&gt;
	&lt;li&gt;Apply the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1076&quot; title=&quot;pprint tests fail on Windows, expecting \n&quot;&gt;CLJ-1076&lt;/a&gt; to the master branch.  This step isn&apos;t on the JIRA workflow page.&lt;br/&gt;
$ git am --keep-cr -s &amp;lt; clj-1076-fix-tests-on-windows-patch-v1.txt&lt;/li&gt;
&lt;/ol&gt;


&lt;ol&gt;
	&lt;li&gt;Create a branch for yourself&lt;br/&gt;
$ git checkout -b fix-clj-1082&lt;/li&gt;
&lt;/ol&gt;


&lt;ol&gt;
	&lt;li&gt;After editing to make your changes, commit them to the current fix-clj-1082 branch&lt;br/&gt;
$ git commit -a -m &quot;fixed annoying bug, refs #42&quot;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;From there on down it is the same as the instructions on the JIRA workflow page.  The &quot;git format-patch master --stdout &amp;gt; file.patch&quot; will create a patch for the changes you have made in the current branch fix-clj-1082 starting from the master branch, which has the &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1076&quot; title=&quot;pprint tests fail on Windows, expecting \n&quot;&gt;CLJ-1076&lt;/a&gt; fix because of the &apos;git am&apos; command above.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11807" name="clj-1082.patch" size="3892" author="mikera" created="Sun, 20 Jan 2013 18:42:24 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1081] REPL binding not working that works with with-bindings</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1081</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This works as expected:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;java -jar clojure-1.4.0.jar -e &lt;span class=&quot;code-quote&quot;&gt;&quot;(&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (require &apos;clojure.repl) (.setDynamic #&apos;clojure.repl/print-doc) (with-bindings {#&apos;clojure.repl/print-doc str} (eval &apos;(clojure.repl/doc println))))&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-quote&quot;&gt;&quot;{:ns #&amp;lt;Namespace clojure.core&amp;gt;, :name println, :arglists ([&amp;amp; more]), :added \&quot;&lt;/span&gt;1.0\&lt;span class=&quot;code-quote&quot;&gt;&quot;, :&lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :doc \&quot;&lt;/span&gt;Same as print followed by (newline)\&lt;span class=&quot;code-quote&quot;&gt;&quot;, :line 3325, :file \&quot;&lt;/span&gt;clojure/core.clj\&lt;span class=&quot;code-quote&quot;&gt;&quot;}&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But the same thing does not work in the REPL:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;java -jar clojure-1.4.0.jar -e &lt;span class=&quot;code-quote&quot;&gt;&quot;(&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (require &apos;clojure.repl) (.setDynamic #&apos;clojure.repl/print-doc) (clojure.main/repl :init (fn [] {#&apos;clojure.repl/print-doc str}))))&quot;&lt;/span&gt;

Output &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; Output of {{(doc println)}}:&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;user=&amp;gt; (doc println)&lt;br/&gt;
-------------------------&lt;br/&gt;
clojure.core/println&lt;br/&gt;
(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; more&amp;#93;&lt;/span&gt;)&lt;br/&gt;
  Same as print followed by (newline)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt;&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15730">CLJ-1081</key>
            <summary>REPL binding not working that works with with-bindings</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="sdevijver">Steven Devijver</reporter>
                        <labels>
                    </labels>
                <created>Sun, 30 Sep 2012 15:21:42 -0500</created>
                <updated>Mon, 1 Oct 2012 05:51:46 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29583" author="sdevijver" created="Mon, 1 Oct 2012 05:51:46 -0500"  >&lt;p&gt;Found a work-around:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;java -jar clojure-1.4.0.jar -e &lt;span class=&quot;code-quote&quot;&gt;&quot;(&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (require &apos;clojure.repl) (.setDynamic #&apos;clojure.repl/print-doc) (with-bindings {#&apos;clojure.repl/print-doc str} (clojure.main/repl)))))&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&apos;m still not sure whether the method above using :init should or should not work.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1080] Eliminate many uses of reflection in Clojure code</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1080</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There are dozens of uses of reflection in Clojure code that can be eliminated by adding suitable type hints.  This patch adds the necessary type hints for most of those.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15729">CLJ-1080</key>
            <summary>Eliminate many uses of reflection in Clojure code</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 30 Sep 2012 11:36:18 -0500</created>
                <updated>Thu, 7 Feb 2013 08:54:50 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29581" author="jafingerhut" created="Sun, 30 Sep 2012 11:39:03 -0500"  >&lt;p&gt;Patch clj-1080-eliminate-many-reflection-warnings-patch-v1.txt dated Sep 30 2012 adds type hints to eliminate many uses of reflection in Clojure core code.&lt;/p&gt;</comment>
                    <comment id="29945" author="jafingerhut" created="Wed, 14 Nov 2012 13:26:02 -0600"  >&lt;p&gt;clj-1080-eliminate-many-reflection-warnings-patch-v2.txt dated Nov 14 2012 is identical to the previous patch (to be removed soon), except it applies cleanly to latest master.&lt;/p&gt;</comment>
                    <comment id="30563" author="jafingerhut" created="Thu, 7 Feb 2013 08:54:33 -0600"  >&lt;p&gt;clj-1080-eliminate-many-reflection-warnings-patch-v3.txt dated Feb 7 2013 is identical to the previous patch (to be removed soon), except it applies cleanly to latest master.  One type hint in the patch was added due to a different change, and was no longer needed in the patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11841" name="clj-1080-eliminate-many-reflection-warnings-patch-v3.txt" size="19090" author="jafingerhut" created="Thu, 7 Feb 2013 08:54:33 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1079] Don&apos;t squash explicit :line and :column metadata in the MetaReader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1079</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I have been experimenting with using &lt;a href=&quot;https://github.com/lynaghk/cljx&quot;&gt;cljx&lt;/a&gt; to produce Clojure and ClojureScript source from a single file.  This has gone well so far, with the exception that, due to the way the source transformation works, all of the linebreaks and other formatting is gone from the output.  There is an option to include the original &lt;tt&gt;:line&lt;/tt&gt; metadata in the output though, like so:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;;This file autogenerated from 
;;
;;  src/cljx/com/foo/hosty.cljx
;;
^{:line 1} (ns com.foo.hosty)
^{:line 3} (defn ^{:clj &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} system-hash [x] ^{:line 5} (&lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;/identityHashCode x))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(Hopefully, such hackery won&apos;t be necessary in the future with &lt;a href=&quot;https://github.com/cgrand/sjacket&quot;&gt;sjacket&lt;/a&gt; or something like it...)&lt;/p&gt;

&lt;p&gt;Unfortunately, when read in using a &lt;tt&gt;LineNumberingPushbackReader&lt;/tt&gt;, code like this has its &lt;tt&gt;:line&lt;/tt&gt; metadata squashed by the line numbers coming from that.  A REPL-friendly example would be:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;=&amp;gt; (meta (read (clojure.lang.LineNumberingPushbackReader.
                 (java.io.StringReader. &lt;span class=&quot;code-quote&quot;&gt;&quot;^{:line 66} ()&quot;&lt;/span&gt;))))
{:line 1}
=&amp;gt; (meta (read (java.io.PushbackReader.
                 (java.io.StringReader. &lt;span class=&quot;code-quote&quot;&gt;&quot;^{:line 66} ()&quot;&lt;/span&gt;))))
{:line 66}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The latter seems more correct to me (and is equivalent to &lt;tt&gt;read-string&lt;/tt&gt;).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15727">CLJ-1079</key>
            <summary>Don&apos;t squash explicit :line and :column metadata in the MetaReader</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Sat, 29 Sep 2012 17:12:45 -0500</created>
                <updated>Thu, 7 Feb 2013 12:35:21 -0600</updated>
                                    <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29578" author="cemerick" created="Sat, 29 Sep 2012 19:07:42 -0500"  >&lt;p&gt;{{&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1097&quot; title=&quot;node-seq for clojure.zip&quot;&gt;CLJ-1097&lt;/a&gt;.diff}} contains a fix for this issue, as well as a separate commit that eliminates a series of casts in order to improve readability in the area.&lt;/p&gt;</comment>
                    <comment id="29604" author="jafingerhut" created="Fri, 5 Oct 2012 08:23:47 -0500"  >&lt;p&gt;Chas, your patch doesn&apos;t apply cleanly to latest Clojure master as of Oct 5 2012.  I&apos;m not sure, but I think some recent commits to Clojure on Oct 4 2012 caused that.  I also take it as evidence of your awesomeness that you can write patches for tickets that haven&apos;t been filed yet &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="29605" author="cemerick" created="Fri, 5 Oct 2012 09:24:05 -0500"  >&lt;p&gt;&quot;patches for tickets that haven&apos;t been filed yet?&quot;&lt;/p&gt;

&lt;p&gt;Anyway, tweaking up this patch is a small price to pay for having column meta.  New {{&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1097&quot; title=&quot;node-seq for clojure.zip&quot;&gt;CLJ-1097&lt;/a&gt;.diff}} patch attached, applies clean on master as of now.  Otherwise same contents as in the original patch, except:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;the same dynamic is also applied to &lt;tt&gt;:column&lt;/tt&gt; metadata, now that it&apos;s available&lt;/li&gt;
	&lt;li&gt;the changes have been rebased into a single commit (including the elimination of the casts in &lt;tt&gt;MetaReader&lt;/tt&gt;, which were becoming so numerous that the code was less readable than most&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="29606" author="bronsa" created="Fri, 5 Oct 2012 09:39:21 -0500"  >&lt;p&gt;&quot;patches for tickets that haven&apos;t been filed yet?&quot;&lt;/p&gt;

&lt;p&gt;He was referring to the fact that you uploaded &quot;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1097&quot; title=&quot;node-seq for clojure.zip&quot;&gt;CLJ-1097&lt;/a&gt;.diff&quot; while the ticket is #1079 &lt;/p&gt;</comment>
                    <comment id="29607" author="cemerick" created="Fri, 5 Oct 2012 09:42:14 -0500"  >&lt;p&gt;Oh, hah! Twice now, even! One more data point recommending my having slight dyslexia or somesuch. :-P&lt;/p&gt;

&lt;p&gt;I&apos;ve replaced the attached patch with one that is named properly to avoid any later confusion.&lt;/p&gt;</comment>
                    <comment id="29612" author="cemerick" created="Sun, 7 Oct 2012 15:57:29 -0500"  >&lt;p&gt;Refreshed patch to apply cleanly to master after the recent &lt;a href=&quot;https://github.com/clojure/clojure/commit/65b5f73a9be30669116fcddb6ced9e60680532e5&quot;&gt;off by one patch for &lt;tt&gt;:column&lt;/tt&gt; metadata&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="29699" author="stu" created="Fri, 19 Oct 2012 15:12:42 -0500"  >&lt;p&gt;This feels backwards to me. If a special purpose tool wants to convey information via metadata, why does it use names that collide with those used by LispReader?&lt;/p&gt;</comment>
                    <comment id="29716" author="cemerick" created="Fri, 19 Oct 2012 19:36:17 -0500"  >&lt;p&gt;The information being conveyed is the same &lt;tt&gt;:line&lt;/tt&gt; and &lt;tt&gt;:column&lt;/tt&gt; metadata conveyed by &lt;tt&gt;LispReader&lt;/tt&gt; &#8212;&#160;in fact, that&apos;s where it comes from in the first place.&lt;/p&gt;

&lt;p&gt;Kibit (and cljx) is essentially an out-of-band source transformation tool.  Given an input like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns com.foo.hosty)

(defn ^:clj system-hash
  [x]
 (&lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;/identityHashCode x))

(defn ^:cljs system-hash
  [x]
  (goog/getUid x))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&#8230;it produces two files, a &lt;tt&gt;.clj&lt;/tt&gt; for Clojure, and a &lt;tt&gt;.cljs&lt;/tt&gt; for ClojureScript.  (The first code listing in the ticket description is the former.)&lt;/p&gt;

&lt;p&gt;However, because there&apos;s no way to transform Clojure code/data without losing formatting, anything that depends on line/column numbers (stack traces, stepping debuggers) is significantly degraded.  If &lt;tt&gt;LispReader&lt;/tt&gt; were to defer to &lt;tt&gt;:line&lt;/tt&gt; and &lt;tt&gt;:column&lt;/tt&gt; metadata already available on the loaded forms (there when the two generated files are spit out with &lt;tt&gt;&amp;#42;print-meta&amp;#42;&lt;/tt&gt; on), this would not be the case.&lt;/p&gt;</comment>
                    <comment id="30562" author="jafingerhut" created="Thu, 7 Feb 2013 08:47:49 -0600"  >&lt;p&gt;clj-1079-patch-v2.txt dated Feb 7 2013 is identical to Chas&apos;s &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1079&quot; title=&quot;Don&amp;#39;t squash explicit :line and :column metadata in the MetaReader&quot;&gt;CLJ-1079&lt;/a&gt;.diff dated Oct 7 2012, except it applies cleanly to latest master.  I believe the only difference is that some white space in the context lines is updated.&lt;/p&gt;</comment>
                    <comment id="30566" author="jafingerhut" created="Thu, 7 Feb 2013 12:35:08 -0600"  >&lt;p&gt;Sorry for the noise.  I&apos;ve removed clj-1079-patch-v2.txt mentioned in the previous comment, because I learned that &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1079&quot; title=&quot;Don&amp;#39;t squash explicit :line and :column metadata in the MetaReader&quot;&gt;CLJ-1079&lt;/a&gt;.diff dated Oct 7 2012 applies cleanly to latest master and passes all tests if you use this command to apply it.&lt;/p&gt;

&lt;p&gt;% git am --keep-cr -s --ignore-whitespace &amp;lt; &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1079&quot; title=&quot;Don&amp;#39;t squash explicit :line and :column metadata in the MetaReader&quot;&gt;CLJ-1079&lt;/a&gt;.diff&lt;/p&gt;

&lt;p&gt;I will update the JIRA workflow page instructions for applying patches to mention this, too, because there are multiple patches that fail without --ignore-whitespace, but apply cleanly with that option.  That will eliminate the need to update patches merely for whitespace changes.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11542" name="CLJ-1079.diff" size="4665" author="cemerick" created="Sun, 7 Oct 2012 15:57:29 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1078] Added queue, queue* and queue? to clojure.core</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1078</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This patch adds functions for PersistentQueue. queue, queue? and queue* match the list functions of the same naming conventions. Patches include updates to tests. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15723">CLJ-1078</key>
            <summary>Added queue, queue* and queue? to clojure.core</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="halgari">Timothy Baldridge</reporter>
                        <labels>
                        <label>data-structures</label>
                        <label>queue</label>
                    </labels>
                <created>Wed, 26 Sep 2012 23:38:59 -0500</created>
                <updated>Sat, 6 Apr 2013 08:06:15 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29551" author="jafingerhut" created="Fri, 28 Sep 2012 08:43:06 -0500"  >&lt;p&gt;Timothy, I tried applying both of these Sep 26, 2012 patches to latest Clojure master as of that date.  I had to apply 0001-make-PersistentQueue-ctor-public.patch by hand since it failed to apply using git or patch.  It built fine, but failed to pass several of the Clojure tests.  Have you looked into those test failures to see if you can find the cause and fix them?  I tested on Ubuntu 11.10 with Oracle JDK 1.6 and 1.7, and saw similar failures with both.&lt;/p&gt;</comment>
                    <comment id="29817" author="halgari" created="Fri, 26 Oct 2012 17:23:06 -0500"  >&lt;p&gt;Fixed the patch. Tests pass, created the patch, applied it to a different copy of the source and the tests still pass. So this new patch should be good to go.&lt;/p&gt;</comment>
                    <comment id="29818" author="jafingerhut" created="Fri, 26 Oct 2012 17:43:43 -0500"  >&lt;p&gt;Timothy, I&apos;m not sure how you are getting successful results when applying this patch.  Can you try the steps below and see what happens for you?  I get errors trying to apply the patch with latest Clojure master as of Oct 26, 2012.  Also please use the steps on the JIRA workflow page to create a git format patch (&lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt; under &quot;Development&quot; heading).&lt;/p&gt;

&lt;p&gt;% git clone git://github.com/clojure/clojure.git&lt;br/&gt;
% cd clojure&lt;br/&gt;
% patch -p1 &amp;lt; queues.patch&lt;br/&gt;
patching file src/clj/clojure/core.clj&lt;br/&gt;
patching file src/jvm/clojure/lang/PersistentQueue.java&lt;br/&gt;
Hunk #1 FAILED at 32.&lt;br/&gt;
1 out of 1 hunk FAILED &amp;#8211; saving rejects to file src/jvm/clojure/lang/PersistentQueue.java.rej&lt;br/&gt;
patching file test/clojure/test_clojure/data_structures.clj&lt;br/&gt;
Hunk #1 succeeded at 123 with fuzz 2.&lt;br/&gt;
Hunk #2 succeeded at 861 with fuzz 2.&lt;br/&gt;
Hunk #3 FAILED at 872.&lt;br/&gt;
1 out of 3 hunks FAILED &amp;#8211; saving rejects to file test/clojure/test_clojure/data_structures.clj.rej&lt;br/&gt;
patching file test/clojure/test_clojure/java_interop.clj&lt;/p&gt;</comment>
                    <comment id="29821" author="halgari" created="Fri, 26 Oct 2012 18:08:27 -0500"  >&lt;p&gt;I was using git apply. I tried the method you show above, and now I&apos;m seeing the same issues you show above. &lt;/p&gt;</comment>
                    <comment id="29822" author="jafingerhut" created="Fri, 26 Oct 2012 18:26:54 -0500"  >&lt;p&gt;Just so you know, the preferred way to create and apply patches are the &quot;git format-patch master --stdout &amp;gt; patch.txt&quot; to create a patch (after doing the branching commands described on the JIRA workflow page to create a branch for your changes), and the &quot;git am --keep-cr -s &amp;lt; patch.txt&quot; to apply a patch.  If a patch was created that way and applies cleanly with that command, then you are definitely good to go.&lt;/p&gt;

&lt;p&gt;The &quot;patch -p1 &amp;lt; patch.txt&quot; command is just a secondary method sometimes used to try to apply patches that aren&apos;t in the format produced above, or have errors when applying using that method.&lt;/p&gt;</comment>
                    <comment id="29824" author="halgari" created="Fri, 26 Oct 2012 21:15:43 -0500"  >&lt;p&gt;Just so you know, the preferred way to create and apply patches are the &quot;git format-patch master --stdout &amp;gt; patch.txt&quot; to create a patch (after doing the branching commands described on the JIRA workflow page to create a branch for your changes), and the &quot;git am --keep-cr -s &amp;lt; patch.txt&quot; to apply a patch. If a patch was created that way and applies cleanly with that command, then you are definitely good to go.&lt;/p&gt;

&lt;p&gt;The &quot;patch -p1 &amp;lt; patch.txt&quot; command is just a secondary method sometimes used to try to apply patches that aren&apos;t in the format produced above, or have errors when applying using that method.&lt;/p&gt;</comment>
                    <comment id="29825" author="halgari" created="Fri, 26 Oct 2012 21:16:07 -0500"  >&lt;p&gt;added patch&lt;/p&gt;</comment>
                    <comment id="29826" author="jafingerhut" created="Fri, 26 Oct 2012 21:37:45 -0500"  >&lt;p&gt;That one applies cleanly and passes all tests.  It should show up on the next list of prescreened patches.  Thanks.&lt;/p&gt;</comment>
                    <comment id="30086" author="richhickey" created="Thu, 29 Nov 2012 09:54:51 -0600"  >&lt;p&gt;we don&apos;t use the queue* convention elsewhere, e.g. vec and vector. I think queue should take a collection like vec and set. (queue &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;) could be made to &apos;adopt&apos; the collection as front.&lt;/p&gt;</comment>
                    <comment id="30215" author="jafingerhut" created="Tue, 11 Dec 2012 13:00:59 -0600"  >&lt;p&gt;Patch queue.patch dated Oct 26 2012 no longer applies cleanly after recent &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1000&quot; title=&quot;Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?&quot;&gt;&lt;del&gt;CLJ-1000&lt;/del&gt;&lt;/a&gt; commits, but only because of one line of changed patch context.  It still applies cleanly with &quot;patch -p1 &amp;lt; queue.patch&quot;.  Not bothering to update the stale patch given Rich&apos;s comments suggesting more substantive changes.&lt;/p&gt;</comment>
                    <comment id="30883" author="steveminer@gmail.com" created="Sat, 6 Apr 2013 08:06:15 -0500"  >&lt;p&gt;See also &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-976&quot; title=&quot;Implement reader literal and print support for PersistentQueue data structure&quot;&gt;CLJ-976&lt;/a&gt; (tagged literal support for PersistentQueue)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11622" name="queue.patch" size="6548" author="halgari" created="Fri, 26 Oct 2012 21:16:07 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1077] thread-bound? returns true (implying set! should succeed) even for non-binding thread</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1077</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;thread-bound? returns true for a non-binding thread, this result (according to the docstring) implies that set! should succeed.  However, thread-bound? does not check that any binding that might exist was created by the current thread, and calling set! fails with an exception when it is called from a non-binding thread, even though thread-bound? returns true.&lt;/p&gt;

&lt;p&gt;thread-bound? should return false if there is a binding, and that binding was not established by the current thread.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15720">CLJ-1077</key>
            <summary>thread-bound? returns true (implying set! should succeed) even for non-binding thread</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Sep 2012 13:51:28 -0500</created>
                <updated>Mon, 1 Oct 2012 11:57:10 -0500</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29584" author="pjstadig" created="Mon, 1 Oct 2012 10:07:00 -0500"  >&lt;p&gt;I have attached a patch that changes clojure.lang.Var and clojure.core/thread-bound? to only return true if a Var is set!-able.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11535" name="thread-bound.diff" size="1261" author="pjstadig" created="Mon, 1 Oct 2012 10:07:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1076] pprint tests fail on Windows, expecting \n</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1076</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;New pprint tests were committed recently, but they fail on Windows because the tests check for \n, while pprint seems to output \r\n.  A log with the test failures is attached.&lt;/p&gt;

&lt;p&gt;The first failing commit is &lt;a href=&quot;https://github.com/clojure/clojure/commit/4ca0f7ea17888ba7ed56d2fde0bc2d6397e8e1c0&quot;&gt;https://github.com/clojure/clojure/commit/4ca0f7ea17888ba7ed56d2fde0bc2d6397e8e1c0&lt;/a&gt;&lt;/p&gt;</description>
                <environment>Windows 7</environment>
            <key id="15719">CLJ-1076</key>
            <summary>pprint tests fail on Windows, expecting \n</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ivan">Ivan Kozik</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Sep 2012 02:34:19 -0500</created>
                <updated>Sat, 2 Mar 2013 14:51:46 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29575" author="jafingerhut" created="Sat, 29 Sep 2012 14:27:55 -0500"  >&lt;p&gt;Patch clj-1076-fix-tests-on-windows-patch-v1.txt dated Sep 29 2012 when applied to the particular commit that Ivan mentions causes the tests to pass when I run &quot;ant&quot; on a Windows 7 machine for me, and it continues to pass all tests on Mac OS X 10.6.8, too.&lt;/p&gt;

&lt;p&gt;I may be doing something wrong, but when I try to run &quot;ant&quot; to build and test on Windows 7 with latest Clojure master, with or without this patch, it fails right at the beginning of the tests because it can&apos;t find clojure.test.generative.  I&apos;m probably doing something wrong somewhere.  Ivan, would you be able to test this patch on Windows with the latest Clojure master to see if all tests pass for you now?&lt;/p&gt;</comment>
                    <comment id="29576" author="ivan" created="Sat, 29 Sep 2012 14:59:02 -0500"  >&lt;p&gt;All tests pass on Windows 7 here with the patch.&lt;/p&gt;

&lt;p&gt;Ant can&apos;t find my test.generative either because it isn&apos;t in my &quot;${maven.test.classpath}&quot;.  I put it in CLASSPATH and modified my build.xml like this:&lt;br/&gt;
&lt;br/&gt;
     &amp;lt;java classname=&quot;clojure.main&quot; failonerror=&quot;false&quot; fork=&quot;true&quot;&amp;gt;&lt;br/&gt;
       &amp;lt;classpath&amp;gt;&lt;br/&gt;
+        &amp;lt;pathelement path=&quot;${java.class.path}&quot;/&amp;gt;&lt;br/&gt;
         &amp;lt;pathelement path=&quot;${maven.test.classpath}&quot;/&amp;gt;&lt;/p&gt;</comment>
                    <comment id="30205" author="jafingerhut" created="Mon, 10 Dec 2012 13:33:33 -0600"  >&lt;p&gt;Just as a rough idea of how often people are hitting this issue, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1123&quot; title=&quot;UNIX/Windows line endings - clojure.pprint tests cause failure in Windows build&quot;&gt;&lt;del&gt;CLJ-1123&lt;/del&gt;&lt;/a&gt; was opened on Dec 9 2012 and then closed when the ticket creator realized it was a duplicate of this one.&lt;/p&gt;</comment>
                    <comment id="30455" author="mikera" created="Fri, 18 Jan 2013 19:44:14 -0600"  >&lt;p&gt;Hi there is this likely to get fixed soon?&lt;/p&gt;

&lt;p&gt;I&apos;d like to help contribute some more patches to Clojure but it&apos;s tricky to do when I can&apos;t get the build to work &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="30456" author="jafingerhut" created="Fri, 18 Jan 2013 20:39:22 -0600"  >&lt;p&gt;I do not know if or when this patch will be committed to Clojure.&lt;/p&gt;

&lt;p&gt;I can tell you that you can apply the patch to your own local copy of the Clojure source code, and then develop new Clojure patches based upon that version.  The patch that fixes this problem only affects one test file, so it is unlikely to conflict with any changes you develop and submit.&lt;/p&gt;</comment>
                    <comment id="30467" author="mikera" created="Mon, 21 Jan 2013 06:36:19 -0600"  >&lt;p&gt;I can confirm this patch works fine for me on Windows with Maven/Eclipse&lt;/p&gt;

&lt;p&gt;Suggest this patch gets pushed through approval and applied ASAP? It&apos;s a pretty obvious fix that is breaking the build....&lt;/p&gt;</comment>
                    <comment id="30680" author="stu" created="Fri, 1 Mar 2013 12:44:25 -0600"  >&lt;p&gt;This patch is sloppy &amp;#8211; it makes unnecessary whitespace changes in several places.&lt;/p&gt;

&lt;p&gt;Would it be better to make the tests trailing whitespace agnostic?  Otherwise this feels like poking and prodding until the build box is happy.&lt;/p&gt;</comment>
                    <comment id="30686" author="jafingerhut" created="Sat, 2 Mar 2013 14:50:31 -0600"  >&lt;p&gt;Patch clj-1076-fix-tests-on-windows-patch-v2.txt dated Mar 2, 2013 fixes pprint tests on Windows in a different way: Removing all occurrences of carriage return (\r) characters in the output of pprint before comparing it to the expected string.&lt;/p&gt;

&lt;p&gt;I tried simply doing str/trim-newline to remove newlines and carriage returns at the end of the string, but that does not make the tests pass.  They still fail due to carriage returns in the middle of the string.&lt;/p&gt;</comment>
                    <comment id="30687" author="jafingerhut" created="Sat, 2 Mar 2013 14:51:46 -0600"  >&lt;p&gt;Presumptuously changing Approval from Incomplete back to None, since there is a new patch attached that should address the reason it was marked Incomplete.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11531" name="clj-1076-fix-tests-on-windows-patch-v1.txt" size="3039" author="jafingerhut" created="Sat, 29 Sep 2012 14:27:55 -0500" />
                    <attachment id="11886" name="clj-1076-fix-tests-on-windows-patch-v2.txt" size="1711" author="jafingerhut" created="Sat, 2 Mar 2013 14:50:31 -0600" />
                    <attachment id="11523" name="pprint_test_failures_01b4cb7156.txt" size="25618" author="ivan" created="Wed, 26 Sep 2012 02:34:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1075] deftype: compiler error on set! for mutable field</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1075</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The following code demonstrates the error in a minimal example:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defprotocol IBlob (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-sth [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, x]))

(deftype Blob [^{:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} a]
  IBlob
  (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-sth [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, x] 
    (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (/ 1 x) 
      (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Throwable t 
        (set! a (inc a))))
        (inc x)))

(deftype Blob2 [^{:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} a]
  IBlob
  (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-sth [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, x] 
    (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (/ 1 x) 
      (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Throwable t 
        (set! a (inc a))))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compiling &lt;b&gt;Blob&lt;/b&gt; results in the following exception:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CompilerException java.lang.IllegalArgumentException: Cannot assign to non-mutable: a&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Compiling &lt;b&gt;Blob2&lt;/b&gt; works as expected.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15718">CLJ-1075</key>
            <summary>deftype: compiler error on set! for mutable field</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gv">Gunnar V&#246;lkel</reporter>
                        <labels>
                    </labels>
                <created>Mon, 24 Sep 2012 08:53:01 -0500</created>
                <updated>Mon, 3 Dec 2012 10:52:03 -0600</updated>
                    <resolved>Mon, 3 Dec 2012 10:52:03 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29529" author="chouser@n01se.net" created="Mon, 24 Sep 2012 09:13:35 -0500"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defmethod print-method clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$LocalBinding 
  [^clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$LocalBinding o w]
  (.write w
    (str &lt;span class=&quot;code-quote&quot;&gt;&quot;#&amp;lt;LB &quot;&lt;/span&gt;
      (binding [*print-meta* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
        (pr-str {:sym (.-sym o)
                 :tag (.-tag o)
                 :idx (.-idx o)
                 :name (.-name o)
                 :isArg (.-isArg o)
                 :canBeCleared (.canBeCleared o)
                 :recurMistmatch (.-recurMistmatch o)})) &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;gt;&quot;&lt;/span&gt;)))

(defmacro prn-env []
  (doseq [[_ lb] &amp;amp;env]
    (prn lb)))

(deftype T [^:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable x]
  clojure.lang.IDeref
  (deref [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;]
    (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
      (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e
        (prn-env)
        (set! x 0)))
    1))

#&amp;lt;LB {:sym ^{:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} x, :tag nil, :idx -1, :name &lt;span class=&quot;code-quote&quot;&gt;&quot;x&quot;&lt;/span&gt;, :isArg &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;, :canBeCleared &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :recurMistmatch &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;}&amp;gt;
#&amp;lt;LB {:sym e, :tag Exception, :idx 3, :name &lt;span class=&quot;code-quote&quot;&gt;&quot;e&quot;&lt;/span&gt;, :isArg &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;, :canBeCleared &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :recurMistmatch &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;}&amp;gt;
#&amp;lt;LB {:sym &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, :tag compile__stub.user.T, :idx 0, :name &lt;span class=&quot;code-quote&quot;&gt;&quot;&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;&quot;&lt;/span&gt;, :isArg &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;, :canBeCleared &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :recurMistmatch &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;}&amp;gt;
CompilerException java.lang.IllegalArgumentException: Cannot assign to non-mutable: x, compiling:(NO_SOURCE_PATH:1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29530" author="gv" created="Mon, 24 Sep 2012 09:21:56 -0500"  >&lt;p&gt;As a workaround you can create a setter method for that field, e.g.&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(set-a [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, na] (set! a na))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29531" author="jafingerhut" created="Mon, 24 Sep 2012 10:06:59 -0500"  >&lt;p&gt;Is this the same issue as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1023&quot; title=&quot;non-tail-position try block breaks mutable fields in deftype&quot;&gt;&lt;del&gt;CLJ-1023&lt;/del&gt;&lt;/a&gt;?&lt;/p&gt;</comment>
                    <comment id="29594" author="gv" created="Thu, 4 Oct 2012 04:15:31 -0500"  >&lt;p&gt;That one looks very similar, yes.&lt;br/&gt;
The &quot;non-tail try-catch as closure&quot; being the problem, would explain the examples above, as well.&lt;/p&gt;</comment>
                    <comment id="30159" author="halgari" created="Mon, 3 Dec 2012 10:52:03 -0600"  >&lt;p&gt;closing as duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1023&quot; title=&quot;non-tail-position try block breaks mutable fields in deftype&quot;&gt;&lt;del&gt;CLJ-1023&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1074] Read/print round-trip for +/-Infinity and NaN</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1074</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A few float-related forms (namely, Double/POSITIVE_INFINITY, Double/NEGATIVE_INFINITY, Double/NaN) are not eval-able after a round-trip via &lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(read-string (binding [*print-dup* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;] (pr-str f))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;The two options I see are to provide print-method implementations for these and their Float cousins, or to make Infinity, -Infinity, +Infinity, and NaN readable values. Since it sounds like edn may want to provide a spec for these values (see  &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/LeJpOhHxESs/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/LeJpOhHxESs/discussion&lt;/a&gt; and &lt;a href=&quot;https://github.com/edn-format/edn/issues/2&quot;&gt;https://github.com/edn-format/edn/issues/2&lt;/a&gt;), I think making these values directly readable as already printed is preferable. Something like Double/POSITIVE_INFINITY seems too low-level from edn&apos;s perspective, as it would refer to a Java class and constant.&lt;/p&gt;

&lt;p&gt;I&apos;m attaching a patch implementing reader support for Infinity, -Infinity, +Infinity, and NaN.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15714">CLJ-1074</key>
            <summary>Read/print round-trip for +/-Infinity and NaN</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Fri, 21 Sep 2012 19:13:48 -0500</created>
                <updated>Mon, 3 Dec 2012 13:18:40 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30167" author="halgari" created="Mon, 3 Dec 2012 11:34:16 -0600"  >&lt;p&gt;Please bring this up on clojure-dev. We&apos;ll be able to vet this ticket after that. &lt;/p&gt;
</comment>
                    <comment id="30168" author="trptcolin" created="Mon, 3 Dec 2012 13:18:40 -0600"  >&lt;p&gt;Should I respond to my original clojure-dev post about this (linked in the issue description above), or start a new one?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11520" name="0001-Read-Infinity-and-NaN.patch" size="1544" author="trptcolin" created="Fri, 21 Sep 2012 19:13:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1073] Make print-sequential interruptible</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1073</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This allows print-sequential to be interrupted by Thread.interrupt(), rather than requiring clients to resort to Thread.stop(). This is especially helpful when printing very large sequences.&lt;/p&gt;

&lt;p&gt;See also clojure-dev discussion at &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/vs0RNUQXiYE/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/vs0RNUQXiYE/discussion&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15713">CLJ-1073</key>
            <summary>Make print-sequential interruptible</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Fri, 21 Sep 2012 16:10:46 -0500</created>
                <updated>Fri, 1 Mar 2013 10:18:01 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29522" author="jafingerhut" created="Fri, 21 Sep 2012 19:04:21 -0500"  >&lt;p&gt;In a quickly hacked up performance test on Mac OS X 10.6.8 + Oracle/Apple JDK 1.6.0_35 which I can attach, I saw about a 9% to 10% slowdown for Colin&apos;s patch in printing large vectors.&lt;/p&gt;

&lt;p&gt;I have a modified patch that only calls Thread/interrupted after every 20 items are printed, and with that version the slowdown versus the original code was about 3% to 4%.&lt;/p&gt;

&lt;p&gt;Colin, would there be any down side to checking Thread/interrupted less often for your purposes?&lt;/p&gt;

&lt;p&gt;To run performance test, edit attachment compile.sh to point at your clojure.jar, put file perftest-print.clj in the same directory, and run ./compile.sh    It should work on Mac or Linux.&lt;/p&gt;</comment>
                    <comment id="29523" author="jafingerhut" created="Sat, 22 Sep 2012 10:47:08 -0500"  >&lt;p&gt;clj-1073-allow-thread-interrupt-in-print-sequential-patch.txt dated Sep 22 2012 is similar to Colin&apos;s patch 0001-Allow-thread-interruption-in-print-sequential.patch dated Sep 21 2012, except it only checks interrupted status every 20 (or maybe 21?) times through the loop in print-sequential.  It is the one that is 3-4% slower than the current latest master Clojure code in my performance test mentioned above, versus Colin&apos;s patch which is about 9-10% slower on that test.&lt;/p&gt;</comment>
                    <comment id="29700" author="stu" created="Fri, 19 Oct 2012 15:31:32 -0500"  >&lt;p&gt;Is this primarily intended for dev-time use? I wouldn&apos;t want to lose performance for this if there is any way to implement it as a dev-time feature.&lt;/p&gt;</comment>
                    <comment id="29701" author="trptcolin" created="Fri, 19 Oct 2012 16:27:09 -0500"  >&lt;p&gt;Andy: The only caveat I can think of with checking Thread/interrupted less often is in the case of deeply nested collections.&lt;/p&gt;

&lt;p&gt;Stu: Dev-time use was the original reason for opening this, yes. But I can imagine it being needed for anytime a thread can be interrupted, whether that&apos;s by ctrl-c or other means.&lt;/p&gt;

&lt;p&gt;My original thinking, performance-wise, was that once we&apos;re already doing IO, we&apos;re probably not too concerned with CPU-bound checks like this, so I didn&apos;t bother with it. I guess with an SSD that&apos;s not as likely to be true.&lt;/p&gt;

&lt;p&gt;Locally (w/ my SSD), I&apos;m seeing that Andy&apos;s benchmark of printing a million numbers is about a second slower than the baseline with my original patch (12.08s -&amp;gt; 13.10s), and about the same with Andy&apos;s patch (12.08s -&amp;gt; 11.75s). Decreasing to a thousand numbers doesn&apos;t really show any difference (every version completes in ~1.3s). Bumping to 2 million adds 2 seconds above the baseline with my patch, and Andy&apos;s is again just a bit faster than the baseline (somehow). Bumping to 5 million runs me out of heap space &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="29913" author="jafingerhut" created="Thu, 8 Nov 2012 16:16:24 -0600"  >&lt;p&gt;clj-1073-add-print-interruptibly-patch-v1.txt dated Nov 8 2012 is the same idea as Colin&apos;s patch 0001-Allow-thread-interruption-in-print-sequential.patch dated Sep 21 2012, except it only checks (Thread/interrupted) if a new var &lt;b&gt;print-interruptibly&lt;/b&gt; is true.  Its default value is false.&lt;/p&gt;

&lt;p&gt;Performance results of the perftest-print.clj program, as driven by the test.sh script, for Clojure 1.5-beta1 and with two different patches.  All run times are elapsed, in seconds, and sorted in increasing order for easier comparison.&lt;/p&gt;

&lt;p&gt;Executive summary: Performance results when &lt;b&gt;print-interruptibly&lt;/b&gt; is left at default false value are pretty much same as today.  With &lt;b&gt;print-interruptibly&lt;/b&gt; bound to true, performance results are slower, as expected, and about the same as with Colin&apos;s patch.&lt;/p&gt;

&lt;p&gt;Original 1.5-beta1 unchanged:&lt;br/&gt;
13.75 13.80 13.83 13.87 13.93&lt;/p&gt;

&lt;p&gt;With this new &lt;b&gt;print-interruptibly&lt;/b&gt; patch, with &lt;b&gt;print-interruptibly&lt;/b&gt;&lt;br/&gt;
at default false value:&lt;br/&gt;
13.86 13.91 14.01 14.08 14.14&lt;/p&gt;

&lt;p&gt;With this new &lt;b&gt;print-interruptibly&lt;/b&gt; patch, with &lt;b&gt;print-interruptibly&lt;/b&gt;&lt;br/&gt;
bound to true while printing (so a slightly modified version of&lt;br/&gt;
perftest-print.clj that does (binding &lt;span class=&quot;error&quot;&gt;&amp;#91;*print-interruptibly* true&amp;#93;&lt;/span&gt;&lt;br/&gt;
...) around the heart of the code):&lt;br/&gt;
15.29 15.44 15.45 15.62 15.63&lt;/p&gt;

&lt;p&gt;With patch 0001-Allow-thread-interruption-in-print-sequential.patch&lt;br/&gt;
applied:&lt;br/&gt;
15.38 15.46 15.48 15.49 15.50&lt;/p&gt;</comment>
                    <comment id="29933" author="trptcolin" created="Mon, 12 Nov 2012 13:37:10 -0600"  >&lt;p&gt;Andy&apos;s latest patch looks good &amp;amp; makes it easy for the REPL and other interruptible scenarios to opt into the &quot;safe&quot; behavior. I would personally have preferred to have the &quot;safe&quot; behavior on by default, but can understand the performance concerns, and this gets me what I really wanted.&lt;/p&gt;</comment>
                    <comment id="30122" author="halgari" created="Fri, 30 Nov 2012 15:09:07 -0600"  >&lt;p&gt;Vetting as it sounds like the performance issues are taken care of. &lt;/p&gt;</comment>
                    <comment id="30580" author="jafingerhut" created="Wed, 13 Feb 2013 00:28:34 -0600"  >&lt;p&gt;clj-1073-add-print-interruptibly-patch-v2.txt dated Feb 12 2013 is identical to clj-1073-add-print-interruptibly-patch-v1.txt dated Nov 8 2012 (soon to be removed) except that it applies cleanly to latest master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11517" name="0001-Allow-thread-interruption-in-print-sequential.patch" size="1260" author="trptcolin" created="Fri, 21 Sep 2012 16:10:46 -0500" />
                    <attachment id="11850" name="clj-1073-add-print-interruptibly-patch-v2.txt" size="3902" author="jafingerhut" created="Wed, 13 Feb 2013 00:28:34 -0600" />
                    <attachment id="11519" name="perftest-print.clj" size="284" author="jafingerhut" created="Fri, 21 Sep 2012 19:05:46 -0500" />
                    <attachment id="11518" name="test.sh" size="298" author="jafingerhut" created="Fri, 21 Sep 2012 19:05:34 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1072] Replace old metadata reader macro syntax</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1072</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;5 files still have old metadata reader syntax hash-caret instead of just caret:&lt;/p&gt;

&lt;p&gt;src/clj/clojure/core.clj&lt;br/&gt;
src/clj/clojure/gvec.clj&lt;br/&gt;
src/clj/clojure/java/browse_ui.clj&lt;br/&gt;
src/clj/clojure/java/io.clj&lt;br/&gt;
src/clj/clojure/repl.clj&lt;/p&gt;</description>
                <environment></environment>
            <key id="15709">CLJ-1072</key>
            <summary>Replace old metadata reader macro syntax</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="samaaron">Sam Aaron</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Sep 2012 05:30:17 -0500</created>
                <updated>Fri, 12 Apr 2013 08:13:37 -0500</updated>
                                    <version>Release 1.4</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29511" author="stuart.sierra" created="Fri, 21 Sep 2012 07:56:24 -0500"  >&lt;p&gt;Modified this ticket to cover all remaining cases of old metadata syntax. Added patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11515" name="0001-CLJ-1072-Replace-old-metadata-reader-macro-syntax.patch" size="8627" author="stuart.sierra" created="Fri, 21 Sep 2012 07:56:24 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1071] ExceptionInfo does no abstraction</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1071</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There oughtta be an interface&lt;/p&gt;</description>
                <environment></environment>
            <key id="15703">CLJ-1071</key>
            <summary>ExceptionInfo does no abstraction</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Mon, 17 Sep 2012 06:32:54 -0500</created>
                <updated>Fri, 21 Sep 2012 14:21:33 -0500</updated>
                    <resolved>Fri, 21 Sep 2012 14:21:33 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29481" author="stuart.sierra" created="Tue, 18 Sep 2012 08:44:10 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                    <comment id="29482" author="fogus" created="Tue, 18 Sep 2012 08:46:36 -0500"  >&lt;p&gt;Looks fine to me.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11507" name="clj-1071-iexceptioninfo.patch" size="3738" author="stu" created="Mon, 17 Sep 2012 06:45:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1070] PersistentQueue&apos;s hash function does not match its equality</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1070</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There are two issues:&lt;/p&gt;

&lt;p&gt;1) PersistentQueue&apos;s hash function doesn&apos;t match its equiv function:&lt;/p&gt;

&lt;p&gt;(def iq (conj clojure.lang.PersistentQueue/EMPTY (Integer. -1)))&lt;br/&gt;
(def lq (conj clojure.lang.PersistentQueue/EMPTY (Long. -1)))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;(= iq lq) (= (hash iq) (hash lq))&amp;#93;&lt;/span&gt;&lt;br/&gt;
;=&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;true false&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;2) PersistentQueue&apos;s hash function doesn&apos;t match PersistentVector&apos;s hash:&lt;/p&gt;

&lt;p&gt;(def q (conj clojure.lang.PersistentQueue/EMPTY 1 2 3))&lt;br/&gt;
[(= &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; q) (= (hash &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;) (hash q))]&lt;br/&gt;
;=&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;true false&amp;#93;&lt;/span&gt;&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15699">CLJ-1070</key>
            <summary>PersistentQueue&apos;s hash function does not match its equality</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="ppotter">Philip Potter</assignee>
                                <reporter username="ppotter">Philip Potter</reporter>
                        <labels>
                    </labels>
                <created>Sat, 15 Sep 2012 12:26:38 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29450" author="ppotter" created="Sat, 15 Sep 2012 13:52:56 -0500"  >&lt;p&gt;Clojure-dev discussion: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/ME3-Ke-RbNk/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/ME3-Ke-RbNk/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29451" author="ppotter" created="Sat, 15 Sep 2012 14:34:14 -0500"  >&lt;p&gt;Attached patch 001-make-PersistentQueue-hash-match-equiv.diff, 15/Sep/12.&lt;/p&gt;</comment>
                    <comment id="29454" author="ppotter" created="Sat, 15 Sep 2012 16:56:06 -0500"  >&lt;p&gt;Attached 002-make-PersistentQueue-hash-match-equiv.diff, 15/Sep/12. This patch supercedes 001-make-PersistentQueue-hash-match-equiv.diff.&lt;/p&gt;

&lt;p&gt;Replaced test code which calls to Util/hasheq with code which calls hash instead.&lt;/p&gt;

&lt;p&gt;This patch has a minor conflict with my patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1059&quot; title=&quot;PersistentQueue doesn&amp;#39;t implement java.util.List, causing nontransitive equality&quot;&gt;CLJ-1059&lt;/a&gt;, since they both add an interface to PersistentQueue (IHashEq here, List for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1059&quot; title=&quot;PersistentQueue doesn&amp;#39;t implement java.util.List, causing nontransitive equality&quot;&gt;CLJ-1059&lt;/a&gt;).&lt;/p&gt;</comment>
                    <comment id="29477" author="chouser@n01se.net" created="Tue, 18 Sep 2012 01:38:39 -0500"  >&lt;p&gt;Thanks for the patch, Philip, it looks good to me.&lt;/p&gt;

&lt;p&gt;It really is a pity the implementations of hashCode and hasheq are duplicated.  I wonder how important it is to extend Obj?  Regardless, that&apos;s the approach PersistentQueue was already taking, so changing that would be outside the scope of this ticket anyway.&lt;/p&gt;

&lt;p&gt;I can&apos;t apply this patch with &quot;git am&quot;, but &quot;patch -p 1&quot; works fine.  I&apos;m hoping this is a configuration problem on my end, so I&apos;m marking this screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11499" name="001-fix-PersistentQueue-hash.clj" size="2718" author="bronsa" created="Sat, 15 Sep 2012 14:02:04 -0500" />
                    <attachment id="11500" name="001-make-PersistentQueue-hash-match-equiv.diff" size="2539" author="ppotter" created="Sat, 15 Sep 2012 14:34:14 -0500" />
                    <attachment id="11502" name="002-make-PersistentQueue-hash-match-equiv.diff" size="2320" author="ppotter" created="Sat, 15 Sep 2012 16:56:06 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1069] data.priority-map has no artifacts information in the README</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1069</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;data.priority-map README has no artifacts information and does not conform to the Contrib README standards in any way. Because clojure-dev is a closed group, I am filing it here&lt;/p&gt;</description>
                <environment></environment>
            <key id="15696">CLJ-1069</key>
            <summary>data.priority-map has no artifacts information in the README</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 14:07:32 -0500</created>
                <updated>Fri, 14 Sep 2012 15:41:31 -0500</updated>
                    <resolved>Fri, 14 Sep 2012 15:41:31 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29443" author="jafingerhut" created="Fri, 14 Sep 2012 15:41:31 -0500"  >&lt;p&gt;This better belongs as a ticket for the JIRA project specifically for data.priority-map.  It is here: &lt;a href=&quot;http://dev.clojure.org/jira/browse/DPRIMAP&quot;&gt;http://dev.clojure.org/jira/browse/DPRIMAP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have filed a ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/DPRIMAP-2&quot; title=&quot;data.priority-map has no artifacts information in the README&quot;&gt;&lt;del&gt;DPRIMAP-2&lt;/del&gt;&lt;/a&gt; for that project, and will close this one.&lt;/p&gt;

&lt;p&gt;You can find a complete list for all projects here: &lt;a href=&quot;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&quot;&gt;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1068] algo.monads README has no artifacts information</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1068</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;algo.monads README has no artifacts information and does not conform to the Contrib README standards in any way. Because clojure-dev is a closed group, I am filing it here&lt;/p&gt;</description>
                <environment></environment>
            <key id="15695">CLJ-1068</key>
            <summary>algo.monads README has no artifacts information</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 14:06:47 -0500</created>
                <updated>Fri, 14 Sep 2012 15:39:10 -0500</updated>
                    <resolved>Fri, 14 Sep 2012 15:39:10 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29442" author="jafingerhut" created="Fri, 14 Sep 2012 15:38:50 -0500"  >&lt;p&gt;This better belongs as a ticket for the JIRA project specifically for algo.monads.  It is here: &lt;a href=&quot;http://dev.clojure.org/jira/browse/ALGOM&quot;&gt;http://dev.clojure.org/jira/browse/ALGOM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have filed a ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/ALGOM-6&quot; title=&quot;algo.monads README has no artifacts information&quot;&gt;ALGOM-6&lt;/a&gt; for that project, and will close this one.&lt;/p&gt;

&lt;p&gt;You can find a complete list for all projects here: &lt;a href=&quot;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&quot;&gt;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1067] Fix error message inconsistencies in Symbol and Keyword</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1067</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;1. There are some ugly and unnecessary &amp;#8211; but harmless &amp;#8211; inconsistencies between Symbol and Keyword:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(.run &apos;foo);    =&amp;gt; ArityException Wrong number of args (0) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)
(.run :foo);    =&amp;gt; UnsupportedOperationException   clojure.lang.Keyword.run (Keyword.java:97)
(.call &apos;foo);   =&amp;gt; ArityException Wrong number of args (0) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)
(.call :foo);   =&amp;gt; IllegalArgumentException Wrong number of args passed to keyword: :foo  clojure.lang.Keyword.throwArity (Keyword.java:88)
(.invoke &apos;foo); =&amp;gt; ArityException Wrong number of args (0) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)
(.invoke :foo); =&amp;gt; IllegalArgumentException Wrong number of args passed to keyword: :foo  clojure.lang.Keyword.throwArity (Keyword.java:88)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;2. Keyword.java contains a lot of code that has already been factored out to AFn.java.&lt;/p&gt;

&lt;p&gt;I propose that Keyword is modified to extend AFn to resolve the above issues.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15694">CLJ-1067</key>
            <summary>Fix error message inconsistencies in Symbol and Keyword</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="qerub">Christoffer Sawicki</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 11:38:28 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Mon, 17 Sep 2012 07:03:26 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29458" author="stu" created="Mon, 17 Sep 2012 07:03:18 -0500"  >&lt;p&gt;At first glance, it appears that there could be some code sharing here. But the attached patch changes the semantics of run, which is a non-starter.&lt;/p&gt;</comment>
                    <comment id="29462" author="qerub" created="Mon, 17 Sep 2012 07:19:38 -0500"  >&lt;p&gt;The only thing that changes is the type of thrown exception.&lt;/p&gt;

&lt;p&gt;Current call tree:&lt;/p&gt;

&lt;p&gt;Keyword.run() -&amp;gt; throw new UnsupportedOperationException()&lt;/p&gt;

&lt;p&gt;Call tree with patch applied:&lt;/p&gt;

&lt;p&gt;Keyword.run() -&amp;gt; AFn.run() -&amp;gt; AFn.invoke() -&amp;gt; AFn.throwArity(0) -&amp;gt; throw new ArityException(...)&lt;/p&gt;

&lt;p&gt;(I.e. Keyword.run() always throws an exception, with and without my patch.)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11496" name="Make-Keyword-extend-AFn-just-like-Symbol.patch" size="6322" author="qerub" created="Fri, 14 Sep 2012 11:40:42 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1066] No dependency on jsr166y</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1066</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The Clojure 1.5.0-alpha4 jars that have been deployed to maven.org seem to have been compiled against JDK6 which causes&lt;br/&gt;
an exception if one tries to use reducers/fold.&lt;/p&gt;

&lt;p&gt;&amp;#8212; snip &amp;#8212;&lt;br/&gt;
Setup:&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (require &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.core.reducers :as r&amp;#93;&lt;/span&gt;)&lt;br/&gt;
    nil&lt;br/&gt;
    user=&amp;gt; (def v (vec (range 10000)))&lt;br/&gt;
    #&apos;user/v&lt;/p&gt;

&lt;p&gt;;; JDK7 + clojure 1.5.0-alpha4 from maven.org&lt;br/&gt;
;; &#8594; :dependencies [&lt;span class=&quot;error&quot;&gt;&amp;#91;org.clojure/clojure &amp;quot;1.5.0-alpha4&amp;quot;&amp;#93;&lt;/span&gt;] in project.clj&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (r/fold + (r/map inc v))&lt;br/&gt;
    ClassNotFoundException jsr166y.ForkJoinTask  java.net.URLClassLoader$1.run (URLClassLoader.java:366)&lt;/p&gt;

&lt;p&gt;;; JDK7 + clojure 1.5.0-alpha4 from maven.org&lt;br/&gt;
;; &#8594; :dependencies [&lt;span class=&quot;error&quot;&gt;&amp;#91;org.clojure/clojure &amp;quot;1.5.0-alpha4&amp;quot;&amp;#93;&lt;/span&gt;&lt;br/&gt;
;;                  &lt;span class=&quot;error&quot;&gt;&amp;#91;org.codehaus.jsr166-mirror/jsr166y &amp;quot;1.7.0&amp;quot;&amp;#93;&lt;/span&gt;]&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (r/fold + (r/map inc v))&lt;br/&gt;
    50005000&lt;/p&gt;

&lt;p&gt;;; JDK7 + clojure 1.5.0-alpha4 locally compiled (mvn install) against OpenJDK7&lt;br/&gt;
;; &#8594; :dependencies [&lt;span class=&quot;error&quot;&gt;&amp;#91;org.clojure/clojure &amp;quot;1.5.0-alpha4&amp;quot;&amp;#93;&lt;/span&gt;] in project.clj&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (r/fold + (r/map inc v))&lt;br/&gt;
    5000050000&lt;br/&gt;
&amp;#8212; snip &amp;#8212;&lt;/p&gt;

&lt;p&gt;It would be wonderful if this issue could be fixed before the release of 1.5.0.&lt;/p&gt;

&lt;p&gt;Have a nice day&lt;/p&gt;

&lt;p&gt;    Wolodja&lt;/p&gt;</description>
                <environment>$ java -version&lt;br/&gt;
java version &amp;quot;1.7.0_03&amp;quot;&lt;br/&gt;
OpenJDK Runtime Environment (IcedTea7 2.1.2) (7u3-2.1.2-2)&lt;br/&gt;
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)&lt;br/&gt;
$ lein version&lt;br/&gt;
Leiningen 2.0.0-preview10 on Java 1.7.0_03 OpenJDK 64-Bit Server VM&lt;br/&gt;
</environment>
            <key id="15691">CLJ-1066</key>
            <summary>No dependency on jsr166y</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="babilen">Wolodja Wentland</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 11 Sep 2012 10:21:51 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="29427" author="tsdh" created="Wed, 12 Sep 2012 09:44:01 -0500"  >&lt;p&gt;That&apos;s really a nasty problem.  I wrote the code that makes it possible to compile clojure with either a JDK7 and native ForkJoin or an older JDK + jsr166y.  Unfortunately, if you build clojure with a JDK7, reducers&apos; fold requires a JDK7 at runtime, and if you build clojure with a JDK &amp;lt;7 + jsr166y, fold also requires jsr166y at runtime.&lt;/p&gt;

&lt;p&gt;The essential problem is that clojure is AOT-compiled to class-files and those are put into the release jars.  Ordinary clojure libraries are distributed as jar files containing clj files that are compiled when loaded.  There, the implemented approach works just fine.  For example, again your example with 1.5.0-alpha4:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;;; 1.5.0-master4 compiled with JDK6 + jsr166y running on a JDK7
user=&amp;gt; (require &apos;[clojure.core.reducers :as r])
nil
user=&amp;gt; (def v (vec (range 10000)))
#&apos;user/v
user=&amp;gt; (r/fold + (r/map inc v))
ClassNotFoundException jsr166y.ForkJoinTask  java.net.URLClassLoader$1.run (URLClassLoader.java:366)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Now load the reducers.clj source code again, so that it
;; picks the right ForkJoin-impl for the current platform
(load-file &quot;/home/horn/Repos/clj/clojure/src/clj/clojure/core/reducers.clj&quot;)
nil
user=&amp;gt; (r/fold + (r/map inc v))
50005000
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So IMO, the best thing we can do is to omit AOT-compilation for reducers but to include only its clj file so that it&apos;ll be compiled automatically on the platform it eventually runs.&lt;/p&gt;</comment>
                    <comment id="29428" author="tsdh" created="Wed, 12 Sep 2012 11:55:48 -0500"  >&lt;p&gt;This patch removes the clojure.core.reducers namespace from the namespaces to be AOT compiled.  So now this namespace will be JIT-compiled when being required, and at that point either the JDK7 ForkJoin classes or the jsr166y classes need to be there.&lt;/p&gt;</comment>
                    <comment id="29514" author="stu" created="Fri, 21 Sep 2012 13:31:25 -0500"  >&lt;p&gt;Rich: what is the right approach here?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11493" name="0001-Don-t-AOT-compile-clojure.core.reducers.patch" size="929" author="tsdh" created="Wed, 12 Sep 2012 11:55:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1065] Allow duplicate set elements and map keys for all set and map constructors</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1065</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See description here &lt;a href=&quot;http://dev.clojure.org/display/design/Allow+duplicate+map+keys+and+set+elements&quot;&gt;http://dev.clojure.org/display/design/Allow+duplicate+map+keys+and+set+elements&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15685">CLJ-1065</key>
            <summary>Allow duplicate set elements and map keys for all set and map constructors</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sat, 8 Sep 2012 01:15:16 -0500</created>
                <updated>Thu, 4 Oct 2012 10:15:06 -0500</updated>
                    <resolved>Thu, 4 Oct 2012 10:15:06 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29405" author="jafingerhut" created="Sat, 8 Sep 2012 01:19:50 -0500"  >&lt;p&gt;I think that clj-1065-set-map-constructors-allow-duplicates-v1.txt dated Sep 7 2012 updates Clojure for the behavior Rich recommends on the dev Wiki page in the description.  I may have missed something, though.  Perhaps the most questionable part is the way I&apos;ve chosen to implement array-map always taking the last key&apos;s value.  It is no less efficient than the PersistentArrayMap createWithCheck method, i.e. O(n^2). &lt;/p&gt;</comment>
                    <comment id="29409" author="richhickey" created="Sat, 8 Sep 2012 07:10:54 -0500"  >&lt;p&gt;Thanks!&lt;/p&gt;

&lt;p&gt;array-map is ok. I would prefer that the docs strings say &quot;as if by repeated assoc&quot; (or conj for sets). &quot;eliminates&quot; and &quot;last&quot; are less precise e.g. what if you pass equal things, but with different metadata, to hash-set? &quot;Eliminates dupes&quot; doesn&apos;t say.&lt;/p&gt;</comment>
                    <comment id="29412" author="jafingerhut" created="Sat, 8 Sep 2012 15:39:25 -0500"  >&lt;p&gt;clj-1065-set-map-constructors-allow-duplicates-v2.txt dated Sep 8 2012 supersedes yesterday&apos;s -v1.txt patch, which I will remove.&lt;/p&gt;

&lt;p&gt;This one updates doc strings per Rich&apos;s suggestion.&lt;/p&gt;

&lt;p&gt;Also, his mention of metadata and &quot;as if by assoc&quot; led me to beef up the new test cases to check that metadata is correct, and I thus found that my new array-map constructor was not doing the right thing.  This one does.&lt;/p&gt;

&lt;p&gt;There is still no implementation of Rich&apos;s #3 yet.  Just wanted to get this one up there in case someone else builds on it before I do.&lt;/p&gt;</comment>
                    <comment id="29414" author="jafingerhut" created="Sun, 9 Sep 2012 03:07:01 -0500"  >&lt;p&gt;Patch clj-1065-do-map-constant-duplicate-key-checks-compile-time-only-v1.txt only makes changes that should eliminate run-time checks for duplicate map keys, if they are compile-time constants.&lt;/p&gt;

&lt;p&gt;It is currently separate from the changes to those for the set/map constructor functions, since I am less sure about these changes.  I&apos;m not terribly familiar with the compiler internals, and I might be going about this the wrong way.  Better to get separate feedback on these changes alone.  I&apos;m happy to merge them all into one patch if both parts look good.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11488" name="clj-1065-do-map-constant-duplicate-key-checks-compile-time-only-v1.txt" size="8648" author="jafingerhut" created="Sun, 9 Sep 2012 03:07:01 -0500" />
                    <attachment id="11487" name="clj-1065-set-map-constructors-allow-duplicates-v2.txt" size="9261" author="jafingerhut" created="Sat, 8 Sep 2012 15:39:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1064] Broken update-in for empty keys vector</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1064</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using update-in with an empty keys vector produces unexpected results:&lt;br/&gt;
(update-in {:a 10 :b 20} []  dissoc :a)&lt;br/&gt;
&#8658; {nil nil, :a 10, :b 20}&lt;br/&gt;
(update-in {:a 10 :b 20} []  assoc :c 99)&lt;br/&gt;
&#8658; {nil {:c 99}, :a 10, :b 20}&lt;/p&gt;

&lt;p&gt;The empty keys vector occurs in scenarios where you search on nested maps and later want to update the nested map structure at found paths.&lt;/p&gt;

&lt;p&gt;A well-defined behavior is to check the case when the keys vector is empty and then apply only the given function on the given map: (apply f m args)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15683">CLJ-1064</key>
            <summary>Broken update-in for empty keys vector</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gv">Gunnar V&#246;lkel</reporter>
                        <labels>
                    </labels>
                <created>Fri, 7 Sep 2012 05:46:29 -0500</created>
                <updated>Sat, 8 Sep 2012 10:15:38 -0500</updated>
                    <resolved>Sat, 8 Sep 2012 10:15:38 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29394" author="bronsa" created="Fri, 7 Sep 2012 06:37:55 -0500"  >&lt;p&gt;I think passing in an empty vector should rather be considered an error, since the doc specifies that `ks should be a sequence of keys`.&lt;/p&gt;

&lt;p&gt;The same wrong (in my opinion) behaviour is shown by assoc-in&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;user=&amp;gt; (assoc-in {} [] 1)&lt;/p&gt;
&lt;div class=&quot;error&quot;&gt;&lt;span class=&quot;error&quot;&gt;Unknown macro: {nil 1}&lt;/span&gt; &lt;/div&gt;&lt;/blockquote&gt;</comment>
                    <comment id="29395" author="gv" created="Fri, 7 Sep 2012 07:47:16 -0500"  >&lt;p&gt;Specifying an empty vector is no error in case the vector is not manually specified but computed as in the scenario I mentioned above.&lt;br/&gt;
&quot;(apply f m args)&quot; in case of an empty vector is the natural continuation of the usual behavior of update-in:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;update-in with 2 keys the second level map is updated&lt;/li&gt;
	&lt;li&gt;update-in with 1 key the first level map (child of given map) is updated&lt;/li&gt;
	&lt;li&gt;update-in with no key the given map (zero level) is updated.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Otherwise, you will always have to wrap update-in in something like the following when the keys vector is computed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(if (seq keys) (update-in m keys f args) (apply f m args))&lt;/p&gt;&lt;/blockquote&gt;</comment>
                    <comment id="29397" author="jafingerhut" created="Fri, 7 Sep 2012 11:01:21 -0500"  >&lt;p&gt;I believe this is a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-373&quot; title=&quot;update-in with empty key paths&quot;&gt;CLJ-373&lt;/a&gt;.  Please add your comments and/or suggested patches to that ticket rather than this one.  This one should likely be closed as a duplicate.  Let me know if you can think of any reason why this one covers new ground that &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-373&quot; title=&quot;update-in with empty key paths&quot;&gt;CLJ-373&lt;/a&gt; does not.&lt;/p&gt;</comment>
                    <comment id="29406" author="gv" created="Sat, 8 Sep 2012 06:02:24 -0500"  >&lt;p&gt;Yes, you are right - it is a duplicate.&lt;/p&gt;</comment>
                    <comment id="29410" author="jafingerhut" created="Sat, 8 Sep 2012 10:15:38 -0500"  >&lt;p&gt;Closed, as it is a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-373&quot; title=&quot;update-in with empty key paths&quot;&gt;CLJ-373&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1063] Missing dissoc-in</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1063</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There is no clojure.core/dissoc-in although there is an assoc-in.&lt;br/&gt;
It is correct that dissoc-in can be build with update-in and dissoc but this is an argument against assoc-in as well.&lt;br/&gt;
When a shortcut for assoc-in is provided, there should also be one for dissoc-in for consistency reasons.&lt;br/&gt;
Implementation is analogical to assoc-in.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15682">CLJ-1063</key>
            <summary>Missing dissoc-in</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gv">Gunnar V&#246;lkel</reporter>
                        <labels>
                    </labels>
                <created>Fri, 7 Sep 2012 05:20:59 -0500</created>
                <updated>Mon, 17 Sep 2012 07:04:54 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29434" author="jafingerhut" created="Thu, 13 Sep 2012 14:17:36 -0500"  >&lt;p&gt;Patch clj-1063-add-dissoc-in-patch-v2.txt dated Sep 13 2012 supersedes 001-dissoc-in.diff dated Sep 7 2012.  It fixes a typo (missing final &quot; in doc string), and adds a test case for the new function.&lt;/p&gt;</comment>
                    <comment id="29436" author="bronsa" created="Thu, 13 Sep 2012 14:27:24 -0500"  >&lt;p&gt;Thanks for the fix Andy&lt;/p&gt;</comment>
                    <comment id="29444" author="jafingerhut" created="Fri, 14 Sep 2012 20:24:31 -0500"  >&lt;p&gt;This proposed dissoc-in should be compared with the one in clojure.core.incubator which I just happened across.  I see they look different, but haven&apos;t examined to see if there are any behavior differences.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/core.incubator/blob/master/src/main/clojure/clojure/core/incubator.clj&quot;&gt;https://github.com/clojure/core.incubator/blob/master/src/main/clojure/clojure/core/incubator.clj&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29447" author="bronsa" created="Sat, 15 Sep 2012 06:43:55 -0500"  >&lt;p&gt;dissoc-in in clojure.core.incubator recursively removes empty maps&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (clojure.core.incubator/dissoc-in {:a {:b {:c 1}}} &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b :c&amp;#93;&lt;/span&gt;)&lt;br/&gt;
{}&lt;/p&gt;

&lt;p&gt;while the one in this patch doesn&apos;t (as I would expect)&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (dissoc-in {:a {:b {:c 1}}} &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b :c&amp;#93;&lt;/span&gt;)&lt;br/&gt;
{:a {:b {}}}&lt;/p&gt;</comment>
                    <comment id="29459" author="stu" created="Mon, 17 Sep 2012 07:04:54 -0500"  >&lt;p&gt;Please do this work in the incubator.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11483" name="001-dissoc-in.diff" size="949" author="bronsa" created="Fri, 7 Sep 2012 06:30:47 -0500" />
                    <attachment id="11495" name="clj-1063-add-dissoc-in-patch-v2.txt" size="1650" author="jafingerhut" created="Thu, 13 Sep 2012 14:17:36 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1062] CLJ-940 breaks compilation of namespaces that don&apos;t have any public functions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1062</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-940&quot; title=&quot;Passing a non-sequence to refer :only results in uninformative exception&quot;&gt;&lt;del&gt;CLJ-940&lt;/del&gt;&lt;/a&gt; that was recently committed to master break compilation of namespaces that don&apos;t have any public functions in them&lt;br/&gt;
(for example, like &lt;a href=&quot;https://github.com/michaelklishin/monger/blob/master/src/clojure/monger/json.clj&quot;&gt;https://github.com/michaelklishin/monger/blob/master/src/clojure/monger/json.clj&lt;/a&gt; that only extends&lt;br/&gt;
a protocol).&lt;/p&gt;

&lt;p&gt;This affects several of clojurewerkz.org projects that no longer can compile with 1.5.0-master-SNAPSHOT.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15677">CLJ-1062</key>
            <summary>CLJ-940 breaks compilation of namespaces that don&apos;t have any public functions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Wed, 5 Sep 2012 20:36:29 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Fri, 21 Sep 2012 08:28:35 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29383" author="michaelklishin" created="Wed, 5 Sep 2012 20:39:06 -0500"  >&lt;p&gt;To be more correct: it breaks compilation of namespaces that require/load such ns without any public functions.&lt;/p&gt;</comment>
                    <comment id="29384" author="michaelklishin" created="Wed, 5 Sep 2012 20:46:19 -0500"  >&lt;p&gt;An example project that reproduces the issue (see in the README):&lt;br/&gt;
&lt;a href=&quot;https://github.com/michaelklishin/clj1062&quot;&gt;https://github.com/michaelklishin/clj1062&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29512" author="stuart.sierra" created="Fri, 21 Sep 2012 08:28:35 -0500"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11484" name="0001-CLJ-1062-fix-require-1.patch" size="954" author="stuart.sierra" created="Fri, 7 Sep 2012 11:43:53 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1061] when-first double evaluation</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1061</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The when-first macro will evaluate the xs expression twice.  Admittedly, it does exactly what the doc string says, but that seems undesirable to me.  Even without side effects, there&apos;s a potential performance issue if xs is some expensive operation.&lt;/p&gt;

&lt;p&gt;Patch attached. The main diff is:&lt;/p&gt;

&lt;p&gt;&amp;#45;    `(when (seq ~xs)&lt;br/&gt;
&amp;#45;       (let &lt;span class=&quot;error&quot;&gt;&amp;#91;~x (first ~xs)&amp;#93;&lt;/span&gt;&lt;br/&gt;
&amp;#45;         ~@body))))&lt;br/&gt;
+    `(when-let &lt;a href=&quot;#(seq ~xs)&quot;&gt;xs# (seq ~xs)&lt;/a&gt;&lt;br/&gt;
+       (let &lt;a href=&quot;#)&quot;&gt;~x (first xs#)&lt;/a&gt;&lt;br/&gt;
+         ~@body))))&lt;/p&gt;</description>
                <environment>Mac OS X 10.8.1, Java 1.7.0_06</environment>
            <key id="15674">CLJ-1061</key>
            <summary>when-first double evaluation</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 4 Sep 2012 15:14:37 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29509" author="stuart.sierra" created="Fri, 21 Sep 2012 07:39:03 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11477" name="0001-avoid-double-evaluation-in-when-first.patch" size="1140" author="steveminer@gmail.com" created="Tue, 4 Sep 2012 15:14:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>richhickey</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-1060] &apos;list*&apos; returns not a list</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1060</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Function &apos;list?&apos; returns sequence, but not a list.&lt;br/&gt;
It is a bit confusing.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (list? (list* 1 &apos;(2 3)))
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15670">CLJ-1060</key>
            <summary>&apos;list*&apos; returns not a list</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="azhlobich">Andrei Zhlobich</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Sep 2012 06:32:23 -0500</created>
                <updated>Fri, 18 Jan 2013 09:41:40 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29457" author="stu" created="Mon, 17 Sep 2012 06:52:32 -0500"  >&lt;p&gt;should the docstring for list* change to say it returns a seq?&lt;/p&gt;</comment>
                    <comment id="30057" author="halgari" created="Tue, 27 Nov 2012 11:58:18 -0600"  >&lt;p&gt;Is there a reason why we can&apos;t have list* actually return a list? The cost of creating a list vs a cons is negligible.&lt;/p&gt;</comment>
                    <comment id="30369" author="mnicky" created="Fri, 4 Jan 2013 14:02:16 -0600"  >&lt;p&gt;The question is what to do with the one-argument case of list*, because in cases like: (list* {:a 1 :b 2}) it doesn&apos;t return IPersistentList as well. I propose just applying &apos;list&apos;.&lt;/p&gt;

&lt;p&gt;I added patch &apos;list-star-fix.diff&apos; (dated 04/Jan/2013) with Cons implementing IPersistentList and doing (apply list args) in one-argument case of list*. To be able to use &apos;apply&apos; in list* I had to declare it before the definition of list* in the source code. The apply itself also uses list*, but luckily not the one-argument version of list*, so it should be safe... The patch also contains simple unit tests.&lt;/p&gt;

&lt;p&gt;Discussion is also here: &lt;a href=&quot;https://groups.google.com/forum/#!topic/clojure/co8lcKymfi8&quot;&gt;https://groups.google.com/forum/#!topic/clojure/co8lcKymfi8&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30370" author="michalmarczyk" created="Fri, 4 Jan 2013 16:11:56 -0600"  >&lt;p&gt;(apply list args) would make (list* (range)) hang, where currently it returns a partially-realized lazy seq. Also, even for non-lazy seqs &amp;#8211; possibly lists themselves &amp;#8211; it would always build a new list from scratch, right?&lt;/p&gt;

&lt;p&gt;Also, if I&apos;m reading the patch correctly, it would make 2+-ary list&amp;#42; overloads and cons return lists &amp;#8211; that is, IPersistentList instances &amp;#8211; always (Conses would now be lists), but repeatedly calling next on such a list might eventually produce a non-list. The only way around that would be to make all seqs into IPersistentLists &amp;#8211; that doesn&apos;t seem desirable at first glance...?&lt;/p&gt;

&lt;p&gt;On a side note, for the case where the final &quot;args&quot; argument is in fact a list, we already have a &quot;prepend many items&quot; function, namely conj. list&amp;#42; currently acts as the vararg variant of cons (in line with Lisp tradition); I&apos;m actually quite happy with that.&lt;/p&gt;</comment>
                    <comment id="30372" author="michalmarczyk" created="Fri, 4 Jan 2013 16:19:30 -0600"  >&lt;p&gt;I&apos;m in favour of the &quot;list&quot; -&amp;gt; &quot;seq&quot; tweak to the docstring though, assuming impl remains unchanged.&lt;/p&gt;</comment>
                    <comment id="30376" author="mnicky" created="Fri, 4 Jan 2013 18:13:37 -0600"  >&lt;p&gt;Yep, these are all valid points, thanks! I see this as a question whether the list* function is a list constructor or not. If yes (and it would be possible to implement it in a satisfactory way), it should probably return a list.&lt;/p&gt;

&lt;p&gt;We could avoid building a new list by sth like:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (list? args)
  args
  (apply list args))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;(btw, &apos;vec&apos; also creates a new vector even when the argument itself is a vector)&lt;/p&gt;

&lt;p&gt;The contract of next seems to be to return a seq, not a list - its docstring reads: &lt;em&gt;&quot;Returns a seq of the items after the first. Calls seq on its argument. If there are no more items, returns nil.&quot;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Btw, in some Lisp/Scheme impls I checked, cons seems to be a list as well. E.g. in CLisp (and similar in Guile and Racket):&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&amp;gt; (listp (cons 2 &apos;()))
T
&amp;gt; (listp (list* 1 2 &apos;()))
T&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11792" name="list-star-fix.diff" size="2783" author="mnicky" created="Fri, 4 Jan 2013 13:50:20 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1059] PersistentQueue doesn&apos;t implement java.util.List, causing nontransitive equality</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1059</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;PersistentQueue implements Sequential but doesn&apos;t implement java.util.List. Lists form an equality partition, as do Sequentials. This means that you can end up with nontransitive equality:&lt;/p&gt;

&lt;p&gt;(def q (conj clojure.lang.PersistentQueue/EMPTY 1 2 3))&lt;br/&gt;
;=&amp;gt; #user/q&lt;br/&gt;
(def al (doto (java.util.ArrayList.) (.add 1) (.add 2) (.add 3)))&lt;br/&gt;
;=&amp;gt; #user/al&lt;br/&gt;
(def v &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;)&lt;br/&gt;
;=&amp;gt; #user/v&lt;br/&gt;
(= al v)&lt;br/&gt;
;=&amp;gt; true&lt;br/&gt;
(= v q)&lt;br/&gt;
;=&amp;gt; true&lt;br/&gt;
(not= al q)&lt;br/&gt;
;=&amp;gt; true&lt;/p&gt;

&lt;p&gt;This happens because PersistentQueue is a Sequential but not a List, ArrayList is a List but not a Sequential, and PersistentVector is both.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15669">CLJ-1059</key>
            <summary>PersistentQueue doesn&apos;t implement java.util.List, causing nontransitive equality</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ppotter">Philip Potter</assignee>
                                <reporter username="ppotter">Philip Potter</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Sep 2012 04:23:59 -0500</created>
                <updated>Tue, 11 Dec 2012 13:58:01 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29446" author="ppotter" created="Sat, 15 Sep 2012 03:41:15 -0500"  >&lt;p&gt;Whoops, according to &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt; I should have emailed clojure-dev before filing this ticket. Here is the discussion:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/ME3-Ke-RbNk/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/ME3-Ke-RbNk/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29452" author="ppotter" created="Sat, 15 Sep 2012 14:37:49 -0500"  >&lt;p&gt;Attached 001-make-PersistentQueue-implement-List.diff, 15/Sep/12&lt;/p&gt;

&lt;p&gt;Note that this patch has a minor conflict with the one I added to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1070&quot; title=&quot;PersistentQueue&amp;#39;s hash function does not match its equality&quot;&gt;&lt;del&gt;CLJ-1070&lt;/del&gt;&lt;/a&gt;, because both add an extra interface to PersistentQueue - List in this case, IHashEq in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1070&quot; title=&quot;PersistentQueue&amp;#39;s hash function does not match its equality&quot;&gt;&lt;del&gt;CLJ-1070&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="29473" author="chouser@n01se.net" created="Tue, 18 Sep 2012 01:04:48 -0500"  >&lt;p&gt;Philip, patch looks pretty good &amp;#8211; thanks for doing this.  A couple notes:&lt;/p&gt;

&lt;p&gt;This is only my opinion, but I prefer imports be listed without wildcards, even if it means an extra couple lines at the top of a .java file.&lt;/p&gt;

&lt;p&gt;I noticed the &quot;List stuff&quot; code is a copy of what&apos;s in ASeq and EmptyList.  I suppose this is copied because EmptyList and PersistentQueue extend Obj and therefore can&apos;t extend ASeq.  Is this the only reason?  It seems a shame to duplicate these method definitions, but I don&apos;t know of a better solution, do you?&lt;/p&gt;

&lt;p&gt;It would also be nice if the test check a couple of the List methods you&apos;ve implemented.&lt;/p&gt;</comment>
                    <comment id="29474" author="chouser@n01se.net" created="Tue, 18 Sep 2012 01:08:26 -0500"  >&lt;p&gt;oh, also &quot;git am&quot; refused to apply the patch, but I&apos;m not sure why.  &quot;patch -p 1&quot; worked perfectly.&lt;/p&gt;</comment>
                    <comment id="29475" author="ppotter" created="Tue, 18 Sep 2012 01:19:11 -0500"  >&lt;p&gt;did you use the --keep-cr option to git am?&lt;/p&gt;

&lt;p&gt;I struggled to know whether I should be adding CRs or not to line endings, because the files I was editing weren&apos;t consistent in their usage. If you open them in emacs, half the lines have ^M at the end.&lt;/p&gt;</comment>
                    <comment id="29476" author="ppotter" created="Tue, 18 Sep 2012 01:21:23 -0500"  >&lt;p&gt;Will submit another patch, with the import changed. I&apos;ll have a think about the list implementation and see what ideas I can come up with.&lt;/p&gt;</comment>
                    <comment id="29487" author="ppotter" created="Tue, 18 Sep 2012 15:17:17 -0500"  >&lt;p&gt;Attached 002-make-PersistentQueue-implement-Asequential.diff&lt;/p&gt;

&lt;p&gt;This patch is an alternative to 001-make-PersistentQueue-implement-List.diff&lt;/p&gt;

&lt;p&gt;So I took on board what you said about ASeq, but it didn&apos;t feel right making PersistentQueue directly implement ISeq, somehow.&lt;/p&gt;

&lt;p&gt;So I split ASeq into two parts &amp;#8211; ASequential, which implements j.u.{Collection,List} and manages List-equality and hashcodes; and ASeq, which... doesn&apos;t seem to be doing much anymore, to be honest.&lt;/p&gt;

&lt;p&gt;As a bonus, this patch fixes &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1070&quot; title=&quot;PersistentQueue&amp;#39;s hash function does not match its equality&quot;&gt;&lt;del&gt;CLJ-1070&lt;/del&gt;&lt;/a&gt; too, so I went and added the tests from that ticket in to demonstrate this fact. It also tidies up PersistentQueue by removing all equals/hashcCode stuff and all Collection stuff.&lt;/p&gt;

&lt;p&gt;(It turns out that because ASeq was already implementing Obj, the fact that PersistentQueue was implementing Obj was no barrier to using it.)&lt;/p&gt;

&lt;p&gt;Would appreciate comments on this approach, and how it differs from the previous patch here and the patch on &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1070&quot; title=&quot;PersistentQueue&amp;#39;s hash function does not match its equality&quot;&gt;&lt;del&gt;CLJ-1070&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="29488" author="ppotter" created="Tue, 18 Sep 2012 15:44:45 -0500"  >&lt;p&gt;Looking at EmptyList&apos;s implementation of List, it is a duplicate of the others, but it shouldn&apos;t be. I think its implementation of indexOf is the biggest culprit - it should just be &apos;return -1;&apos; but it has a great big for loop! But this is beyond the scope of this ticket, so I won&apos;t patch that here.&lt;/p&gt;</comment>
                    <comment id="29731" author="jafingerhut" created="Sat, 20 Oct 2012 12:29:16 -0500"  >&lt;p&gt;Philip, now that the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1070&quot; title=&quot;PersistentQueue&amp;#39;s hash function does not match its equality&quot;&gt;&lt;del&gt;CLJ-1070&lt;/del&gt;&lt;/a&gt; has been applied, these patches no longer apply cleanly.  Would you be willing to update them?  If so, please remove the obsolete patches.&lt;/p&gt;</comment>
                    <comment id="29747" author="ppotter" created="Mon, 22 Oct 2012 05:10:16 -0500"  >&lt;p&gt;Andy, thanks so much for your efforts to make people aware of these things. I will indeed submit new patches, hopefully later this week.&lt;/p&gt;</comment>
                    <comment id="29899" author="ppotter" created="Sat, 3 Nov 2012 12:23:20 -0500"  >&lt;p&gt;Replaced existing patches with new ones which apply cleanly to master.&lt;/p&gt;

&lt;p&gt;There are two patches:&lt;/p&gt;

&lt;p&gt;001-clj-1059-make-persistentqueue-implement-list.diff&lt;/p&gt;

&lt;p&gt;This fixes equality by making PersistentQueue implement List directly. I also took the opportunity to remove the wildcard import and to add tests for the List methods, as compared with the previous version of the patch.&lt;/p&gt;

&lt;p&gt;002-clj-1059-asequential.diff&lt;/p&gt;

&lt;p&gt;This fixes equality by creating a new abstract class ASequential, and making PersistentQueue extend this.&lt;/p&gt;

&lt;p&gt;My preferred solution is still the ASequential patch, but I&apos;m leaving both here for comparison.&lt;/p&gt;</comment>
                    <comment id="30123" author="halgari" created="Fri, 30 Nov 2012 15:37:33 -0600"  >&lt;p&gt;Vetting. &lt;/p&gt;</comment>
                    <comment id="30214" author="jafingerhut" created="Tue, 11 Dec 2012 12:50:19 -0600"  >&lt;p&gt;Philip, this time I think it was patches that were committed for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1000&quot; title=&quot;Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?&quot;&gt;&lt;del&gt;CLJ-1000&lt;/del&gt;&lt;/a&gt; that make your patch 002-clj-1059-asequential.diff not apply cleanly.  I often fix up stale patches where the change is straightforward and mechanical, but in this case you are moving some methods that &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1000&quot; title=&quot;Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?&quot;&gt;&lt;del&gt;CLJ-1000&lt;/del&gt;&lt;/a&gt;&apos;s patch changed the implementation of, so it would be best if someone figured out a way to update this patch in a way that doesn&apos;t clobber the &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1000&quot; title=&quot;Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?&quot;&gt;&lt;del&gt;CLJ-1000&lt;/del&gt;&lt;/a&gt; changes.&lt;/p&gt;</comment>
                    <comment id="30216" author="ppotter" created="Tue, 11 Dec 2012 13:57:21 -0600"  >&lt;p&gt;Thanks Andy. Submitted a new patch, 002-clj-1059-asequential-rebased-to-cached-hasheq.diff, which supersedes 002-clj-1059-asequential.diff.&lt;/p&gt;

&lt;p&gt;The patch 001-clj-1059-make-persistentqueue-implement-list.diff still applies cleanly, and is still an alternative to 002-clj-1059-asequential-rebased-to-cached-hasheq.diff.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11660" name="001-clj-1059-make-persistentqueue-implement-list.diff" size="4129" author="ppotter" created="Sat, 3 Nov 2012 12:23:20 -0500" />
                    <attachment id="11755" name="002-clj-1059-asequential-rebased-to-cached-hasheq.diff" size="14108" author="ppotter" created="Tue, 11 Dec 2012 13:57:21 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1058] StackOverflowError on exception in reducef for PersistentHashMap fold</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1058</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If reducef throws an exception, the PHM fold code can descend into an infinite loop, causing a stack overflow which masks the problem. This situation is commented &quot;aargh&quot; in PersistentHashMap.java line 444 (as of 412a51d).&lt;/p&gt;

&lt;p&gt;To reproduce:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user&amp;gt; (require &apos;[clojure.core.reducers :as r])
nil
user&amp;gt; (r/fold (fn ([]) ([ret k v] (+ 3 &lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;) ret)) (into {} (map (juxt identity identity) (range 10000))))
;; boom&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This results in a stack like: &lt;a href=&quot;https://raw.github.com/gist/3bab917287a7fd635a84/f38bfe3e270556e467f3fc02062af7ea10781390/gistfile1.txt&quot;&gt;https://raw.github.com/gist/3bab917287a7fd635a84/f38bfe3e270556e467f3fc02062af7ea10781390/gistfile1.txt&lt;/a&gt;&lt;/p&gt;</description>
                <environment>Clojure 1.5.0-alpha4, Sun Java 1.6.0_35, with [org.codehaus.jsr166-mirror/jsr166y &amp;quot;1.7.0&amp;quot;]</environment>
            <key id="15668">CLJ-1058</key>
            <summary>StackOverflowError on exception in reducef for PersistentHashMap fold</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tomoj">Tom Jack</reporter>
                        <labels>
                    </labels>
                <created>Sun, 2 Sep 2012 17:20:02 -0500</created>
                <updated>Fri, 12 Apr 2013 09:42:02 -0500</updated>
                                    <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30124" author="halgari" created="Fri, 30 Nov 2012 15:40:59 -0600"  >&lt;p&gt;Verified as a bug. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1057] Var&apos;s .setDynamic does not set :dynamic in metadata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1057</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;((juxt (comp :dynamic meta) #(.isDynamic %)) #&apos;*agent*)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15667">CLJ-1057</key>
            <summary>Var&apos;s .setDynamic does not set :dynamic in metadata</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bbloom">Brandon Bloom</reporter>
                        <labels>
                    </labels>
                <created>Sun, 2 Sep 2012 13:06:21 -0500</created>
                <updated>Mon, 3 Dec 2012 09:10:16 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30151" author="halgari" created="Mon, 3 Dec 2012 09:10:16 -0600"  >&lt;p&gt;This is actually an enhancement as no where in the clojure code is provision made for syncing var&apos;s metadata and dynamic state. .isDynamic is the authoritative source, and the calling of .setDynamic is configured by the compiler. If you&apos;d like to see this change, please, feel free to bring it up on clojure-dev for a discussion.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1056] defprotocol: invalid method overload syntax getting accepted </title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1056</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The compiler accepts both of these erroneous forms which while silly, are not imposible to come up with.&lt;/p&gt;

&lt;p&gt;(defprotocol Foo (f (&lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;) (&lt;span class=&quot;error&quot;&gt;&amp;#91;this arg&amp;#93;&lt;/span&gt;)))&lt;br/&gt;
(defprotocol Bar (m &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;) (m &lt;span class=&quot;error&quot;&gt;&amp;#91;this arg&amp;#93;&lt;/span&gt;))&lt;/p&gt;</description>
                <environment></environment>
            <key id="15665">CLJ-1056</key>
            <summary>defprotocol: invalid method overload syntax getting accepted </summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="vemv">V&#237;ctor M. Valenzuela</reporter>
                        <labels>
                    </labels>
                <created>Sat, 1 Sep 2012 19:19:17 -0500</created>
                <updated>Thu, 29 Nov 2012 16:03:11 -0600</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30099" author="halgari" created="Thu, 29 Nov 2012 16:02:50 -0600"  >&lt;p&gt;Can not reproduce the fist error:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defprotocol Foo (f (&lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;) (&lt;span class=&quot;error&quot;&gt;&amp;#91;this arg&amp;#93;&lt;/span&gt;)))    &lt;br/&gt;
CompilerException java.lang.IllegalArgumentException: Parameter declaration missing, compiling:(NO_SOURCE_PATH:5:1) &lt;/p&gt;

&lt;p&gt;But the 2nd one I can reproduce:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defprotocol Bar (m &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;) (m &lt;span class=&quot;error&quot;&gt;&amp;#91;this arg&amp;#93;&lt;/span&gt;))    &lt;br/&gt;
Bar&lt;br/&gt;
user=&amp;gt; Bar&lt;br/&gt;
{:on-interface user.Bar, :on user.Bar, :sigs {:m {:doc nil, :arglists (&lt;span class=&quot;error&quot;&gt;&amp;#91;this arg&amp;#93;&lt;/span&gt;), :name m}}, :var #&apos;user/Bar, :method-map {:m :m}, :method-builders {#&apos;user/m #&amp;lt;user$eval71$fn_&lt;em&gt;72 user$eval71$fn&lt;/em&gt;_72@1a2b53fb&amp;gt;}}&lt;br/&gt;
user=&amp;gt; &lt;/p&gt;

&lt;p&gt;Notice that :arglists only has one entry&lt;/p&gt;

&lt;p&gt;Vetting&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1055] &quot;be come&quot; should be &quot;become&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1055</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There is a typo in core.clj in the docs for &quot;agent&quot;, &quot;ref&quot;, and &quot;atom&quot;: it should be &quot;become&quot; instead of &quot;be come&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15663">CLJ-1055</key>
            <summary>&quot;be come&quot; should be &quot;become&quot;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dho">Daniel Hofstetter</reporter>
                        <labels>
                    </labels>
                <created>Sat, 1 Sep 2012 10:39:26 -0500</created>
                <updated>Mon, 17 Sep 2012 07:11:51 -0500</updated>
                    <resolved>Mon, 17 Sep 2012 07:11:51 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29461" author="stu" created="Mon, 17 Sep 2012 07:11:46 -0500"  >&lt;p&gt;Thanks!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1054] Syntax quoted form produces a sequence, not a list</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1054</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Syntax quote returns clojure.lang.Cons instead of IPersistenList.&lt;br/&gt;
But simple quote always returns list.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(list? &apos;(1))     =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
(list? &apos;(1 2 3)) =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
(list? `(1))     =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
(list? `(1 2 3)) =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15658">CLJ-1054</key>
            <summary>Syntax quoted form produces a sequence, not a list</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="azhlobich">Andrei Zhlobich</reporter>
                        <labels>
                    </labels>
                <created>Fri, 31 Aug 2012 08:17:26 -0500</created>
                <updated>Tue, 18 Sep 2012 06:42:46 -0500</updated>
                    <resolved>Tue, 18 Sep 2012 06:42:46 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29478" author="stu" created="Tue, 18 Sep 2012 06:42:46 -0500"  >&lt;p&gt;It is unusual in Clojure to expect/rely on concrete list? checks, particularly given the prevalence of seq?&lt;/p&gt;

&lt;p&gt;If the behavior documented here is causing problems, please discuss use case on mailing list, and then we can open a ticket.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1053] Locals still cleared too aggressively on delay in specific cases</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1053</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This seems to be an extension of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-232&quot;&gt;#CLJ-232&lt;/a&gt;. Locals are still cleared too aggressively in some specific instances: If the delay throws an exception when realized, and you dereference a local within the delay, the local may or may not be cleared depending on its need in the tail positions (without any obvious pattern). Examples of functions which works as intended and doesn&apos;t work as intended follows.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(def d (let [y (delay 0)]
         (delay (if (zero? @y) (/ 0 0) (/ @y 1))))) ; works properly

(def d (let [y (delay 0)]
         (delay (if (zero? @y) (/ 0 0) (/ 1 1))))) ; does not work properly

(def d (let [y (delay 0)]
         (delay (if (zero? @y) (/ @y 0) (/ 1 1))))) ; does not work properly

(def d (let [y (delay 0)]
         (delay (if (zero? @y) (/ @y 0) (/ @y 1))))) ; does not work properly

(def d (let [y (delay 0)]
         (delay @y (/ 0 0)))) ; does not work properly

(def d (let [y (delay 0)]
         (delay @y (/ 0 0) @y))) ; works properly
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;By &quot;works&quot;, &lt;tt&gt;d&lt;/tt&gt; will throw &quot;ArithmeticException Divide by zero&quot; every single time it is dereferenced. By &quot;does not work&quot;, &lt;tt&gt;d&lt;/tt&gt; will throw &quot;ArithmeticException Divide by zero&quot; on first dereferencing, but from second and onwards it will throw &quot;NullPointerException   &lt;span class=&quot;error&quot;&gt;&amp;#91;trace missing&amp;#93;&lt;/span&gt;&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15657">CLJ-1053</key>
            <summary>Locals still cleared too aggressively on delay in specific cases</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hypirion">Jean Niklas L&apos;orange</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 Aug 2012 17:25:56 -0500</created>
                <updated>Tue, 9 Apr 2013 11:55:52 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="30919" author="hypirion" created="Tue, 9 Apr 2013 11:55:52 -0500"  >&lt;p&gt;With Clojure 1.5.1, the trace is given and returns &lt;tt&gt;NullPointerException   clojure.core/deref-future (core.clj:2NullPointerException   clojure.core/deref-future (core.clj:2108)108)&lt;/tt&gt;, which refers to a &lt;a href=&quot;https://github.com/clojure/clojure/blob/clojure-1.5.1/src/clj/clojure/core.clj#L2108&quot;&gt;&lt;tt&gt;.get&lt;/tt&gt; call&lt;/a&gt;. The stacktrace reveals the following:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;NullPointerException 
	clojure.core/deref-future (core.clj:2108)
	clojure.core/deref (core.clj:2129)
	user/fn--1/fn--4 (NO_SOURCE_FILE:2)
	clojure.lang.Delay.deref (Delay.java:33)
	clojure.core/deref (core.clj:2128)
	user/eval13 (NO_SOURCE_FILE:-1)
	clojure.lang.Compiler.eval (Compiler.java:6619)
	clojure.lang.Compiler.eval (Compiler.java:6582)
	clojure.core/eval (core.clj:2852)
	clojure.main/repl/read-eval-print--6588/fn--6591 (main.clj:259)
	clojure.main/repl/read-eval-print--6588 (main.clj:259)
	clojure.main/repl/fn--6597 (main.clj:277)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1052] assoc should throw exception if missing val for last key</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1052</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/k2R4OdPUCzg&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/k2R4OdPUCzg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suggested by Ambrose Bonnaire-Sergeant:&lt;/p&gt;

&lt;p&gt;I think assoc should throw an error when applied with uneven arguments.&lt;/p&gt;

&lt;p&gt;Currently, the &quot;missing&quot; value is just replaced with nil.&lt;/p&gt;

&lt;p&gt;(assoc {} :a 1 :b)&lt;br/&gt;
;=&amp;gt; {:a 1, :b nil}&lt;/p&gt;</description>
                <environment></environment>
            <key id="15653">CLJ-1052</key>
            <summary>assoc should throw exception if missing val for last key</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Wed, 29 Aug 2012 16:40:24 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>8</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29286" author="jafingerhut" created="Wed, 29 Aug 2012 16:42:49 -0500"  >&lt;p&gt;Patch clj-1052-assoc-should-throw-exc-if-missing-val-patch1.txt dated Aug 29 2012 makes assoc throw an IllegalArgumentException if more than one key is given, but the last key has no value.  It includes a few simple test cases with correct and incorrect arguments to assoc.&lt;/p&gt;</comment>
                    <comment id="29287" author="ambrosebs" created="Wed, 29 Aug 2012 17:14:13 -0500"  >&lt;p&gt;IMO if the error message included something like &quot;assoc expects even number of arguments after target, found odd number&quot;, or some mention of the number of arguments the error would be clearer to me.&lt;/p&gt;</comment>
                    <comment id="29288" author="jafingerhut" created="Wed, 29 Aug 2012 18:06:59 -0500"  >&lt;p&gt;clj-1052-assoc-should-throw-exc-if-missing-val-patch2.txt is identical to the now-removed -patch1.txt, except for the text of the exception thrown, updated as per Ambrose&apos;s suggestion.&lt;/p&gt;</comment>
                    <comment id="29479" author="stu" created="Tue, 18 Sep 2012 06:51:53 -0500"  >&lt;p&gt;The patch appears correct. It does introduce a single extra (next) per iteration into the success path, although that seems unlikely to dominate the work. Wouldn&apos;t hurt to add as assessment showing this is no slower for correct programs.&lt;/p&gt;
</comment>
                    <comment id="29497" author="jafingerhut" created="Wed, 19 Sep 2012 02:03:45 -0500"  >&lt;p&gt;Test platform: Mac OS X 10.6.8 + Oracle/Apple Java 1.6.0_35 Java HotSpot(TM) 64-Bit Server VM&lt;/p&gt;

&lt;p&gt;With latest Clojure master as of Sep 19 2012:&lt;/p&gt;

&lt;p&gt;Clojure 1.5.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (set! &lt;b&gt;unchecked-math&lt;/b&gt; true)&lt;br/&gt;
true&lt;br/&gt;
(defn count-maps &lt;span class=&quot;error&quot;&gt;&amp;#91;n&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (let &lt;span class=&quot;error&quot;&gt;&amp;#91;base {:a 1}&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (loop [i n&lt;br/&gt;
           sum 0]&lt;br/&gt;
      (if (zero? i)&lt;br/&gt;
        sum&lt;br/&gt;
        (let &lt;span class=&quot;error&quot;&gt;&amp;#91;m1 (assoc base :b 2 :c 3 :d 4 :e 5 :f 6 :g 7 :h 8 :i 9 :j 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
          (recur (dec i) (+ sum (count m1))))))))&lt;br/&gt;
#&apos;user/count-maps&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 48784.077 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 49028.52 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 50314.729 msecs&quot;&lt;br/&gt;
100000000&lt;/p&gt;

&lt;p&gt;Same Clojure version, plus the patch that was screened:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 49576.191 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 49957.866 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 52149.998 msecs&quot;&lt;br/&gt;
100000000&lt;/p&gt;

&lt;p&gt;(average of 3 times after patch) / (average of 3 times before patch) = 1.0240&lt;/p&gt;

&lt;p&gt;So 2.4% slowdown on average for that test case.  I should add that I&apos;m not a statistician, but note that this 2.4% difference is less than the variation in run time from one run to the next of the same experiment.  Likely any real statistician would recommend collecting a lot more data before asserting there is a change in performance.&lt;/p&gt;</comment>
                    <comment id="29601" author="jafingerhut" created="Fri, 5 Oct 2012 07:38:05 -0500"  >&lt;p&gt;clj-1052-assoc-should-throw-exc-if-missing-val-patch3.txt dated Oct 5 2012 is the same as the previous patch clj-1052-assoc-should-throw-exc-if-missing-val-patch2.txt dated Aug 29 2012 except some context lines have been updated so that it applies cleanly using git.  The older version will be removed in a minute.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11536" name="clj-1052-assoc-should-throw-exc-if-missing-val-patch3.txt" size="1816" author="jafingerhut" created="Fri, 5 Oct 2012 07:38:05 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1051] Recursive function raises &quot;call unbound fn&quot; exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1051</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve tried to reduce the code to the minimum that will reproduce the problem. This is a parser combinator library that uses the &quot;list of successes&quot; method. The test is a simple expression for adding one-digit integers with support for parens; sample input might be &quot;1+(2+3)+4&quot;.&lt;/p&gt;

&lt;p&gt;Having declared the parsers (see attached file), the expression parser is this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(declare expr)

(def factor
  (choice (between (match \() (match \)) expr)
	  integer))

(def expr
  (bind factor
       (fn [t]
	 (choice (bind (match \+) (fn [_] (bind expr (fn [e] (result (+ t e))))))
	         (result t)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With the above, I get this error:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Clojure 1.4.0
user=&amp;gt; (load-file &lt;span class=&quot;code-quote&quot;&gt;&quot;expr.clj&quot;&lt;/span&gt;)
#&apos;user/expr
user=&amp;gt; (run expr &lt;span class=&quot;code-quote&quot;&gt;&quot;(3)&quot;&lt;/span&gt;)      
IllegalStateException Attempting to call unbound fn: #&apos;user/expr  clojure.lang.Var$Unbound.throwArity (Var.java:43)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I can, however, avoid this error if I code the (factor) function by expanding the code of the parser (between):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(declare expr)

(def factor*
  (choice (bind (match \() (fn [_]
          (bind expr       (fn [e]
	  (bind (match \)) (fn [_] (result e)))))))
	  integer))

(def expr
  (bind factor*
       (fn [t]
	 (choice (bind (match \+) (fn [_] (bind expr (fn [e] (result (+ t e))))))
	         (result t)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And now I can do:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Clojure 1.4.0
user=&amp;gt; (load-file &lt;span class=&quot;code-quote&quot;&gt;&quot;expr.clj&quot;&lt;/span&gt;)
#&apos;user/expr
user=&amp;gt; (run expr &lt;span class=&quot;code-quote&quot;&gt;&quot;(3)&quot;&lt;/span&gt;)      
3
user=&amp;gt; (run expr &lt;span class=&quot;code-quote&quot;&gt;&quot;1+(2+3)+(4+5)&quot;&lt;/span&gt;)
15&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The ability to reuse parser and add conveniences like (between) is key for this style of parsing.&lt;/p&gt;</description>
                <environment>OSX</environment>
            <key id="15649">CLJ-1051</key>
            <summary>Recursive function raises &quot;call unbound fn&quot; exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ablancas">Armando Blancas</reporter>
                        <labels>
                    </labels>
                <created>Mon, 27 Aug 2012 16:46:37 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:51:02 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29272" author="hiredman" created="Mon, 27 Aug 2012 18:03:42 -0500"  >&lt;p&gt;this is not a bug in clojure.&lt;/p&gt;

&lt;p&gt;declare creates an unbound var then your def tries to use the value of the var before you have given it a value.&lt;/p&gt;

&lt;p&gt;declare does not let you use a value of a var before you have given it one (via def or whatever).&lt;/p&gt;</comment>
                    <comment id="29273" author="hiredman" created="Mon, 27 Aug 2012 18:05:17 -0500"  >&lt;p&gt;meta comment:&lt;br/&gt;
I would close this as &quot;Declined&quot;, but I am not sure if that is kosher for me to do.&lt;/p&gt;</comment>
                    <comment id="29277" author="ablancas" created="Mon, 27 Aug 2012 22:28:22 -0500"  >&lt;p&gt;Thanks for looking into this.&lt;/p&gt;

&lt;p&gt;Just want to point out that as far as the declare and the use of expr as a forward reference, the second scenario I&apos;ve presented (with factor*) uses (declare) the same way, yet it works: the var &quot;expr&quot; in (factor*) ends up pointing to the root value set later, but before it runs.&lt;/p&gt;

&lt;p&gt;Seems to me similar to this case, where f is defined in terms of itself and it works fine, having the var &quot;f&quot; obtained its root binding after the def form runs:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (def f (fn [n] (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (&amp;lt; n 1) 1 (* n (f (- n 1))))))
#&apos;user/f
user=&amp;gt; (f 6)
720&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Given that I&apos;ve got a usage that works, I would suspect that there&apos;s something about the first case that prevents the root binding to be visible to the declared var. &lt;/p&gt;</comment>
                    <comment id="29278" author="hiredman" created="Tue, 28 Aug 2012 03:25:48 -0500"  >&lt;p&gt;the formatting of the second case makes it hard to read, but it looks like expr is referenced inside a function, so the var #&apos;expr will not be derefed until the function is run.&lt;/p&gt;</comment>
                    <comment id="29280" author="ablancas" created="Tue, 28 Aug 2012 12:32:33 -0500"  >&lt;p&gt;Though the difference isn&apos;t quite apparent to me, I kind of grasp the idea that the var may be in one case deref&apos;ed earlier in one case than the other because calls to (bind) are eager and in the case of the additional call to (between) the var is inside the function. I&apos;ll ask the board for advice on this and this ticket can be closed. Thanks.&lt;/p&gt;</comment>
                    <comment id="29921" author="stuart.sierra" created="Fri, 9 Nov 2012 08:51:02 -0600"  >&lt;p&gt;Closed based on discussion in comments.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11456" name="expr.clj" size="1213" author="ablancas" created="Mon, 27 Aug 2012 16:46:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1050] Remove a lock in the common case of  deref of delay</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1050</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, when deref is called in Delay.java, a lock on the Delay is always acquired.&lt;br/&gt;
This is wasteful as most of the time you just want to read the val.&lt;/p&gt;

&lt;p&gt;The attached patch changes this behaviour to the following:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;val is initialised to a known secret value. (During its constructor so it is visible from any thread).&lt;/li&gt;
	&lt;li&gt;When deref is called, val is checked to the known secret value.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;If it is not the secret value, then it has to be the value computed by the function and we return it.&lt;/li&gt;
	&lt;li&gt;If it is the secret value, then we lock this object and revert to the current behaviour.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is faster than what is done currently and can be very much faster if there is contention on the delay.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15645">CLJ-1050</key>
            <summary>Remove a lock in the common case of  deref of delay</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="nicolasoury">Nicolas Oury</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                        <label>performance</label>
                    </labels>
                <created>Sun, 26 Aug 2012 13:24:00 -0500</created>
                <updated>Tue, 18 Sep 2012 06:53:01 -0500</updated>
                    <resolved>Tue, 18 Sep 2012 06:53:01 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29270" author="nicolasoury" created="Mon, 27 Aug 2012 02:37:12 -0500"  >&lt;p&gt;Please close and reject. The patch is not working if val has non final fields.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11454" name="0001-No-lock-in-the-common-path-for-delays.patch" size="1177" author="nicolasoury" created="Sun, 26 Aug 2012 13:24:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1049] Make reducer/folder support reduce-kv</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1049</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, although rfn makes an effort to support reduce-kv, it is wasted effort since the return values of reducer and folder don&apos;t satisfy IKVReduce.&lt;/p&gt;

&lt;p&gt;I have a working patch for this, it&apos;s quite small. I have printed a CA but not sent it, so I won&apos;t reveal the patch yet...&lt;/p&gt;

&lt;p&gt;This also applies to ClojureScript.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15641">CLJ-1049</key>
            <summary>Make reducer/folder support reduce-kv</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tomoj">Tom Jack</reporter>
                        <labels>
                    </labels>
                <created>Wed, 22 Aug 2012 02:22:23 -0500</created>
                <updated>Sun, 23 Sep 2012 20:34:21 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29445" author="tomoj" created="Sat, 15 Sep 2012 00:47:17 -0500"  >&lt;p&gt;Hmm.. it&apos;s not quite as simple as I thought. My first patch simply had reducer/folder implement IKVReduce with `(clojure.core.protocols/kv-reduce coll (xf f1) init)`, but for map and mapcat, this results in strange behavior (reduce-kv reducefs being called with only 2 args).&lt;/p&gt;

&lt;p&gt;Patch 0001 includes modifications to map and mapcat so that the reduce-kv reducef will always be called with 3 args. The previous implementation of mapcat also had the converse problem: during non-kv reduce, if the mapcat fn returned a map, the reducef would be called with 3 args since maps reduce with reduce-kv.&lt;/p&gt;

&lt;p&gt;The patch gives behavior like:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user&amp;gt; (-&amp;gt;&amp;gt; {1 {2 3 4 5} 6 {7 8 9 10}}
        (r/mapcat #(r/map + %2))
        (reduce-kv #(conj %1 [%2 %3]) []))
[[2 5] [4 9] [7 15] [9 19]]
user&amp;gt; (-&amp;gt;&amp;gt; [{2 3 4 5} {7 8 9 10}]
        (r/mapcat identity)
        (r/reduce conj []))
[[2 3] [4 5] [7 8] [9 10]]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29528" author="tomoj" created="Sun, 23 Sep 2012 20:34:21 -0500"  >&lt;p&gt;Would like to discuss these changes (and auto-kv for maps) on clojure-dev, but my membership is still pending. My CA has been received. Anyone know who to contact to get my membership approved?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11497" name="0001-reduce-kv-transformations.diff" size="2180" author="tomoj" created="Sat, 15 Sep 2012 00:45:14 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1048] add test.generative to Clojure&apos;s tests</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1048</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The 0.1.5 release of test generative includes data generators and specs based on data generation, plus a runner that can run both c.t and c.t.g. tests under the same umbrella.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15640">CLJ-1048</key>
            <summary>add test.generative to Clojure&apos;s tests</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Aug 2012 22:23:34 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 7 Sep 2012 11:34:35 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29250" author="stu" created="Tue, 21 Aug 2012 22:26:07 -0500"  >&lt;p&gt;Note that this patch also removes the cyclic load tests. Those tests relied on leaving broken code on the test classpath, which is very hostile to tooling (in this case the test runner&apos;s ability to walk the code in the test directory.)  &lt;/p&gt;

&lt;p&gt;I believe such tests are an antipattern, and should be implemented differently or e.g. placed in an ancillary test suite.&lt;/p&gt;
</comment>
                    <comment id="29252" author="fogus" created="Wed, 22 Aug 2012 10:32:12 -0500"  >&lt;p&gt;I agree with you position on the cyclic load tests.  The patch looks sane to me and ran without hitch. A couple points of note:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;This requires one to re-run &lt;tt&gt;antsetup&lt;/tt&gt; &amp;#8211; not a problem, but it might trip a few people&lt;/li&gt;
	&lt;li&gt;The final output of the test run is different than before.  In the case of a successful run we now see only the generative success stats. Is the regular clojure.test stats included?  It&apos;s not clear to me, but I don&apos;t think they are.  In the fail case we see something like the following.  I actually like the map output better, but one advantage to the stack trace output was that it sometimes helped identify code bugs.  In any case, it would be nice to see an aggregate score at the end.  This is a test.generative feature request I know.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;
     [java] {:clojure.test/vars (test-equality),
     [java]  :thread/name &quot;main&quot;,
     [java]  :pid 8682,
     [java]  :thread 1,
     [java]  :type :assert/fail,
     [java]  :level :warn,
     [java]  :test/actual (not (not true)),
     [java]  :test/expected (not (= nil nil)),
     [java]  :line 28,
     [java]  :tstamp 1345649256308,
     [java]  :file &quot;data_structures.clj&quot;}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In all, I like this! Now we need to start thinking up more specs.&lt;/p&gt;</comment>
                    <comment id="29253" author="stu" created="Wed, 22 Aug 2012 11:51:33 -0500"  >&lt;p&gt;The stats reports are aggregate, i.e. they rollup both the generative and clojure.test stats. It would be straightforward to separate these in the report. I will look at doing that in the next drop of c.t.g.&lt;/p&gt;

&lt;p&gt;The output already includes stack traces for errors, but not for test failures. I thought this was consistent with clojure.test, but maybe I missed something.&lt;/p&gt;</comment>
                    <comment id="29254" author="fogus" created="Wed, 22 Aug 2012 12:59:47 -0500"  >&lt;p&gt;Thanks for the clarification Stu. You&apos;re right that the exception behavior is consistent, the confusion was my own.&lt;/p&gt;</comment>
                    <comment id="29400" author="stuart.sierra" created="Fri, 7 Sep 2012 11:34:35 -0500"  >&lt;p&gt;Patches have been applied as of September 1, 2012.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11452" name="add-test-generative.patch" size="17914" author="stu" created="Tue, 21 Aug 2012 22:23:34 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1047] Simplify the process of requiring fj in clojure.core.reducers</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1047</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;this patch removes compile-if in favor of import-if, removing code duplication&lt;/p&gt;</description>
                <environment></environment>
            <key id="15638">CLJ-1047</key>
            <summary>Simplify the process of requiring fj in clojure.core.reducers</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Aug 2012 18:27:01 -0500</created>
                <updated>Tue, 21 Aug 2012 18:27:01 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11451" name="001-simplify-fj-importing.patch" size="2641" author="bronsa" created="Tue, 21 Aug 2012 18:27:01 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1046] Drop-while as a reducer</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1046</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Implement drop-while as a reducer. Follows the same atom-based strategy as drop and take.&lt;/p&gt;

&lt;p&gt;Does not depend on any of my other reducer patches, but there will probably be some minor merge conflicts unless it is merged after &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1045&quot; title=&quot;Generalize/refactor implementation of PersistentVector/coll-fold&quot;&gt;CLJ-1045&lt;/a&gt;, and before &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-992&quot; title=&quot;`iterate` reducer&quot;&gt;CLJ-992&lt;/a&gt; and &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-993&quot; title=&quot;`range` reducer&quot;&gt;CLJ-993&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15636">CLJ-1046</key>
            <summary>Drop-while as a reducer</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Sat, 18 Aug 2012 19:11:59 -0500</created>
                <updated>Sat, 18 Aug 2012 19:11:59 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                                <attachments>
                    <attachment id="11445" name="drop-while-reducer.patch" size="1997" author="amalloy" created="Sat, 18 Aug 2012 19:11:59 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1045] Generalize/refactor implementation of PersistentVector/coll-fold</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1045</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Vector currently contains a specialized implementation of the folding algorithm &quot;split the collection in half until the pieces are small enough&quot;. The attached commit lifts out the general strategy so that it can be reused by other collection types amenable to splitting.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-993&quot; title=&quot;`range` reducer&quot;&gt;CLJ-993&lt;/a&gt; depends on this patch, as it uses the new fold-by-halves function.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15635">CLJ-1045</key>
            <summary>Generalize/refactor implementation of PersistentVector/coll-fold</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Sat, 18 Aug 2012 19:06:24 -0500</created>
                <updated>Fri, 25 Jan 2013 14:29:31 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30481" author="jafingerhut" created="Fri, 25 Jan 2013 14:29:31 -0600"  >&lt;p&gt;clj-1045-fold-by-halves-patch-v2.txt dated Jan 25 2013 is identical to fold-by-halves.patch dated Aug 18 2012, except it updates one line of context changed by a recent commit to Clojure master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11817" name="clj-1045-fold-by-halves-patch-v2.txt" size="2748" author="jafingerhut" created="Fri, 25 Jan 2013 14:29:31 -0600" />
                    <attachment id="11444" name="fold-by-halves.patch" size="2745" author="amalloy" created="Sat, 18 Aug 2012 19:06:24 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1044] Enable refering to -&gt;type inside deftype</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1044</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Inside defrecord is possible to refer to -&amp;gt;type-ctor, that is not possible inside deftype.&lt;br/&gt;
This patch adds an implicit declare, as done in defrecord&lt;/p&gt;</description>
                <environment></environment>
            <key id="15634">CLJ-1044</key>
            <summary>Enable refering to -&gt;type inside deftype</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Sat, 18 Aug 2012 08:02:50 -0500</created>
                <updated>Sat, 15 Dec 2012 07:35:38 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30164" author="halgari" created="Mon, 3 Dec 2012 11:29:57 -0600"  >&lt;p&gt;Seems valid. Vetting. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11442" name="001-enable-factory-ctor-inside-deftype.diff" size="835" author="bronsa" created="Sat, 18 Aug 2012 08:02:50 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1043] Unordered literals does not preserve left-to-right evaluation of arguments</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1043</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Given: (defn f &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (println x) x)&lt;/p&gt;

&lt;p&gt;#{(f 2) (f 1)}&lt;/p&gt;

&lt;p&gt;Prints:&lt;/p&gt;

&lt;p&gt;1&lt;br/&gt;
2&lt;/p&gt;

&lt;p&gt;But expected would be:&lt;/p&gt;

&lt;p&gt;2&lt;br/&gt;
1&lt;/p&gt;

&lt;p&gt;This issue is related to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-288&quot; title=&quot;Compilation of unordered collections &quot;&gt;CLJS-288&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15632">CLJ-1043</key>
            <summary>Unordered literals does not preserve left-to-right evaluation of arguments</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bbloom">Brandon Bloom</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 Aug 2012 21:25:31 -0500</created>
                <updated>Sun, 23 Sep 2012 19:38:35 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29525" author="jafingerhut" created="Sun, 23 Sep 2012 18:01:17 -0500"  >&lt;p&gt;I have the same question as David Nolen for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-288&quot; title=&quot;Compilation of unordered collections &quot;&gt;CLJS-288&lt;/a&gt;: Is this a bug, or just behavior you didn&apos;t expect?&lt;/p&gt;

&lt;p&gt;It seems that vectors preserve the order of evaluation, so if you really want to control evaluation order you could use something like (set &lt;span class=&quot;error&quot;&gt;&amp;#91;(f 2) (f 1)&amp;#93;&lt;/span&gt;) or (set (map f &lt;span class=&quot;error&quot;&gt;&amp;#91;2 1&amp;#93;&lt;/span&gt;)).&lt;/p&gt;</comment>
                    <comment id="29526" author="bbloom" created="Sun, 23 Sep 2012 19:38:35 -0500"  >&lt;p&gt;I&apos;d consider the expected default behavior of any syntax or macro to evaluate each sub-form once each, from left to right. Conditional, repeated, or out-of-order evaluation should be documented as deviations from that norm. If you buy that, then this is either a code or a documentation bug. My vote is for code bug.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1042] [PATCH] Allow negative substring indices for (subs)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1042</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This adds Python-style negative string indices for (subs), e.g.:&lt;/p&gt;

&lt;p&gt;(subs &quot;foo bar&quot; -3) ;; -&amp;gt; &quot;bar&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15629">CLJ-1042</key>
            <summary>[PATCH] Allow negative substring indices for (subs)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ieure">Ian Eure</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                    </labels>
                <created>Tue, 14 Aug 2012 13:11:40 -0500</created>
                <updated>Wed, 19 Sep 2012 13:34:50 -0500</updated>
                    <resolved>Mon, 17 Sep 2012 07:07:57 -0500</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29196" author="jafingerhut" created="Thu, 16 Aug 2012 19:17:19 -0500"  >&lt;p&gt;Ian, thanks for the patch.  It is Rich Hickey&apos;s policy only to consider applying patches to Clojure from those who have signed a Clojure contributor agreement: &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Were you interested in doing so, or perhaps it is already in progress?&lt;/p&gt;</comment>
                    <comment id="29232" author="ieure" created="Mon, 20 Aug 2012 11:44:04 -0500"  >&lt;p&gt;I wasn&apos;t aware that this was necessary. I&apos;m mailing the form in.&lt;/p&gt;</comment>
                    <comment id="29275" author="jafingerhut" created="Mon, 27 Aug 2012 19:56:00 -0500"  >&lt;p&gt;Patch clj-1042-negative-subs-patch2.txt dated Aug 27 2012 is identical to Ian Eure&apos;s negative-subs.patch, except it is in the desired git format.&lt;/p&gt;

&lt;p&gt;Ian, for future reference on creating patches in the desired format, see the instructions under the heading &quot;Development&quot; on this page: &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29279" author="ieure" created="Tue, 28 Aug 2012 11:47:43 -0500"  >&lt;p&gt;Thanks, will do.&lt;/p&gt;</comment>
                    <comment id="29358" author="steveminer@gmail.com" created="Tue, 4 Sep 2012 15:53:22 -0500"  >&lt;p&gt;If Clojure decides to support Python-style negative indices, you should also consider adding support to subvec.&lt;/p&gt;</comment>
                    <comment id="29386" author="ieure" created="Thu, 6 Sep 2012 12:17:30 -0500"  >&lt;p&gt;Patch extended to support negative indices on  (subvec) as well.&lt;/p&gt;</comment>
                    <comment id="29396" author="abp" created="Fri, 7 Sep 2012 08:01:17 -0500"  >&lt;p&gt;The arg to rindex should probably be tagged with ^clojure.lang.Counted instead of ^String now.&lt;/p&gt;</comment>
                    <comment id="29401" author="steveminer@gmail.com" created="Fri, 7 Sep 2012 13:31:44 -0500"  >&lt;p&gt;Regarding the previous comment, String is a Java class so it isn&apos;t a clojure.lang.Counted.  Is the type hint necessary?  Maybe it should be on the call rather than the defn.  &lt;/p&gt;

&lt;p&gt;Ignoring the type hinting, I&apos;ll suggest a slightly simpler way to implement the rindex logic:&lt;/p&gt;

&lt;p&gt;(defn rindex &lt;span class=&quot;error&quot;&gt;&amp;#91;coll i&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (if (neg? i) (+ (count coll) i) i))&lt;/p&gt;

&lt;p&gt;In any case, I&apos;m not sure rindex should be public even if you want the subs and subvec enhancements.  Someone needs to make the case for adding a new function to core.&lt;/p&gt;

&lt;p&gt;The Pythonic negative index is a debatable feature since it&apos;s pretty easy to implement for yourself if you want it.&lt;/p&gt;</comment>
                    <comment id="29404" author="abp" created="Fri, 7 Sep 2012 23:05:07 -0500"  >&lt;p&gt;Sorry, the type hint on rindex args isn&apos;t necessary at all. Just looked up in the source, calling count should never be reflective, since (count ..) emits calls to clojure.lang.RT/count.&lt;/p&gt;

&lt;p&gt;Your solution looks good.&lt;/p&gt;</comment>
                    <comment id="29460" author="stu" created="Mon, 17 Sep 2012 07:07:45 -0500"  >&lt;p&gt;Negative indices were considered and rejected a long time ago. (I am merely conveying information--I have no strong opinion on this one.)&lt;/p&gt;</comment>
                    <comment id="29467" author="jafingerhut" created="Mon, 17 Sep 2012 12:07:56 -0500"  >&lt;p&gt;Note: If some people really like negative index behavior as in Perl or Python, it is straightforward to create a library of functions in a different namespace, perhaps with different names, that can do it.  Perhaps a &quot;pythonisms&quot; library?&lt;/p&gt;</comment>
                    <comment id="29485" author="ieure" created="Tue, 18 Sep 2012 12:31:06 -0500"  >&lt;p&gt;Would this be accepted as part of clojure.string instead? I considered putting it there, but thought it would be confusing to have multiple substring functions in different namespaces.&lt;/p&gt;

&lt;p&gt;This is very helpful in practice, and I&apos;d really like to see at least the (subs) stuff in Clojure.&lt;/p&gt;</comment>
                    <comment id="29486" author="jafingerhut" created="Tue, 18 Sep 2012 14:52:23 -0500"  >&lt;p&gt;Disclaimer: I&apos;m no Clojure/core member, so can&apos;t speak authoritatively on whether something would or would not be accepted into clojure.string.&lt;/p&gt;

&lt;p&gt;However, given that clojure.string is distributed with clojure.core, my guess is it would not be accepted.  You&apos;d be able to get things like this out for you and others as a separate library distributed on Clojars.  That would also make it easy to include other Python-like things that you don&apos;t find in Clojure already.&lt;/p&gt;</comment>
                    <comment id="29489" author="ieure" created="Tue, 18 Sep 2012 16:02:24 -0500"  >&lt;p&gt;This isn&apos;t about &quot;python-like things,&quot; this is about a useful feature. Lots of languages support this: Perl, PHP, Ruby, Python, JavaScript, to name a few. Are you really suggesting that I should create a whole package for a version of a function in clojure.core with slightly different semantics? That&apos;s insane.&lt;/p&gt;

&lt;p&gt;Anyway, I&apos;m done wasting my time trying to navigate this hopelessly broken process. Maybe it would have been accepted if I included yet another way to interoperate with Java types.&lt;/p&gt;</comment>
                    <comment id="29490" author="michaelklishin" created="Tue, 18 Sep 2012 17:09:44 -0500"  >&lt;p&gt;Stuart, do you remember why specifically negative indexes were rejected? Developing a separate library for a minor improvement to an existing function sounds unreasonable.&lt;/p&gt;</comment>
                    <comment id="29491" author="holo" created="Tue, 18 Sep 2012 17:10:23 -0500"  >&lt;p&gt;some explanation about this topic was given by Rich Hickey himself here: &lt;a href=&quot;http://news.ycombinator.com/item?id=2053908&quot;&gt;http://news.ycombinator.com/item?id=2053908&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;citation:&lt;br/&gt;
&quot;...Yes, there is a backlog from when it was just me, and it will take a while to whittle down. We have finite resources and have to prioritize. I can assure you we have more important things to concentrate on than your negative index substring enhancement, and are doing so. You&apos;ll just have to be patient. Or, if you insist, I&apos;ll just reject it now because a) IMO it&apos;s goofy, b) you can make your own function that works that way c) we don&apos;t get a free ride from j.l.String, d) it begs the question of negative indices elsewhere...&quot;&lt;/p&gt;

&lt;p&gt;i&apos;ve been following this thread hoping this feature would be included. but whatever the reason was for the rejection, i&apos;m sure it was thoughtful. great thanks for this wonderful language, and thanks Ian Eure for his effort.&lt;/p&gt;</comment>
                    <comment id="29492" author="steveminer@gmail.com" created="Tue, 18 Sep 2012 17:25:41 -0500"  >&lt;p&gt;That HN link eventually leads back to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-688&quot; title=&quot;subs function should count back from the end of the string when given negative offset&quot;&gt;&lt;del&gt;CLJ-688&lt;/del&gt;&lt;/a&gt; which was rejected.&lt;/p&gt;</comment>
                    <comment id="29499" author="stu" created="Wed, 19 Sep 2012 12:03:38 -0500"  >&lt;p&gt;Michael: A proposal for negative indexes would need to be systematic in considering implications for all functions that have index arguments.&lt;/p&gt;

&lt;p&gt;Ian: Clojure is driven by design, not incremental piling of features.&lt;/p&gt;

&lt;p&gt;All: clojure.string is incomplete in more important and fundamental ways than negative indexes. This sucks now, and will suck worse as more code is written in different dialects. I find myself wishing string was a contrib, so we could iterate faster.&lt;/p&gt;</comment>
                    <comment id="29500" author="jafingerhut" created="Wed, 19 Sep 2012 13:34:50 -0500"  >&lt;p&gt;Stuart: Any specific proposals for how you&apos;d like to see clojure.string improve?  If it can be made a contrib, that would be cool, but understood if that would be considered too breaking of a change.  Even if it isn&apos;t made a contrib, having tickets for improvement ideas you are willing to see means patches might get written, and they&apos;ll get in some time.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11480" name="clj-1042-negative-indices-patch3.txt" size="6402" author="ieure" created="Thu, 6 Sep 2012 12:17:30 -0500" />
                    <attachment id="11425" name="negative-subs.patch" size="3266" author="ieure" created="Tue, 14 Aug 2012 13:11:40 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1041] reduce-kv on sorted maps should stop on seeing a Reduced value</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1041</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The current implementation is dereferencing Reduced and returning them up the chain; but that means that parent nodes don&apos;t know the reduction has completed, so the reduction might continue along other paths down the tree.&lt;/p&gt;

&lt;p&gt;This patch touches the same areas of code as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1040&quot; title=&quot;reduce-kv on sorted maps should reduce, in sorted order&quot;&gt;&lt;del&gt;CLJ-1040&lt;/del&gt;&lt;/a&gt; so will have conflicts if both patches are merged separately. However, as noted in my comment on &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1040&quot; title=&quot;reduce-kv on sorted maps should reduce, in sorted order&quot;&gt;&lt;del&gt;CLJ-1040&lt;/del&gt;&lt;/a&gt;, I don&apos;t think the patch there is correct yet, so I&apos;ve also included a commit (7beb14256) to fix the issue in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1040&quot; title=&quot;reduce-kv on sorted maps should reduce, in sorted order&quot;&gt;&lt;del&gt;CLJ-1040&lt;/del&gt;&lt;/a&gt;. Thus, this patch can be merged independently of 1040&apos;s patch, solving both issues without a merge conflict.&lt;/p&gt;

&lt;p&gt;This patch also includes tests for both issues, which fail before my commits are applied, and pass afterwards.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15622">CLJ-1041</key>
            <summary>reduce-kv on sorted maps should stop on seeing a Reduced value</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Aug 2012 15:17:49 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29144" author="aaron" created="Tue, 14 Aug 2012 19:46:39 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter confirmed on the CA list.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11420" name="sorted-map-kvreduce.patch" size="4081" author="amalloy" created="Fri, 10 Aug 2012 15:17:49 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1040] reduce-kv on sorted maps should reduce, in sorted order</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1040</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently reduces, but not in sorted order. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15620">CLJ-1040</key>
            <summary>reduce-kv on sorted maps should reduce, in sorted order</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Aug 2012 10:47:08 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Wed, 15 Aug 2012 12:25:35 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29109" author="amalloy" created="Fri, 10 Aug 2012 15:09:10 -0500"  >&lt;p&gt;Stuart, your patch doesn&apos;t check for Reduced after calling f on the current node; I think you need to move that check along with the call to f.&lt;/p&gt;</comment>
                    <comment id="29111" author="amalloy" created="Fri, 10 Aug 2012 15:18:52 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1041&quot; title=&quot;reduce-kv on sorted maps should stop on seeing a Reduced value&quot;&gt;&lt;del&gt;CLJ-1041&lt;/del&gt;&lt;/a&gt; is a related issue, and its patch also includes a commit that I think would fix your patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11418" name="fix-reduce-kv-for-sorted-maps.patch" size="1171" author="stu" created="Fri, 10 Aug 2012 10:55:08 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1039] Using &apos;def with metadata {:type :anything} throws ClassCastException</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1039</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In lein 1.7.1 (and CCW) the form (def ^{:type :anything} mydef 1) throws &quot;ClassCastException clojure.lang.Var cannot be cast to clojure.lang.IObj  clojure.core/with-meta (core.clj:211)&quot;.&lt;br/&gt;
This seems to be due to setting the :type metadata. With other metadata keys it works well.&lt;/p&gt;

&lt;p&gt;If it is intended to forbid setting the :type metadata, then there should be an appropriate error message instead of the ClassCastException&lt;/p&gt;


&lt;p&gt;In lein2 repl which is using &quot;REPL-y 0.1.0-beta8&quot; the exception does not occur.&lt;/p&gt;

&lt;p&gt;Full stacktrace:&lt;br/&gt;
java.lang.ClassCastException: clojure.lang.Var cannot be cast to clojure.lang.IObj&lt;br/&gt;
 at clojure.core$with_meta.invoke (core.clj:211)&lt;br/&gt;
    clojure.core$vary_meta.doInvoke (core.clj:617)&lt;br/&gt;
    clojure.lang.RestFn.invoke (RestFn.java:425)&lt;br/&gt;
    clojure.core/fn (core_print.clj:76)&lt;br/&gt;
    clojure.lang.MultiFn.invoke (MultiFn.java:167)&lt;br/&gt;
    clojure.core$pr_on.invoke (core.clj:3266)&lt;br/&gt;
    clojure.core$pr.invoke (core.clj:3278)&lt;br/&gt;
    clojure.lang.AFn.applyToHelper (AFn.java:161)&lt;br/&gt;
    clojure.lang.RestFn.applyTo (RestFn.java:132)&lt;br/&gt;
    clojure.core$apply.invoke (core.clj:601)&lt;br/&gt;
    clojure.core$prn.doInvoke (core.clj:3311)&lt;br/&gt;
    clojure.lang.RestFn.invoke (RestFn.java:408)&lt;br/&gt;
    clojure.main$repl$read_eval_print__6405.invoke (main.clj:246)&lt;br/&gt;
    clojure.main$repl$fn__6410.invoke (main.clj:266)&lt;br/&gt;
    clojure.main$repl.doInvoke (main.clj:266)&lt;br/&gt;
    clojure.lang.RestFn.invoke (RestFn.java:512)&lt;br/&gt;
    user$eval27$acc_&lt;em&gt;3261&lt;/em&gt;&lt;em&gt;auto&lt;/em&gt;__&lt;em&gt;30$fn&lt;/em&gt;_32.invoke (NO_SOURCE_FILE:1)&lt;br/&gt;
    clojure.lang.AFn.run (AFn.java:24)&lt;br/&gt;
    java.lang.Thread.run (Thread.java:662)&lt;/p&gt;</description>
                <environment>Ubuntu, lein 1.7.1 - lein repl</environment>
            <key id="15618">CLJ-1039</key>
            <summary>Using &apos;def with metadata {:type :anything} throws ClassCastException</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gv">Gunnar V&#246;lkel</reporter>
                        <labels>
                    </labels>
                <created>Thu, 9 Aug 2012 06:05:34 -0500</created>
                <updated>Fri, 10 Aug 2012 13:40:31 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29106" author="stu" created="Fri, 10 Aug 2012 13:40:31 -0500"  >&lt;p&gt;This is caused by the printer dispatch function&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defmulti print-method (fn [x writer]
                         (let [t (get (meta x) :type)]
                           (if (keyword? t) t (class x)))))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which ends up calling the default dispatch, which tries to vary-meta.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1038] Docstring for deliver doesn&apos;t match behavior</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1038</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The docstring for deliver doesn&apos;t match the actual behavior. It says an exception gets thrown on multiple delivers, but that&apos;s no longer the case, as of 1.3 (hat tip to clgv on irc).&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (doc deliver)
-------------------------
clojure.core/deliver
([promise val])
  Alpha - subject to change.
  Delivers the supplied value to the promise, releasing any pending
  derefs. A subsequent call to deliver on a promise will &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; an exception.
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [p (promise)] 
  (deliver p &lt;span class=&quot;code-quote&quot;&gt;&quot;hi&quot;&lt;/span&gt;) 
  (deliver p &lt;span class=&quot;code-quote&quot;&gt;&quot;bye&quot;&lt;/span&gt;) 
  @p)
;=&amp;gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;hi&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This patch updates the docstring to reflect actual behavior: &quot;will throw an exception.&quot; -&amp;gt; &quot;will have no effect.&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15615">CLJ-1038</key>
            <summary>Docstring for deliver doesn&apos;t match behavior</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="trptcolin">Colin Jones</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Tue, 7 Aug 2012 16:47:29 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 24 Aug 2012 07:41:47 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29107" author="stu" created="Fri, 10 Aug 2012 13:48:57 -0500"  >&lt;p&gt;Both patches are correct. Colin&apos;s patch documents the side effect, my variant also commits to the return values. Take your pick.&lt;/p&gt;</comment>
                    <comment id="29110" author="richhickey" created="Fri, 10 Aug 2012 15:09:35 -0500"  >&lt;p&gt;Don&apos;t doc return&lt;/p&gt;</comment>
                    <comment id="29259" author="stuart.sierra" created="Fri, 24 Aug 2012 07:41:47 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1038&quot; title=&quot;Docstring for deliver doesn&amp;#39;t match behavior&quot;&gt;&lt;del&gt;CLJ-1038&lt;/del&gt;&lt;/a&gt; Update docstring for deliver&apos;s actual behavior (patch applied Aug 15, 2012) &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11413" name="0001-Update-docstring-for-deliver-s-actual-behavior.patch" size="847" author="trptcolin" created="Tue, 7 Aug 2012 16:47:29 -0500" />
                    <attachment id="11419" name="correct-deliver-docstring.patch" size="945" author="stu" created="Fri, 10 Aug 2012 13:48:57 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1037] Allow doc strings for both interfaces and concrete implementations</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1037</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In this post&lt;br/&gt;
&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/84de74740928da76#&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/84de74740928da76#&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I mentioned the rationale (I think) why this is important and needed. Thank you for consideration.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15613">CLJ-1037</key>
            <summary>Allow doc strings for both interfaces and concrete implementations</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="wrn.lynn">Warren Lynn</reporter>
                        <labels>
                    </labels>
                <created>Sat, 4 Aug 2012 10:30:53 -0500</created>
                <updated>Sat, 4 Aug 2012 10:30:53 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1036] Util/hasheq should be hashing a BigInteger to the same values as Long, and BigInt</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1036</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc string for &lt;tt&gt;hash&lt;/tt&gt; states that it defines a hash code function that is consistent with &lt;tt&gt;=&lt;/tt&gt;, but for java.math.BigInteger &lt;tt&gt;hash&lt;/tt&gt; is not consistent with &lt;tt&gt;=&lt;/tt&gt;.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (apply = [(Long. -1) -1N (biginteger -1)])
true
user=&amp;gt; (map hash [(Long. -1) -1N (biginteger -1)])
(0 0 -1)
user=&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It is possible to have a PHM with two key/value pairs where the keys are equal, and the hash codes are different:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (assoc clojure.lang.PersistentHashMap/EMPTY (biginteger -1) :oops! -1N :one)
{-1N :one, -1 :oops!}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The expected behavior is the same as PersistentArrayMap, which does not have this issue, because it does not hash its keys:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (assoc clojure.lang.PersistentArrayMap/EMPTY (biginteger -1) :oops! -1N :one)
{-1 :one}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This same misbehavior also occurs for Doubles and Floats:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;thalia.core=&amp;gt; (apply = [(Float. 1e9) (Double. 1e9)])
true
thalia.core=&amp;gt; (map hash [(Float. 1e9) (Double. 1e9)])
(1315859240 1104006501)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That leads to the same difference in array-map and hash-map behavior as above for BigInteger and BigInt.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15610">CLJ-1036</key>
            <summary>Util/hasheq should be hashing a BigInteger to the same values as Long, and BigInt</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Thu, 2 Aug 2012 08:41:17 -0500</created>
                <updated>Fri, 12 Apr 2013 08:48:23 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29076" author="pjstadig" created="Thu, 2 Aug 2012 09:55:54 -0500"  >&lt;p&gt;Also, the biginteger function has metadata saying that it has been added since 1.0, but it was actually added in 1.3.  The bigint function has metadata saying that it has been added since 1.3, but it has been added since 1.0.&lt;/p&gt;

&lt;p&gt;I think during the work to implement BigInt someone renamed the existing bigint function (which used to return a BigInteger) to biginteger, and the metadata got carried with it, then a new bigint function was added with :since 1.3 metadata even though that function name has existed since 1.0.&lt;/p&gt;</comment>
                    <comment id="29533" author="jafingerhut" created="Wed, 26 Sep 2012 11:59:08 -0500"  >&lt;p&gt;clj-1036-hasheq-for-biginteger-patch-v1.txt dated Sep 26 2012 makes BigInteger&apos;s return equal hash values for values considered equal by =.&lt;/p&gt;

&lt;p&gt;It does the same for Float and Double types, which before returned different hash values for values considered equal by =&lt;/p&gt;

&lt;p&gt;I went ahead and changed the :added metadata on bigint and biginteger, although I can see that without my change, the person who did that may have meant for the :added to go with the behavior of the function, not with the name.  Paul&apos;s suggested change that I have in the patch is for the :added metadata to go with the name, not the function behavior.  It is easy to remove that part of the patch if that change is not desired.&lt;/p&gt;</comment>
                    <comment id="29934" author="richhickey" created="Tue, 13 Nov 2012 15:29:12 -0600"  >&lt;p&gt;You can&apos;t just consider only the lower long of bigints. Also, what&apos;s the rationale for the float stuff?&lt;/p&gt;</comment>
                    <comment id="29938" author="jafingerhut" created="Tue, 13 Nov 2012 21:44:14 -0600"  >&lt;p&gt;clj-1036-hasheq-for-biginteger-patch-v2.txt dated Nov 13 2012 is identical to clj-1036-hasheq-for-biginteger-patch-v1.txt except that it addresses Rich&apos;s comment that for BigInt&apos;s and BigInteger values that don&apos;t fit in a long, their entire value must be hashed.&lt;/p&gt;

&lt;p&gt;The rationale for the changes to hasheq for Float and Double types is the same as the rationale for the change for BigInteger: without that change, Float and Double types that are = can have different hasheq values.&lt;/p&gt;</comment>
                    <comment id="29939" author="pjstadig" created="Wed, 14 Nov 2012 05:18:58 -0600"  >&lt;p&gt;Although you are correct that Double and Float are &lt;tt&gt;=&lt;/tt&gt;, but have different hashes:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (apply = [(Double. -1.0) (Float. -1.0)])
true
user=&amp;gt; (map hash [(Double. -1.0) (Float. -1.0)])
(-1074790400 -1082130432)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I could not get the same errant behavior out of PHM:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (assoc clojure.lang.PersistentHashMap/EMPTY (Float. -1.0) :oops! (Double. -1.0) :one)
{-1.0 :one}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I haven&apos;t taken the time to investigate exactly what is happening here, but either way I think this ticket is very specifically about BigInteger and the Float/Double issue could be explored in another ticket.&lt;/p&gt;</comment>
                    <comment id="29943" author="jafingerhut" created="Wed, 14 Nov 2012 10:08:59 -0600"  >&lt;p&gt;I can open another ticket for the Float/Double issue if that is what people would prefer.&lt;/p&gt;

&lt;p&gt;I think what is happening in the test case you give, Paul, is that the hash values for (Float. -1.0) and (Double. -1.0) happen to be the same in their least significant 20 bits, and PHM isn&apos;t using the upper bits where the hash values differ.&lt;/p&gt;

&lt;p&gt;Clojure 1.5.0-beta without patch:&lt;br/&gt;
user=&amp;gt; (map #(format &quot;%x&quot; %) (map hash &lt;span class=&quot;error&quot;&gt;&amp;#91;(Float. -1.0) (Double. -1.0)&amp;#93;&lt;/span&gt;))&lt;br/&gt;
(&quot;bf800000&quot; &quot;bff00000&quot;)&lt;/p&gt;

&lt;p&gt;There are other Float/Double values where this lucky accident doesn&apos;t happen, e.g.&lt;/p&gt;

&lt;p&gt;Clojure 1.5.0-beta1 without patch:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (= (Float. 1e9) (Double. 1e9))&lt;br/&gt;
true&lt;br/&gt;
user=&amp;gt; (map hash &lt;span class=&quot;error&quot;&gt;&amp;#91;(Float. 1e9) (Double. 1e9)&amp;#93;&lt;/span&gt;)&lt;br/&gt;
(1315859240 1104006501)&lt;br/&gt;
user=&amp;gt; (assoc clojure.lang.PersistentHashMap/EMPTY (Float. 1e9) :oops! (Double. 1e9) :one)&lt;/p&gt;
{1.0E9 :one, 1.0E9 :oops!}

&lt;p&gt;With 1.5.0-beta1 plus patch clj-1036-hasheq-for-biginteger-patch-v2.txt:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (= (Float. 1e9) (Double. 1e9))&lt;br/&gt;
true&lt;br/&gt;
user=&amp;gt; (map hash &lt;span class=&quot;error&quot;&gt;&amp;#91;(Float. 1e9) (Double. 1e9)&amp;#93;&lt;/span&gt;)&lt;br/&gt;
(1315859240 1315859240)&lt;br/&gt;
user=&amp;gt; (assoc clojure.lang.PersistentHashMap/EMPTY (Float. 1e9) :oops! (Double. 1e9) :one)&lt;/p&gt;
{1.0E9 :one}</comment>
                    <comment id="30341" author="jafingerhut" created="Tue, 1 Jan 2013 11:30:41 -0600"  >&lt;p&gt;Presumptuously changing status from Not Approved to Vetted, since patch clj-1036-hasheq-for-biginteger-patch-v2.txt should address the reasons that Rich marked the previous patch as Not Approved.  Changing it to Vetted on the assumption that if Stuart Halloway marked the previous patch as Screened, the ticket itself is good enough to be Vetted.&lt;/p&gt;</comment>
                    <comment id="30939" author="richhickey" created="Fri, 12 Apr 2013 08:48:23 -0500"  >&lt;p&gt;Patches and tickets need to be better than this. Talks about BigInteger, changes hash for doubles. Lists problem but not approach, need to trawl through comments and code to see what&apos;s going on, etc.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11674" name="clj-1036-hasheq-for-biginteger-patch-v2.txt" size="3639" author="jafingerhut" created="Tue, 13 Nov 2012 21:44:14 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1035] Remove the need to use &quot;:import&quot; of a record</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1035</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Right now if I need to use a record defined in another name space, I need to do this:&lt;/p&gt;

&lt;p&gt;(ns myproj.test.xyz&lt;br/&gt;
  (:use &lt;span class=&quot;error&quot;&gt;&amp;#91;myproj.xyz&amp;#93;&lt;/span&gt;)&lt;br/&gt;
  (:import &lt;span class=&quot;error&quot;&gt;&amp;#91;myproj.xyz MyRecord&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;Hope we can remove the need of &quot;:import&quot; clause.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15603">CLJ-1035</key>
            <summary>Remove the need to use &quot;:import&quot; of a record</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="wrn.lynn">Warren Lynn</reporter>
                        <labels>
                    </labels>
                <created>Sun, 29 Jul 2012 13:46:18 -0500</created>
                <updated>Fri, 10 Aug 2012 14:19:55 -0500</updated>
                    <resolved>Fri, 10 Aug 2012 12:44:03 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29100" author="stu" created="Fri, 10 Aug 2012 12:44:03 -0500"  >&lt;p&gt;Hi Warren,&lt;/p&gt;

&lt;p&gt;Importing a Java class and using a record are two logically distinct ideas, hence two separate steps in your code. Note that using a namespace makes the defrecord constructor fns (e.g. &lt;del&gt;&amp;gt;MyRecord and map&lt;/del&gt;&amp;gt;MyRecord) available without a second step.&lt;/p&gt;

&lt;p&gt;Please discuss ideas on the mailing list before using JIRA to make suggestions.&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;</comment>
                    <comment id="29108" author="wrn.lynn" created="Fri, 10 Aug 2012 14:19:55 -0500"  >&lt;p&gt;Thanks for giving it a thought.&lt;/p&gt;

&lt;p&gt;I think it is conceptually simple/consistent to say &quot;if you use a namespace, then all the public symbols in that namespace is available without namespace qualification&quot;. It is unnecessary to remind people &quot;Hey, record is an &lt;b&gt;actually&lt;/b&gt; a Java class so the rules do not apply&quot;. I think it is the right choice for Clojure to integrate closely with the host language, but it is not the objective to expose the host details when not needed. If you say &quot;this is a compromise due to some implementation consideration&quot;, then I can understand. But I disagree with the rationale you mentioned. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1034] &quot;Conflicting data-reader mapping&quot; triggered when the same data_readers.clj is on the classpath twice</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1034</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you have two data_readers.clj files on the classpath that agree with one another about the mapping of a given literal, Clojure still claims there is a conflict.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15601">CLJ-1034</key>
            <summary>&quot;Conflicting data-reader mapping&quot; triggered when the same data_readers.clj is on the classpath twice</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Thu, 26 Jul 2012 16:04:32 -0500</created>
                <updated>Sat, 1 Sep 2012 08:37:48 -0500</updated>
                    <resolved>Sat, 1 Sep 2012 08:37:48 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>10</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="29126" author="jkkramer" created="Mon, 13 Aug 2012 09:59:43 -0500"  >&lt;p&gt;This comes up when using checkout dependencies in Leiningen. If the checked-out project contains data_readers.clj, Clojure will throw an exception.&lt;/p&gt;

&lt;p&gt;To reproduce:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;user=&amp;gt;&lt;/b&gt; (spit &quot;/tmp/data_readers.clj&quot; &quot;{foo/bar foo.core/bar}&quot;)&lt;br/&gt;
&lt;em&gt;nil&lt;/em&gt;&lt;br/&gt;
&lt;b&gt;user=&amp;gt;&lt;/b&gt; (with-redefs [clojure.core/data-reader-urls (constantly &lt;span class=&quot;error&quot;&gt;&amp;#91;(java.net.URL. &amp;quot;file:/tmp/data_readers.clj&amp;quot;)&amp;#93;&lt;/span&gt;)] (#&apos;clojure.core/load-data-readers))&lt;br/&gt;
&lt;em&gt;{foo/bar #&apos;foo.core/bar}&lt;/em&gt;&lt;br/&gt;
&lt;b&gt;user=&amp;gt;&lt;/b&gt; (with-redefs [clojure.core/data-reader-urls (constantly &lt;span class=&quot;error&quot;&gt;&amp;#91;(java.net.URL. &amp;quot;file:/tmp/data_readers.clj&amp;quot;)&amp;#93;&lt;/span&gt;)] (#&apos;clojure.core/load-data-readers))&lt;br/&gt;
&lt;em&gt;ExceptionInfo Conflicting data-reader mapping  clojure.core/ex-info (core.clj:4227)&lt;/em&gt;&lt;/p&gt;</comment>
                    <comment id="29127" author="jkkramer" created="Mon, 13 Aug 2012 10:21:19 -0500"  >&lt;p&gt;Attached clj_1034_data_readers_fix.diff with simple fix: checks that new mappings actually point to different vars before claiming a conflict.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11421" name="clj_1034_data_readers_fix.diff" size="1383" author="jkkramer" created="Mon, 13 Aug 2012 10:21:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1033] pr-str and read-string don&apos;t handle @ symbols inside keywords properly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1033</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (read-string (pr-str {(keyword &lt;span class=&quot;code-quote&quot;&gt;&quot;key@other&quot;&lt;/span&gt;) :stuff}))
RuntimeException Map literal must contain an even number of forms  clojure.lang.Util.runtimeException (Util.java:170)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;pr-str emits &quot;{:key@other :stuff}&quot;, which read-string fails to interpret correctly. Either pr-str needs to escape the @ symbol, or read-string needs to handle the symbol inside a keyword.&lt;/p&gt;

&lt;p&gt;Background: I&apos;m passing a map with email addresses as keys through Storm bolts, which require a thrift-serializable form. Using the pr-str/read-string combo fails on these keys, so I&apos;ve fallen back to JSON serialization. &lt;/p&gt;</description>
                <environment>Ubuntu 12.04 LTS; Java 1.7.0_05 Java HotSpot(TM) Client VM</environment>
            <key id="15600">CLJ-1033</key>
            <summary>pr-str and read-string don&apos;t handle @ symbols inside keywords properly</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stevenruppert">Steven Ruppert</reporter>
                        <labels>
                        <label>reader</label>
                    </labels>
                <created>Thu, 26 Jul 2012 11:25:38 -0500</created>
                <updated>Sun, 13 Jan 2013 22:58:37 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29101" author="stu" created="Fri, 10 Aug 2012 12:51:33 -0500"  >&lt;p&gt;The &apos;@&apos; character is not a legal character for keywords or symbols (see &lt;a href=&quot;http://clojure.org/reader&quot;&gt;http://clojure.org/reader&lt;/a&gt;). Recategorized as enhancement request.&lt;/p&gt;</comment>
                    <comment id="29102" author="stevenruppert" created="Fri, 10 Aug 2012 13:04:23 -0500"  >&lt;p&gt;Then why doesn&apos;t (keyword &quot;keywith@&quot;) throw an exception? It seems inconsistent with your statement.&lt;/p&gt;</comment>
                    <comment id="29435" author="jafingerhut" created="Thu, 13 Sep 2012 14:23:29 -0500"  >&lt;p&gt;It is a long standing property of Clojure that it does not throw exceptions for everything that is illegal.&lt;/p&gt;</comment>
                    <comment id="29468" author="stevenruppert" created="Mon, 17 Sep 2012 14:16:01 -0500"  >&lt;p&gt;Yeah, but read-string clearly does. Is there a good reason that the &quot;keyword&quot; function &lt;em&gt;can&apos;t&lt;/em&gt; throw an exception? With the other special rules on namespaces within symbol names, the &quot;keyword&quot; function really should be doing validation.&lt;/p&gt;

&lt;p&gt;Another solution would be to allow a ruby-like :&quot;symbol with disallowed characters&quot; literal, but that would also be confusing with how the namespace is handled.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/Ct5v9w0yNAE&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/Ct5v9w0yNAE&lt;/a&gt; has some older discussion on this topic. &lt;/p&gt;</comment>
                    <comment id="29471" author="jafingerhut" created="Mon, 17 Sep 2012 19:43:54 -0500"  >&lt;p&gt;Disclaimer: I&apos;m not a Clojure/core member, just an interested contributor who doesn&apos;t know all the design decisions that were made here.&lt;/p&gt;

&lt;p&gt;Steven, I think perhaps a couple of concerns are: (1) doing such checks would be slower than not doing them, and (2) implementing such checks means having to update them if/when the rules for legal symbols, keywords, namespace names, etc. change.&lt;/p&gt;

&lt;p&gt;Would you be interested in writing strict versions of functions like symbol and keyword for addition to a contrib library?  And test suites that try to hit a significant number of corner cases in the rules for what is legal and what is not?  I mean those as serious questions, not rhetorical ones.  This would permit people that want to use the strict versions of these functions to do so, and at the same time make it easy to measure performance differences between the strict and loose versions.&lt;/p&gt;</comment>
                    <comment id="30435" author="stevenruppert" created="Sun, 13 Jan 2013 22:58:37 -0600"  >&lt;p&gt;Looking back at this, the root cause of the problem is that the {pr} function, although it by default &quot;print&lt;span class=&quot;error&quot;&gt;&amp;#91;s&amp;#93;&lt;/span&gt; in a way that objects can be read by the reader&quot; &lt;span class=&quot;error&quot;&gt;&amp;#91;0&amp;#93;&lt;/span&gt;, doesn&apos;t always do so. Thus, the easiest &quot;fix&quot; is to change its docstring to warn that not all keywords can be read back.&lt;/p&gt;

&lt;p&gt;The deeper problem is that symbol don&apos;t have a reader form that can represent all actually possible keywords (in this case, those with &quot;@&quot; in them). Restricting the actually-possible keywords to match the reader form, i.e. writing a strict &quot;keyword&quot; &lt;b&gt;function&lt;/b&gt; actually seems like a worse solution overall to me. The better solution would be to somehow extend the keyword reader form to allow it to express all possible keywords, possibly ruby&apos;s :&quot;keyword&quot; syntax. Plus, that solution would avoid having to keep hypothetical strict keyword/symbol functions in sync with reader operation, and write test cases for that, and so on.&lt;/p&gt;

&lt;p&gt;Thus, the resolution of this bug comes down to how far we&apos;re willing to go. Changing the docstring would be the easiest, but extending the keyword form would be the &quot;best&quot; resolution, IMO.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;0&amp;#93;&lt;/span&gt;: &lt;a href=&quot;http://clojuredocs.org/clojure_core/clojure.core/pr&quot;&gt;http://clojuredocs.org/clojure_core/clojure.core/pr&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1032] seque leaks threads from the send-off pool</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1032</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Because a new (fill) action is created every time an item is (drain)ed, the LBQ gets loaded up with piles of EOS markers. If the output seq is consumed faster than the input sequence can produce items, then the original agent action does all of the filling in a single action, while the agent&apos;s queue continues to back up with (fill) actions. Eventually the entire sequence is consumed, and each queued action does a blocking .put of an EOS marker; once the queue has filled up, one of these actions blocks forever, since nobody will ever .take from the queue again.&lt;/p&gt;

&lt;p&gt;The attached patch does two things: &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Make sure to put exactly one EOS marker in the stream, by setting the agent&apos;s state to nil if and only if a .offer of EOS has been accepted.&lt;/li&gt;
	&lt;li&gt;Replace all occurrences of .put with .offer (and appropriate checking of the return value). This is necessary because if .put ever blocks, it&apos;s possible for the system to remain in that state forever (say, because the client stops consuming the queue), thus leading to the same leaked-thread scenario.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The diff is a little bit inconvenient to read because of indentation changes; &lt;a href=&quot;https://gist.github.com/b7ecd4395a0d3d473de6&quot;&gt;https://gist.github.com/b7ecd4395a0d3d473de6&lt;/a&gt; is an ignore-whitespace view of the patch for convenience.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15598">CLJ-1032</key>
            <summary>seque leaks threads from the send-off pool</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Wed, 25 Jul 2012 18:03:50 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Sun, 19 Aug 2012 20:11:44 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>5</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29046" author="jafingerhut" created="Thu, 26 Jul 2012 03:50:14 -0500"  >&lt;p&gt;Sorry for me just triggering on the function &quot;seque&quot; without a deep understanding, but is this by any chance the same issue as described in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-823&quot; title=&quot;Piping seque into seque can deadlock&quot;&gt;CLJ-823&lt;/a&gt;?  If so, since this one has a patch and that one doesn&apos;t, might be nice to mark &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-823&quot; title=&quot;Piping seque into seque can deadlock&quot;&gt;CLJ-823&lt;/a&gt; as a duplicate of this one.&lt;/p&gt;</comment>
                    <comment id="29047" author="amalloy" created="Thu, 26 Jul 2012 04:48:35 -0500"  >&lt;p&gt;No, these are separate issues. &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-823&quot; title=&quot;Piping seque into seque can deadlock&quot;&gt;CLJ-823&lt;/a&gt; is just a special case of the general problem that seque is not usable from within an agent action. I have an implementation of seque using futures instead of agents so that this isn&apos;t a problem, but that has other problems of its own, specifically if you don&apos;t fully consume the seque you wind up leaking a future object.&lt;/p&gt;</comment>
                    <comment id="29231" author="amalloy" created="Sun, 19 Aug 2012 20:11:44 -0500"  >&lt;p&gt;Marking as resolved since the patch has been applied in master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11398" name="seque.patch" size="3525" author="amalloy" created="Wed, 25 Jul 2012 18:03:51 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1031] Website documentation for evaluation has misleading information about &quot;load&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1031</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In the documentation at &lt;a href=&quot;http://clojure.org/evaluation&quot;&gt;http://clojure.org/evaluation&lt;/a&gt; the documentation says &quot;(load reader)&quot; and the verbiage below mentions loading from a stream or file. This is misleading since &quot;load&quot; doesn&apos;t take a reader, but a resource. It would also be great to have pointers to load-reader and load-string here. (Where is the source for the website generated from? Is it possible to create a patch/pull request for it?)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15594">CLJ-1031</key>
            <summary>Website documentation for evaluation has misleading information about &quot;load&quot;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="olabini">Ola Bini</reporter>
                        <labels>
                    </labels>
                <created>Wed, 25 Jul 2012 12:25:41 -0500</created>
                <updated>Fri, 10 Aug 2012 13:08:50 -0500</updated>
                    <resolved>Fri, 10 Aug 2012 13:08:50 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29103" author="stu" created="Fri, 10 Aug 2012 13:08:50 -0500"  >&lt;p&gt;Ola:&lt;/p&gt;

&lt;p&gt;Thanks for the report. The website is wikispaces, no easy patch approach AFAIK.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1030] Misleading ClassCastException when coercing a String to int</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1030</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Observed behaviour&lt;/p&gt;

&lt;p&gt;(int &quot;0&quot;) =&amp;gt;&lt;br/&gt;
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Character&lt;/p&gt;

&lt;p&gt;Expected behaviour&lt;br/&gt;
(int &quot;0&quot;) =&amp;gt;&lt;br/&gt;
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer&lt;br/&gt;
or &lt;br/&gt;
IllegalArgumentException&lt;/p&gt;</description>
                <environment></environment>
            <key id="15591">CLJ-1030</key>
            <summary>Misleading ClassCastException when coercing a String to int</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ordnungswidrig">Philipp Meier</reporter>
                        <labels>
                        <label>bug</label>
                    </labels>
                <created>Wed, 25 Jul 2012 06:13:21 -0500</created>
                <updated>Sun, 6 Jan 2013 20:52:40 -0600</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29532" author="jafingerhut" created="Mon, 24 Sep 2012 11:20:07 -0500"  >&lt;p&gt;If someone wants to improve the behavior of int in this case, they should also consider similar improvements to the error messages for unchecked-int, char, and unchecked-char.&lt;/p&gt;</comment>
                    <comment id="30383" author="michael-drogalis" created="Sun, 6 Jan 2013 20:45:00 -0600"  >&lt;p&gt;Patch improved-int-char-casting-error-messages.diff on January 6, 2013.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11793" name="improved-int-char-casting-error-messages.diff" size="3855" author="michael-drogalis" created="Sun, 6 Jan 2013 20:45:00 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1029] ns defmacro allows arbitrary execution of clojure.core fns</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1029</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The form:&lt;/p&gt;

&lt;p&gt;    (ns foo (:print &quot;I AM A ROBOT&quot;))&lt;/p&gt;

&lt;p&gt;will print &quot;I AM A ROBOT&quot;&lt;/p&gt;

&lt;p&gt;This is because the defmacro takes the name of the first element of the reference, looks it up in the clojure.core namespace and invokes it on the rest of the args.&lt;/p&gt;

&lt;p&gt;This is minor, but it does mean that an otherwise declarative form is not executing code.&lt;/p&gt;</description>
                <environment>all</environment>
            <key id="15588">CLJ-1029</key>
            <summary>ns defmacro allows arbitrary execution of clojure.core fns</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="craigbrozefsky">Craig Brozefsky</reporter>
                        <labels>
                    </labels>
                <created>Mon, 23 Jul 2012 21:00:38 -0500</created>
                <updated>Sun, 5 Aug 2012 10:00:07 -0500</updated>
                                    <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29043" author="amalloy" created="Wed, 25 Jul 2012 16:37:07 -0500"  >&lt;p&gt;One apparent problem with this patch is that you throw an exception for :refer. You should add that, and make sure there aren&apos;t any others missing. Also, #{x y z} is better than (set &lt;span class=&quot;error&quot;&gt;&amp;#91;x y z&amp;#93;&lt;/span&gt;), and you should probably use pr-str rather than str, although I can&apos;t think of a case where it matters for the objects in question.&lt;/p&gt;</comment>
                    <comment id="29051" author="jafingerhut" created="Thu, 26 Jul 2012 18:31:58 -0500"  >&lt;p&gt;A more minor detail of patch formatting &amp;#8211; please attach your patch in git format.  See the instructions under the section heading &quot;Development&quot; on this web page: &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29085" author="craigbrozefsky" created="Sun, 5 Aug 2012 09:53:15 -0500"  >&lt;p&gt;git format-patch version of the diff, with the edits suggested by other maintainers.&lt;/p&gt;</comment>
                    <comment id="29086" author="craigbrozefsky" created="Sun, 5 Aug 2012 10:00:07 -0500"  >&lt;p&gt;Alan: please note that :refer was not mentioned in the docstring for ns, or used in any of the unit tests for clojure.&lt;/p&gt;

&lt;p&gt;Are you sure that it is an expected argument, or just an arrangement that happens to work under the current ns macro?  The docstring for &apos;refer itself says to use :use in ns macros instead of calling refer.&lt;/p&gt;

&lt;p&gt;I added &quot;refer&quot; to the set of accepted references all the same.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11412" name="ns-patch.diff" size="1076" author="craigbrozefsky" created="Sun, 5 Aug 2012 09:53:15 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1028] (compile) crashes with NullPointerException if public function &apos;load&apos; is defined</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1028</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When performing AOT compilation, if the namespace being compiled or one of the namespaces :required by it defines a public function named &apos;load&apos;, the compiler will crash with a NullPointerException.&lt;/p&gt;

&lt;p&gt;The following code demonstrates this:&lt;/p&gt;

&lt;p&gt;(ns ca.ancilla.kessler.core (:gen-class)) (defn load &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x) (defn -main &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt; 0)&lt;/p&gt;

&lt;p&gt;When run directly, with &apos;clojure -m ca.ancilla.kessler.core&apos; or &apos;clojure ca/ancilla/kessler/core.clj&apos;, it runs as expected. When loaded with &apos;clojure -i&apos; and (compile)d, however, or when automatically compiled by &apos;lein run&apos;, it results in a NullPointerException (the complete stack trace is attached).&lt;/p&gt;

&lt;p&gt;This occurs whether or not &apos;load&apos; or actually called. It does not, however, occur if &apos;load&apos; is private.&lt;/p&gt;</description>
                <environment>Linux, OpenJDK 1.6.0 64bit</environment>
            <key id="15584">CLJ-1028</key>
            <summary>(compile) crashes with NullPointerException if public function &apos;load&apos; is defined</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="toxicfrog">Ben Kelly</reporter>
                        <labels>
                        <label>Compiler</label>
                        <label>bug</label>
                    </labels>
                <created>Fri, 20 Jul 2012 12:40:30 -0500</created>
                <updated>Fri, 20 Jul 2012 22:06:22 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:35:47 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29007" author="toxicfrog" created="Fri, 20 Jul 2012 12:43:33 -0500"  >&lt;p&gt;If you add (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;load&amp;#93;&lt;/span&gt;) to the (ns), it works fine:&lt;/p&gt;

&lt;p&gt;(ns ca.ancilla.kessler.core (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;load&amp;#93;&lt;/span&gt;) (:gen-class))&lt;br/&gt;
(defn load &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x)&lt;br/&gt;
(defn -main &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt; 0)&lt;/p&gt;

&lt;p&gt;Thanks to llasram on IRC for discovering this.&lt;/p&gt;</comment>
                    <comment id="29010" author="stu" created="Fri, 20 Jul 2012 16:35:38 -0500"  >&lt;p&gt;You should not replace functions in clojure.core.  This is left legal (with a loud CONSOLE warning) for compatibility, but programs that do it are in error.&lt;/p&gt;</comment>
                    <comment id="29015" author="toxicfrog" created="Fri, 20 Jul 2012 22:06:22 -0500"  >&lt;p&gt;So, just to make sure that I have this right, then...&lt;/p&gt;

&lt;p&gt;If I want to create a namespace with a public function that shares a name with a function in clojure.core, the only supported way of doing this is to (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;list of all such functions&amp;#93;&lt;/span&gt;)?&lt;/p&gt;

&lt;p&gt;If so, it would be nice if the warning were replaced with an error, rather than having the compiler emit an error and then &lt;b&gt;crash&lt;/b&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11391" name="stack-trace" size="1541" author="toxicfrog" created="Fri, 20 Jul 2012 12:40:30 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1027] Outdated documentation for gen-class&apos;s :exposes-methods option</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1027</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The docstring for gen-class says the following regarding the :exposes-methods option:&lt;/p&gt;

&lt;p&gt;&quot;It is sometimes necessary to call the superclass&apos; implementation of an&lt;br/&gt;
overridden method. Those methods may be exposed and referred in &lt;br/&gt;
the new method implementation by a local name.&quot;&lt;/p&gt;

&lt;p&gt;To me, this suggests that supplying something like `{foo fooSuper}` allows me to use the symbol `fooSuper` in my new method implementation. Doing this actually results in an error while compiling because `fooSuper` cannot be resolved. It seems that what actually happens is that a `fooSuper` instance method is defined, which calls the superclass&apos;s implementation. The docstring should be updated to reflect this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15580">CLJ-1027</key>
            <summary>Outdated documentation for gen-class&apos;s :exposes-methods option</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="aperiodic">Dan Lidral-Porter</reporter>
                        <labels>
                        <label>docs</label>
                        <label>documentation</label>
                    </labels>
                <created>Wed, 18 Jul 2012 19:01:35 -0500</created>
                <updated>Wed, 18 Jul 2012 19:01:35 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1026] Mixed end-of-line endings in the source code</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1026</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;While examining some of the Clojure source code, I discovered that some files had mixed line endings, or CRLF line endings on a non-Windows box.  Using &lt;tt&gt;.gitattributes&lt;/tt&gt;, we can correct that so that files have the right endings for the platform that it&apos;s on.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15579">CLJ-1026</key>
            <summary>Mixed end-of-line endings in the source code</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jszakmeister">John Szakmeister</reporter>
                        <labels>
                    </labels>
                <created>Tue, 17 Jul 2012 14:25:22 -0500</created>
                <updated>Sat, 30 Mar 2013 08:44:15 -0500</updated>
                                                                            <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28990" author="jszakmeister" created="Tue, 17 Jul 2012 14:26:39 -0500"  >&lt;p&gt;Patch to fix line endings and introduce .gitattributes.&lt;/p&gt;</comment>
                    <comment id="29011" author="stu" created="Fri, 20 Jul 2012 16:47:34 -0500"  >&lt;p&gt;This looks like a change to every line in the world, which makes it hard to vet. Also: will it render incompatible all other outstanding patches at the time it is applied?&lt;/p&gt;</comment>
                    <comment id="29019" author="jszakmeister" created="Sat, 21 Jul 2012 06:52:36 -0500"  >&lt;p&gt;You can use &lt;tt&gt;git diff -w $(git merge-base HEAD master)&lt;/tt&gt; to see the actual diff minus the line ending change.  Here it is inline:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;:: git diff -w $(git merge-base HEAD master)
diff --git a/.gitattributes b/.gitattributes
&lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; file mode 100644
index 0000000..7b89cfa
--- /dev/&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
+++ b/.gitattributes
@@ -0,0 +1,6 @@
+*.txt           text
+*.clj           text
+*.html          text
+*.js            text
+*.css           text
+*.java          text diff=java&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also, no, it won&apos;t render all the outstanding patches incompatible.  For one, it seems like the files that have the eols mixed or in CRLF aren&apos;t touched much.  I also went through the majority of outstanding patches and couldn&apos;t fix one that conflicts.  Secondly, &lt;tt&gt;format-patch&lt;/tt&gt; emits the patch inline and is intended to be sent via email.  SMTP says that all lines must end with CRLF, so line endings are effectively lost.  So git will convert it to the right line ending on application.&lt;/p&gt;

&lt;p&gt;It can conflict with any outstanding &lt;b&gt;branches&lt;/b&gt; that you may have.  Supplying the renormalization option on merge can help:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;git merge -X renormalize &amp;lt;branch-name&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or, you can enable this by default for your repository:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;git config --local merge.renormalize &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you think it&apos;s too much trouble, let&apos;s just drop it though.&lt;/p&gt;</comment>
                    <comment id="29104" author="stu" created="Fri, 10 Aug 2012 13:15:58 -0500"  >&lt;p&gt;Patch does not apply on my working copy of Clojure. I am using&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;git am -s ...
/Users/stu/repos/clojure/.git/rebase-apply/patch:344: trailing whitespace.
  p {  	
/Users/stu/repos/clojure/.git/rebase-apply/patch:350: space before tab in indent.
  	margin-left: 0.5in;
error: patch failed: epl-v10.html:1
error: epl-v10.html: patch does not apply
error: patch failed: src/jvm/clojure/asm/AnnotationVisitor.java:1
error: src/jvm/clojure/asm/AnnotationVisitor.java: patch does not apply
error: patch failed: src/jvm/clojure/asm/AnnotationWriter.java:1
error: src/jvm/clojure/asm/AnnotationWriter.java: patch does not apply
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I am willing to do this, just inept. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="29105" author="jafingerhut" created="Fri, 10 Aug 2012 13:21:40 -0500"  >&lt;p&gt;Stuart, I updated this page &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt; a while back when I had trouble applying some patches involving files with carriage return line endings.  I did some Googling on git docs and found the option &apos;--keep-cr&apos; that seems to help in such cases.  Try that out.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11384" name="0001-Introduce-end-of-line-normalization.patch" size="1078968" author="jszakmeister" created="Tue, 17 Jul 2012 14:26:39 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1025] Enable support for \x.. escaped characters.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1025</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;see: &lt;a href=&quot;https://groups.google.com/d/topic/clojure/Kl3WVtEE3FY/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/Kl3WVtEE3FY/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;\x.. characters (which are the same as \u00.. characters) are produced by some systems. in particular clojurescript &lt;/p&gt;

&lt;p&gt;Inability to read these characters hinders data interchange&lt;/p&gt;

&lt;p&gt;After a quick look, I believe this capability can be easily introduced by adding a case to this &lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L445&quot;&gt;https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L445&lt;/a&gt; function.&lt;br/&gt;
Mirroring &apos;u&apos; case and reading only 2 chars.&lt;/p&gt;
</description>
                <environment>All</environment>
            <key id="15577">CLJ-1025</key>
            <summary>Enable support for \x.. escaped characters.</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="davesann">Dave Sann</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Jul 2012 22:35:59 -0500</created>
                <updated>Fri, 19 Oct 2012 19:59:47 -0500</updated>
                    <resolved>Fri, 19 Oct 2012 13:55:36 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="28992" author="jafingerhut" created="Thu, 19 Jul 2012 11:46:15 -0500"  >&lt;p&gt;Thanks for the patch, Dave.  It is Rich Hickey&apos;s policy only to include code in Clojure written by those who have signed a Contributor Agreement (CA).  See here for more details: &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;  Have you signed one, or were considering it?&lt;/p&gt;</comment>
                    <comment id="28995" author="jafingerhut" created="Thu, 19 Jul 2012 15:57:22 -0500"  >&lt;p&gt;Can someone find some documentation or spec somewhere that defines this \x.. format?&lt;/p&gt;

&lt;p&gt;It is definitely different than the \x{...} syntax that exists in Perl, which permits one to insert an arbitrary Unicode character code point into a string (note: even supplementary ones that don&apos;t fit into a single UTF-16 code unit, as Java&apos;s and Clojure&apos;s \u.... is restricted to).  &lt;a href=&quot;http://perldoc.perl.org/perlunicode.html#Effects-of-Character-Semantics&quot;&gt;http://perldoc.perl.org/perlunicode.html#Effects-of-Character-Semantics&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29021" author="davesann" created="Sun, 22 Jul 2012 02:19:14 -0500"  >&lt;p&gt;&lt;a href=&quot;http://es5.github.com/x7.html#x7.8.4&quot;&gt;http://es5.github.com/x7.html#x7.8.4&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29061" author="davesann" created="Tue, 31 Jul 2012 04:35:44 -0500"  >&lt;p&gt;I am happy to sign the CA in principle. Just need to read and understand any implications for me.&lt;/p&gt;</comment>
                    <comment id="29271" author="davesann" created="Mon, 27 Aug 2012 03:31:21 -0500"  >&lt;p&gt;CA will be with you shortly.&lt;/p&gt;</comment>
                    <comment id="29663" author="davesann" created="Tue, 16 Oct 2012 03:11:01 -0500"  >&lt;p&gt;Can this go into 1.5?&lt;/p&gt;
</comment>
                    <comment id="29687" author="cemerick" created="Fri, 19 Oct 2012 08:10:20 -0500"  >&lt;p&gt;I&apos;m hitting this now as well.  But, adding support for JavaScript&apos;s flavour of &lt;tt&gt;\x..&lt;/tt&gt; escapes to the Clojure reader makes no sense to me.  If escapes are to be used, then the &lt;tt&gt;\u....&lt;/tt&gt; format seems preferable (it supersets &lt;tt&gt;\x..&lt;/tt&gt;).&lt;/p&gt;

&lt;p&gt;However, all of the readers in play (Clojure reader, ClojureScript reader, edn) all play nice with Unicode, so there&apos;s no reason to be escaping anything except for &lt;tt&gt;\t&lt;/tt&gt;, &lt;tt&gt;\n&lt;/tt&gt;, and so on.&lt;/p&gt;

&lt;p&gt;It looks like tweaking cljs&apos; string implementations of &lt;tt&gt;IPrintWithWriter&lt;/tt&gt; and &lt;tt&gt;IPrintable&lt;/tt&gt; so that only those characters are escaped would be fairly easy.  Right now, they&apos;re using &lt;tt&gt;goog.string.escape&lt;/tt&gt;, which &quot;encloses a string in double quotes and escapes characters so that the string is a valid JS string&quot;; whatever escaping is appropriate for a &quot;valid JavaScript string&quot; seems irrelevant to what e.g. &lt;tt&gt;pr-str&lt;/tt&gt; should produce.&lt;/p&gt;

&lt;p&gt;I propose closing this ticket and moving the party to CLJS.&lt;/p&gt;</comment>
                    <comment id="29694" author="stu" created="Fri, 19 Oct 2012 13:55:30 -0500"  >&lt;p&gt;Following Chas&apos;s lead and closing this one. \x doesn&apos;t appear in the JSON spec, and a quick search of StackOverflow shows people stumbling over it from a bunch of other language platforms. I think we should root it out of ClojureScript.&lt;/p&gt;</comment>
                    <comment id="29695" author="cemerick" created="Fri, 19 Oct 2012 13:58:22 -0500"  >&lt;p&gt;Great, I&apos;ll open a CLJS ticket with a patch tonight or tomorrow.&lt;/p&gt;</comment>
                    <comment id="29697" author="ivan" created="Fri, 19 Oct 2012 14:39:17 -0500"  >&lt;p&gt;Re: &quot;no reason to be escaping anything except for \t, \n&quot;: sometimes it is difficult or impossible to transmit all of Unicode (e.g. sending non-Character codepoints through XDomainRequest, or sending U+0000/U+FFFE/U+FFFF through many XHR implementations), so it might be nice to have an ASCII-only printing mode.  Probably for another ticket, though.&lt;/p&gt;</comment>
                    <comment id="29719" author="cemerick" created="Fri, 19 Oct 2012 19:59:47 -0500"  >&lt;p&gt;Here&apos;s the new ticket: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-400&quot;&gt;http://dev.clojure.org/jira/browse/CLJS-400&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;@Ivan: I agree that options in this area would be good.  There are a lot of edge cases where the defaults aren&apos;t right (e.g. I think escaping all nonprintables is a no-brainer for readably-printed strings).&lt;/p&gt;

&lt;p&gt;I suspect planning out such details should probably happen &lt;span class=&quot;error&quot;&gt;&amp;#91;here&amp;#93;&lt;/span&gt;(&lt;a href=&quot;http://dev.clojure.org/pages/viewpage.action?pageId=4063586&quot;&gt;http://dev.clojure.org/pages/viewpage.action?pageId=4063586&lt;/a&gt;) or &lt;span class=&quot;error&quot;&gt;&amp;#91;here&amp;#93;&lt;/span&gt;(&lt;a href=&quot;https://github.com/edn-format/edn/issues&quot;&gt;https://github.com/edn-format/edn/issues&lt;/a&gt;).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11382" name="0001-adding-support-for-x-escape-characters.patch" size="3012" author="davesann" created="Fri, 13 Jul 2012 23:53:35 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1024] Varargs protococol impls can be defined but not called</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1024</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The compiler accepts this:&lt;/p&gt;

&lt;p&gt;(deftype foo []&lt;br/&gt;
  clojure.lang.IFn&lt;br/&gt;
  (invoke &lt;span class=&quot;error&quot;&gt;&amp;#91;this &amp;amp; xs&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;However calling ((foo.) :bar) will throw an AbstractMethodError. Wouldn&apos;t some checking be desirable?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15574">CLJ-1024</key>
            <summary>Varargs protococol impls can be defined but not called</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="vemv">V&#237;ctor M. Valenzuela</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 10 Jul 2012 10:09:45 -0500</created>
                <updated>Thu, 14 Feb 2013 10:03:07 -0600</updated>
                    <resolved>Wed, 13 Feb 2013 21:22:42 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28971" author="tsdh" created="Wed, 11 Jul 2012 01:20:22 -0500"  >&lt;p&gt;First of all, clojure.lang.IFn is no protocol but an interface.  And it does not declare a&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;  public Object invoke(Object... obs)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;method.  It has an `invoke` method with 20 Object parameters followed by an Object... parameter, but to give an implementation for that, you have to specify every parameter separately, and the last Object... arg is just a normal argument that must be an Object[].  That&apos;s because Java-varags Type... parameters are just Java syntax sugar, but in the byte-code its simply a Type-array.&lt;/p&gt;

&lt;p&gt;What your example does is provide an `invoke` implementation for the 2-args version, where the first parameter happens to be named `&amp;amp;`, which has no special meaning here.  Take that example:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(deftype MyFoo []
  clojure.lang.IFn
  (invoke [this &amp;amp; xs]
    [&amp;amp; xs]))

((MyFoo.) 1 2)
=&amp;gt; [1 2]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But you are right in that `deftype`, `defrecord`, `defprotocol`, and `definferface` probably should error if user&apos;s seem to try to use varargs or destructuring.&lt;/p&gt;</comment>
                    <comment id="28972" author="vemv" created="Wed, 11 Jul 2012 01:55:22 -0500"  >&lt;p&gt;Cheers for a most clarifying response.&lt;/p&gt;

&lt;p&gt;The fact that the meaning of &amp;amp; gets &apos;subverted&apos; makes the issue only (slightly) worse, in my opinion.&lt;/p&gt;

&lt;p&gt;Just for the record, destructuring seems to work, at least for interface impls.&lt;/p&gt;</comment>
                    <comment id="28973" author="tsdh" created="Wed, 11 Jul 2012 02:42:33 -0500"  >&lt;p&gt;&amp;gt; The fact that the meaning of &amp;amp; gets &apos;subverted&apos; makes the issue only (slightly) worse, in my opinion.&lt;/p&gt;

&lt;p&gt;I agree.  I&apos;ll attach a patch which checks for those invalid usages soon.&lt;/p&gt;

&lt;p&gt;&amp;gt; Just for the record, destructuring seems to work, at least for interface impls.&lt;/p&gt;

&lt;p&gt;Could you please provide a complete example demonstrating your statement?&lt;/p&gt;

&lt;p&gt;I&apos;m rather sure that varargs and destructuring don&apos;t work for any of defprotocol, definterface, deftype, defrecord, and reify.  But you can use varargs and destructuring when providing dynamic implementations via `extend` (or `extend-protocol`, `extend-type`), because those impls are real functions in contrast to methods.&lt;/p&gt;</comment>
                    <comment id="28974" author="tsdh" created="Wed, 11 Jul 2012 02:43:31 -0500"  >&lt;p&gt;I attached a patch.  Here&apos;s the commit message:&lt;/p&gt;

&lt;p&gt;Check for invalid varags/destrucuring uses.&lt;/p&gt;

&lt;p&gt;Protocol, interface method declarations and implementations don&apos;t allow for&lt;br/&gt;
varags and destructuring support.  Currently, for example&lt;/p&gt;

&lt;p&gt;  (defprotocol FooBar&lt;br/&gt;
    (foo &lt;span class=&quot;error&quot;&gt;&amp;#91;this &amp;amp; more&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;compiles just fine, and &amp;amp; is interpreted as a usual argument that happens to be&lt;br/&gt;
named &amp;amp; without special meaning.  But clearly, the user wanted to specify a&lt;br/&gt;
varags parameter here.  The same applies to definterface.&lt;/p&gt;

&lt;p&gt;Similarly, providing method implementations via defrecord, deftype, and reify&lt;br/&gt;
don&apos;t allow for destructuring and varags (but dynamic extenions via extend do).&lt;/p&gt;

&lt;p&gt;So this patch makes defprotocol, definterface, defrecord, deftype, and reify&lt;br/&gt;
throw an IllegalArgumentException if any argument vector contains a&lt;br/&gt;
destructuring form or varargs argument.&lt;/p&gt;</comment>
                    <comment id="28975" author="vemv" created="Thu, 12 Jul 2012 03:13:58 -0500"  >&lt;p&gt;Glad you&apos;ve considered my request.&lt;/p&gt;

&lt;p&gt;As for destructuring, I was speaking after this example, which may or may not work like it looks like - I don&apos;t know.&lt;/p&gt;

&lt;p&gt;(deftype foo []&lt;br/&gt;
  clojure.lang.IFn&lt;br/&gt;
  (invoke [this &lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt; c] (println a b c)))&lt;/p&gt;

&lt;p&gt;((foo.) &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2&amp;#93;&lt;/span&gt; 3)&lt;/p&gt;</comment>
                    <comment id="28978" author="tsdh" created="Thu, 12 Jul 2012 08:22:47 -0500"  >&lt;p&gt;Indeed, descructuring seems to work for method implementations.  I&apos;ll adapt my patch...&lt;/p&gt;</comment>
                    <comment id="28979" author="tsdh" created="Thu, 12 Jul 2012 08:42:32 -0500"  >&lt;p&gt;Revamped patch.  Here&apos;s the commit message:&lt;/p&gt;

&lt;p&gt;Protocol, interface method declarations don&apos;t allow for varags and&lt;br/&gt;
destructuring support.  Currently, for example&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;  (defprotocol FooBar
    (foo [this &amp;amp; more]))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;compiles just fine, and &amp;amp; is interpreted as a usual argument that happens to be&lt;br/&gt;
named &amp;amp; without special meaning.  But clearly, the user wanted to specify a&lt;br/&gt;
varags parameter here.  The same applies to definterface.&lt;/p&gt;

&lt;p&gt;Similarly, providing method implementations via defrecord, deftype, and reify&lt;br/&gt;
don&apos;t allow for varags (but dynamic extenions via extend do).&lt;/p&gt;

&lt;p&gt;So this patch makes defprotocol and definterface throw an&lt;br/&gt;
IllegalArgumentException if a user tries to use varargs and destructuring in&lt;br/&gt;
method signatures.&lt;/p&gt;

&lt;p&gt;Similarly, defrecord, deftype, and reify throw an IllegalArgumentException if&lt;br/&gt;
any method implementation arglist contains a varargs argument.&lt;/p&gt;</comment>
                    <comment id="28983" author="jafingerhut" created="Thu, 12 Jul 2012 15:43:58 -0500"  >&lt;p&gt;Tassilo, with your patch 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1024&quot; title=&quot;Varargs protococol impls can be defined but not called&quot;&gt;&lt;del&gt;CLJ-1024&lt;/del&gt;&lt;/a&gt;-Check-for-invalid-varags-destrucuring-uses.patch dated July 12, 2012, I get the following error message while testing, apparently because some metadata is missing on the new functions your patch adds to core:&lt;/p&gt;

&lt;p&gt;     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Testing clojure.test-clojure.metadata&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; &lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; FAIL in (public-vars-with-docstrings-have-added) (metadata.clj:45)&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; expected: (= [] (remove (comp :added meta) public-vars-with-docstrin&lt;br/&gt;
gs-not-generated))&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   actual: (not (= [] (#&apos;clojure.core/throw-on-varargs-and-destr #&apos;cl&lt;br/&gt;
ojure.core/throw-on-varargs)))&lt;/p&gt;</comment>
                    <comment id="28984" author="tsdh" created="Fri, 13 Jul 2012 02:10:35 -0500"  >&lt;p&gt;Hi Andy, this updated patch declares the two new checking fns private which makes the tests pass again.&lt;/p&gt;

&lt;p&gt;Stupid mistake by me:  Of course, I&apos;ve tested the last version, too, but afterwards I decided it wouldn&apos;t be bad to add some docstrings, and of course, adding docstrings cannot break anything. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/wink.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="29145" author="aaron" created="Tue, 14 Aug 2012 19:58:32 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter confirmed as a CA signer. &lt;/p&gt;</comment>
                    <comment id="29146" author="aaron" created="Tue, 14 Aug 2012 20:02:17 -0500"  >&lt;p&gt;This looks ok to me, but it seems like a fair amount of duplication to accomplish the task. It seems like we should just be able to ask if it is ok to proceed, instead of having to pick which function needs to be called in what case.&lt;/p&gt;</comment>
                    <comment id="29160" author="tsdh" created="Wed, 15 Aug 2012 01:23:49 -0500"  >&lt;p&gt;Aaron, can you please elaborate?  I don&apos;t get what you mean with duplication and asking if it is ok to proceed.&lt;/p&gt;</comment>
                    <comment id="29311" author="tsdh" created="Fri, 31 Aug 2012 01:40:51 -0500"  >&lt;p&gt;Rebased to apply cleanly on master again.&lt;/p&gt;</comment>
                    <comment id="29313" author="vemv" created="Fri, 31 Aug 2012 07:11:55 -0500"  >&lt;p&gt;Pardon the silly contribution, but the added methods&apos; usage of double-negations (when-not ...) seems unnecessary.&lt;/p&gt;</comment>
                    <comment id="29314" author="tsdh" created="Fri, 31 Aug 2012 08:03:25 -0500"  >&lt;p&gt;Hi Victor, this revamped patch removes the double-negation and is more concise and clearer as a result.  So your comment wasn&apos;t as silly as you thought. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="30594" author="tsdh" created="Thu, 14 Feb 2013 01:36:12 -0600"  >&lt;p&gt;Hey Stu, do you mind to explain why you&apos;ve declined the patch?&lt;/p&gt;</comment>
                    <comment id="30595" author="mnicky" created="Thu, 14 Feb 2013 08:52:03 -0600"  >&lt;p&gt;@Tassilo: &lt;a href=&quot;https://groups.google.com/forum/#!topic/clojure-dev/qjkW-cv8nog&quot;&gt;https://groups.google.com/forum/#!topic/clojure-dev/qjkW-cv8nog&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30597" author="tsdh" created="Thu, 14 Feb 2013 10:03:07 -0600"  >&lt;p&gt;@Marek, Stu: Thanks, I&apos;ve left a reply there: &lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/qjkW-cv8nog/rMNFqbjNj-EJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/qjkW-cv8nog/rMNFqbjNj-EJ&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11463" name="0001-CLJ-1024-Check-for-invalid-varags-destrucuring-uses.patch" size="3640" author="tsdh" created="Fri, 31 Aug 2012 08:03:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1023] non-tail-position try block breaks mutable fields in deftype</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1023</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;:unsynchronized-mutable&lt;/tt&gt; fields of a &lt;tt&gt;deftype&lt;/tt&gt; cannot be &lt;tt&gt;set!&lt;/tt&gt; inside a &lt;tt&gt;try&lt;/tt&gt; block that is not in tail position of the method.&lt;/p&gt;

&lt;p&gt;See file *&lt;b&gt;demonstration.clj&lt;/b&gt;* for an complete code example.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15573">CLJ-1023</key>
            <summary>non-tail-position try block breaks mutable fields in deftype</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Sun, 8 Jul 2012 16:20:25 -0500</created>
                <updated>Mon, 3 Dec 2012 10:55:08 -0600</updated>
                    <resolved>Mon, 3 Dec 2012 10:55:08 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29376" author="richhickey" created="Wed, 5 Sep 2012 07:07:09 -0500"  >&lt;p&gt;I looked at this. The problem is that non-tail try blocks turn into closures, and thus the field gets propagated as a constant. IOW this can&apos;t work:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftype Foo4 [^:unsynchronized-mutable x]
  MutableX
  (set-x [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; v]
    ((fn [] (set! x v)))
    v))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;I&apos;m not going to re-evaluate the try/closure approach right now, so I recommend you make a helper method that just does the assignment and then call that in the bigger context, as a workaround.&lt;/p&gt;</comment>
                    <comment id="30160" author="halgari" created="Mon, 3 Dec 2012 10:55:08 -0600"  >&lt;p&gt;Closing this as it requires more than a simple bug fix. If you feel that Rich&apos;s work-around is unsatisfactory please create a clojure-dev discussion about rewriting try-catch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11370" name="demonstration.clj" size="928" author="stuart.sierra" created="Sun, 8 Jul 2012 16:20:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1022] gen-class destroys method annotations</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1022</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When extending a class gen-class doesn&apos;t preserve method annotations.&lt;/p&gt;

&lt;p&gt;If class com.bar.Foo has annotated methods  then in MyClass all annotations are gone.&lt;/p&gt;


&lt;p&gt;(gen-class&lt;br/&gt;
   :name com.my.MyClass&lt;br/&gt;
   :extends com.bar.Foo&lt;br/&gt;
   :implements &lt;span class=&quot;error&quot;&gt;&amp;#91;com.google.common.base.Supplier&amp;#93;&lt;/span&gt;&lt;br/&gt;
   :prefix demo-&lt;br/&gt;
   :post-init post-init)&lt;/p&gt;

&lt;p&gt;(defn demo-post-init &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (info &quot;initialized&quot;)&lt;br/&gt;
  (swank.swank/start-server :port 68478))&lt;/p&gt;

&lt;p&gt;(defn demo-get &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (get-msg))&lt;/p&gt;



&lt;p&gt;            Class&amp;lt;?&amp;gt; aClass = Class.forName(&quot;com.my.MyClass&quot;);&lt;br/&gt;
            Method[] methods = aClass.getMethods();&lt;/p&gt;

&lt;p&gt;            for (Method m : methods) {&lt;br/&gt;
                Annotation[] annotations = m.getAnnotations();&lt;br/&gt;
                System.out.println(m.getName()+&quot; &quot;+annotations.length);&lt;br/&gt;
                for (Annotation a : annotations) {
                    System.out.println(a.annotationType().getClass().getName());
                }&lt;br/&gt;
            }&lt;/p&gt;</description>
                <environment></environment>
            <key id="15566">CLJ-1022</key>
            <summary>gen-class destroys method annotations</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="maris">Maris Orbidans</reporter>
                        <labels>
                        <label>bug</label>
                    </labels>
                <created>Tue, 3 Jul 2012 06:19:26 -0500</created>
                <updated>Tue, 3 Jul 2012 06:19:26 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1021] (let [i 5] (defmacro m [v] v) m) interprets m as a function, not a macro</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1021</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;i 5&amp;#93;&lt;/span&gt; (defmacro m &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt; args) (def x (m (inc 5) (inc 6) (inc 7))) &lt;a href=&quot;#&amp;#39;m)&quot;&gt;x m (meta #&apos;m)&lt;/a&gt;)&lt;br/&gt;
is&lt;br/&gt;
[(8) #&amp;lt;user$eval522$m_&lt;em&gt;523 user$eval522$m&lt;/em&gt;_523@11a74355&amp;gt; {:macro true, :ns #&amp;lt;Namespace user&amp;gt;, :name m, :arglists (&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt;), :line 1, :file &quot;NO_SOURCE_PATH&quot;}]&lt;/p&gt;

&lt;p&gt;It appears to be interpreting m as a function despite the metadata. This behavior only shows up inside the (let ...).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15565">CLJ-1021</key>
            <summary>(let [i 5] (defmacro m [v] v) m) interprets m as a function, not a macro</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="zii-prime">Zii Prime</reporter>
                        <labels>
                        <label>bug</label>
                    </labels>
                <created>Mon, 2 Jul 2012 23:32:22 -0500</created>
                <updated>Thu, 13 Sep 2012 14:29:20 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29222" author="bronsa" created="Sat, 18 Aug 2012 11:43:42 -0500"  >&lt;p&gt;The problem is the same as the one for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-918&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-918&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The patch linked there was mine but i had no CA signed at that time, and no account on jira.&lt;/p&gt;

&lt;p&gt;Here is the same patch in the correct format.&lt;/p&gt;

&lt;p&gt;Bug #918 should be closed as this is a duplicate&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11443" name="001-propagate-on-macro-meta.diff" size="1018" author="bronsa" created="Sat, 18 Aug 2012 11:43:42 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1020] clojure.inspector/inspect-table gives up when first element of coll is nil</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1020</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.inspector/inspect-table gives up when first element of coll is nil. The patch provided is rather trivial...instead of blindly choosing the first element (which might be nil), it would be more convenient to choose the first element that is NOT nil and use its keys for columns...a similar issue exists with clojure.pprint/print-table where the keys of the first element are used (if not provided explicitly). The same is not true for &apos;inspect-table&apos; though. As a result, one cannot &apos;inspect&apos; a collection of maps where the first element is nil. My (trivial) patch looks for the first element which is NOT nil and uses its keys instead. Maps have to have the same length anyway so no problems there...&lt;/p&gt;</description>
                <environment>Ubuntu 12.04, Java 7, Clojure 1.4</environment>
            <key id="15563">CLJ-1020</key>
            <summary>clojure.inspector/inspect-table gives up when first element of coll is nil</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jimpil">Dimitrios Piliouras</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Mon, 2 Jul 2012 05:26:42 -0500</created>
                <updated>Thu, 13 Sep 2012 14:30:24 -0500</updated>
                                    <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28981" author="jafingerhut" created="Thu, 12 Jul 2012 13:01:18 -0500"  >&lt;p&gt;clj-1020-inspect-table-skip-nil-rows-patch1.txt of July 12, 2012 is identical to inspector.patch of July 2, 2012, except it is in the desired git format.  Proper attribution is given to author Dimitrios Piliouras in the patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11379" name="clj-1020-inspect-table-skip-nil-rows-patch1.txt" size="722" author="jafingerhut" created="Thu, 12 Jul 2012 13:01:18 -0500" />
                    <attachment id="11359" name="inspector.patch" size="329" author="jimpil" created="Mon, 2 Jul 2012 05:26:42 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1019] ns-resolve doc has a typo</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1019</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc string for ns-resolve has a typo: environement should be environment.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15560">CLJ-1019</key>
            <summary>ns-resolve doc has a typo</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cldwalker">Gabriel Horner</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Sat, 30 Jun 2012 09:10:00 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:52 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:52 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28980" author="jafingerhut" created="Thu, 12 Jul 2012 12:54:11 -0500"  >&lt;p&gt;clj-1019-ns-resolve-doc-string-misspelling-patch1.txt dated July 12, 2012 is identical to fix_ns-resolve.patch of June 30, 2012, except it is in git format.  It includes Gabriel&apos;s name and email address for proper attribution.&lt;/p&gt;</comment>
                    <comment id="29147" author="aaron" created="Tue, 14 Aug 2012 20:07:17 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11378" name="clj-1019-ns-resolve-doc-string-misspelling-patch1.txt" size="860" author="jafingerhut" created="Thu, 12 Jul 2012 12:54:11 -0500" />
                    <attachment id="11355" name="fix_ns-resolve.patch" size="540" author="cldwalker" created="Sat, 30 Jun 2012 09:10:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1018] range&apos;s behavior is inconsistent</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1018</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Problem statement: The current behavior of range is inconsistent. (range 0 9 0) has always produced (). (range 0 9 -1) has always produced (). (range 9 0 1) has always produced (). However, (range 9 0 0) produces (9 9 9 9 ...), and (range 0 0 0) produces &apos;(0 0 0 0 ...)&lt;/p&gt;

&lt;p&gt;Proposal: Make the behavior of range consistent when using a step of 0 to make it produce an empty list.&lt;/p&gt;

&lt;p&gt;Please see attached code and patch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15557">CLJ-1018</key>
            <summary>range&apos;s behavior is inconsistent</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="devn">Devin Walters</reporter>
                        <labels>
                        <label>patch</label>
                        <label>range</label>
                    </labels>
                <created>Fri, 29 Jun 2012 16:25:03 -0500</created>
                <updated>Fri, 12 Apr 2013 09:59:12 -0500</updated>
                                    <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28925" author="mikera" created="Sun, 1 Jul 2012 04:08:00 -0500"  >&lt;p&gt;Agree it is good to fix the inconsistency, but I think an infinite sequence of zeros is the correct result, as implied by the current docstring definition.&lt;/p&gt;

&lt;p&gt;It&apos;s also mathematically cleanest: range should produce an arithmetic progression until the end value is equalled or exceeded.&lt;/p&gt;

&lt;p&gt;Empty lists only seem to make sense as a return value when start &amp;gt;= end.&lt;/p&gt;</comment>
                    <comment id="28928" author="devn" created="Sun, 1 Jul 2012 12:36:08 -0500"  >&lt;p&gt;Hi Mike,&lt;/p&gt;

&lt;p&gt;Could you explain how you think the docstring definition implies this behavior? Maybe I&apos;m missing something, but I was surprised. For instance, in the case of (range 3 9 0), if start were truly inclusive as the docstring says, the result would be (3), not ().&lt;/p&gt;

&lt;p&gt;You mentioned that you think the infinite sequence of 0&apos;s is consistent and in keeping with the definition of range. I&apos;m not sure I agree. (0,0] is an empty set of length zero, and [0,0) is an empty set of length zero.&lt;/p&gt;

&lt;p&gt;You state that empty list only makes sense for start &amp;gt;= end, except this is not the current behavior. Could you help me understand what you believe the appropriate behavior would be in each of the following three cases? (range 0 10 0), (range 10 0 0), and (range 0 0 0)?&lt;/p&gt;

&lt;p&gt;A few options to consider:&lt;br/&gt;
1) Fix the docstring to reflect the actual behavior of range.&lt;br/&gt;
2) Handle the case of (range 9 3 0) =&amp;gt; (9 9 9 ...) to make it consistent with the behavior of (range 3 9 0) =&amp;gt; ()&lt;br/&gt;
3) Stop allowing a step of zero altogether.&lt;/p&gt;

&lt;p&gt;Editing to Add (Note: I don&apos;t think the way someone else did something is always the right way, just wanted to do some digging on how other people have handled this in the past):&lt;br/&gt;
&lt;a href=&quot;http://docs.python.org/library/functions.html#range&quot;&gt;http://docs.python.org/library/functions.html#range&lt;/a&gt; (0 step returns ValueError)&lt;br/&gt;
&lt;a href=&quot;http://www2.tcl.tk/10797&quot;&gt;http://www2.tcl.tk/10797&lt;/a&gt; (range returns empty list for a zero step)&lt;br/&gt;
&lt;a href=&quot;http://www.scala-lang.org/api/2.7.7/scala/Range.html&quot;&gt;http://www.scala-lang.org/api/2.7.7/scala/Range.html&lt;/a&gt; (zero step is not allowed)&lt;/p&gt;</comment>
                    <comment id="28956" author="jimpil" created="Thu, 5 Jul 2012 16:13:22 -0500"  >&lt;p&gt;It does make sense NOT to allow a step of zero (at least to me)... I wasn&apos;t going to say anything about this but if other popular languages do not allow 0, then I guess it makes more sense than I originally gave myself credit for... However, if we want to be mathematically correct then the answer would be to return an infinte seq with the start value like below. After all, what  is a step of 0? does it  make any difference how many steps you take if with every step you cover 0 distance? obviously not...you start from x and you stay at x forever...we do have repeat for this sort of thing though... &lt;/p&gt;

&lt;p&gt;(take 5 (range 3 9 0)) =&amp;gt; (3 3 3 3 3)&lt;/p&gt;

&lt;p&gt;+1 for not allowing 0 step&lt;/p&gt;</comment>
                    <comment id="28958" author="mikera" created="Sun, 8 Jul 2012 08:49:11 -0500"  >&lt;p&gt;@Devin quite simple: a lazy sequence of nums starting from x with step 0.0 until it reaches an end value of y (where y &amp;gt; x) is an infinite sequence of x.&lt;/p&gt;

&lt;p&gt;Consider the case where start is 0 and end is infinity (the default), you would expect sequences to go as follows:&lt;/p&gt;

&lt;p&gt;step +2 : 0  2  4  6  8....&lt;br/&gt;
step +1 : 0  1  2  3  4....&lt;br/&gt;
step +0 : 0  0  0  0  0....&lt;/p&gt;

&lt;p&gt;It would be inconsistent to make 0 a special case, all of these are valid arithmetic progressions. And all of these are consistent with the current docstring.&lt;/p&gt;

&lt;p&gt;If you make 0 a special case, then people will need to write special case code to handle it. Consider the code to create a multiplication table for example:&lt;/p&gt;

&lt;p&gt;(for &lt;span class=&quot;error&quot;&gt;&amp;#91;x (range 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
     (take 10 (range 0 Long/MAX_VALUE x)))&lt;/p&gt;

&lt;p&gt;This works fine if you produce an infinite sequence of zeros for step 0, but fails if you create an empty list as a special case for step 0.&lt;/p&gt;

&lt;p&gt;As a related issue, I&apos;d personally also favour negative step sizes also producing an infinite sequence. If we don&apos;t want to allow this though, then at least the docstring should be changed to say &quot;a lazy seq of non-decreasing nums&quot; and a negative step should throw an error.&lt;/p&gt;</comment>
                    <comment id="28959" author="devn" created="Mon, 9 Jul 2012 19:09:16 -0500"  >&lt;p&gt;Carrying over a message from the clojure-dev list by Stuart Sierra:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;I called the ticket a defect. Does that seem reasonable?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;yes&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Does anyone actually use the 0 step behavior in their programs?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;not if they have any sense&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Has anyone been bitten by this in the past?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;not me&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Is this behavior intentional for some historical reason I don&apos;t know about or understand?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I doubt it.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Has this been brought up before? I couldn&apos;t find any reference to it via Google.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Not that I know of.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Are there performance implications to my patch?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I doubt it. Lazy seqs are not ideal for high-performance code anyway.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Am I addressing a symptom rather than the problem?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I think the &lt;b&gt;problem&lt;/b&gt; is that the result of `range` with a step of 0 was never specified. Don&apos;t assume that the tests are specifications. Many of the tests in Clojure were written by over-eager volunteers who defined the tests based on whatever the behavior happened to be. The only specification from the language designer is the docstring. By my reading, that means that `range` with a step of 0 should return an infinite seq of the start value, unless the start and end values are equal.&lt;/p&gt;

&lt;p&gt;-S&lt;/p&gt;</comment>
                    <comment id="28960" author="devn" created="Mon, 9 Jul 2012 19:10:24 -0500"  >&lt;p&gt;Carrying over a message by Michal Marczyk:&lt;/p&gt;

&lt;p&gt;With a negative step, the comparison is reversed, so that e.g.&lt;/p&gt;

&lt;p&gt;(range 3 0 -1)&lt;/p&gt;

&lt;p&gt;evaluates to&lt;/p&gt;

&lt;p&gt;(3 2 1)&lt;/p&gt;

&lt;p&gt;I think this is the useful behaviour; the docstring should perhaps be&lt;br/&gt;
adjusted to match it.&lt;/p&gt;

&lt;p&gt;Agreed on zero step.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Micha&#322;&lt;/p&gt;</comment>
                    <comment id="29014" author="devn" created="Fri, 20 Jul 2012 17:10:19 -0500"  >&lt;p&gt;Adding a new patch after hearing comments. This patch makes (range 9 3 0) =&amp;gt; (9 9 9 9 ...), (range 3 9 0) =&amp;gt; (3 3 3 3 ...), and () will be returned when (= start end). Also updated the docstring.&lt;/p&gt;</comment>
                    <comment id="30065" author="halgari" created="Tue, 27 Nov 2012 15:01:11 -0600"  >&lt;p&gt;Marking as vetted&lt;/p&gt;</comment>
                    <comment id="30066" author="halgari" created="Tue, 27 Nov 2012 15:04:24 -0600"  >&lt;p&gt;Patch applies cleanly. We&apos;ve discussed this issue to death (for as simple as it is). I think it&apos;s time to mark it as screened. &lt;/p&gt;</comment>
                    <comment id="30067" author="halgari" created="Tue, 27 Nov 2012 15:06:27 -0600"  >&lt;p&gt;For some reason I&apos;m not allowed to edit the attachments list. When you apply the patch, please apply inconsistent_range_fix.diff as that is the most recent version of the fix. &lt;/p&gt;</comment>
                    <comment id="30194" author="richhickey" created="Sun, 9 Dec 2012 06:44:10 -0600"  >&lt;p&gt;As someone who has to read these tickets, I&apos;d really appreciate it if you could keep the description up to date and accurate, with examples of the current and intended behavior and the strategy to be used in fixing. I can&apos;t follow every thread to see what the latest thinking is, especially on a patch like this where the original mission was changed.&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;</comment>
                    <comment id="30207" author="devn" created="Mon, 10 Dec 2012 15:53:31 -0600"  >&lt;p&gt;@Tim: I&apos;ve removed the other attachments.&lt;/p&gt;

&lt;p&gt;@Rich: Understood. I will update the description this evening.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11393" name="inconsistent_range_fix.diff" size="1944" author="devn" created="Fri, 20 Jul 2012 17:10:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1017] Metadata expressions are evaluated after the expression they affect</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1017</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Repro:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (def x (atom 1))&lt;br/&gt;
#&apos;user/x&lt;br/&gt;
user=&amp;gt; ^{:foo (swap! x inc)} {:bar (swap! x inc)}&lt;br/&gt;
{:bar 2}&lt;br/&gt;
user=&amp;gt; (meta *1)&lt;br/&gt;
{:foo 3}&lt;/p&gt;

&lt;p&gt;Presumably this is because ^:foo x expands to (with-meta x {:foo true}) but probably should have reversed argument order or use a let expression.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15551">CLJ-1017</key>
            <summary>Metadata expressions are evaluated after the expression they affect</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bbloom">Brandon Bloom</reporter>
                        <labels>
                    </labels>
                <created>Sat, 23 Jun 2012 17:18:49 -0500</created>
                <updated>Sat, 23 Jun 2012 17:18:49 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1016] Global scope overrides lexical scope for classes (Clojure assumes no classes in default package / Clojure cannot handle yFiles JARs in classpath)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1016</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The most visible symptom of this bug is having a class named &apos;w&apos; (default package) in your classpath (such classes are produced by Java obfuscation tools such as yFiles) and then attempting to load Clojure&apos;s core class. For example:&lt;/p&gt;

&lt;p&gt;  java -cp hotspotapi.jar:clojure-1.4.0-slim.jar clojure.main&lt;/p&gt;

&lt;p&gt;(where hotspotapi.jar is a stereotypical example of an obfuscated JAR) results in:&lt;/p&gt;

&lt;p&gt;Exception in thread &quot;main&quot; java.lang.ExceptionInInitializerError&lt;br/&gt;
	at clojure.main.&amp;lt;clinit&amp;gt;(main.java:20)&lt;br/&gt;
Caused by: java.lang.NoSuchFieldException: close, compiling:(clojure/core.clj:6139)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6462)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$TryExpr$Parser.parse(Compiler.java:2178)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:5919)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:518)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6515)&lt;br/&gt;
	at clojure.lang.Compiler.load(Compiler.java:6952)&lt;br/&gt;
	at clojure.lang.RT.loadResourceScript(RT.java:359)&lt;br/&gt;
	at clojure.lang.RT.loadResourceScript(RT.java:350)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:429)&lt;br/&gt;
	at clojure.lang.RT.load(RT.java:400)&lt;br/&gt;
	at clojure.lang.RT.doInit(RT.java:436)&lt;br/&gt;
	at clojure.lang.RT.&amp;lt;clinit&amp;gt;(RT.java:318)&lt;br/&gt;
	... 1 more&lt;br/&gt;
Caused by: java.lang.NoSuchFieldException: close&lt;br/&gt;
	at java.lang.Class.getField(Class.java:1537)&lt;br/&gt;
	at clojure.lang.Compiler$StaticFieldExpr.&amp;lt;init&amp;gt;(Compiler.java:1180)&lt;br/&gt;
	at clojure.lang.Compiler$HostExpr$Parser.parse(Compiler.java:923)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
	... 37 more&lt;br/&gt;
Could not find the main class: clojure.main. Program will exit.&lt;/p&gt;

&lt;p&gt;To understand what is going on, consider this simple test:&lt;/p&gt;

&lt;p&gt;import java.io.StringReader;&lt;/p&gt;

&lt;p&gt;import clojure.lang.Compiler;&lt;br/&gt;
import clojure.lang.RT;&lt;/p&gt;

&lt;p&gt;public class Test {&lt;br/&gt;
    public static void main(String[] args) {
        RT.var(&quot;clojure.core&quot;, &quot;require&quot;);
        String s = &quot;(let [mumble (new java.io.StringReader \&quot;\&quot;)] (. mumble close))&quot;;
        Compiler.load(new StringReader(s));
    }&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;It should be clear that &apos;mumble&apos; in the dot operator is referencing the locally defined mumble. However, if we define a class named &apos;mumble&apos; in the default package, Clojure picks that one up instead.&lt;/p&gt;

&lt;p&gt;To forestall any objections: yes, we know that placing classes in the default package is extremely poor form. Point of the matter is, the Java ecosystem is extremely diverse and there are a lot of JARs people may not have control over. While one might argue, &quot;Don&apos;t put classes in the default namespace&quot;, point of the matter is, Clojure is wrong here, and these situations arise in practice, through no fault of the implementer.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15547">CLJ-1016</key>
            <summary>Global scope overrides lexical scope for classes (Clojure assumes no classes in default package / Clojure cannot handle yFiles JARs in classpath)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ezyang">Edward Z. Yang</reporter>
                        <labels>
                    </labels>
                <created>Thu, 21 Jun 2012 10:31:20 -0500</created>
                <updated>Mon, 27 Aug 2012 21:24:13 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28886" author="ezyang" created="Thu, 21 Jun 2012 11:01:06 -0500"  >&lt;p&gt;Here is a workaround patch which makes this error less likely to occur.&lt;/p&gt;</comment>
                    <comment id="29274" author="jafingerhut" created="Mon, 27 Aug 2012 19:37:34 -0500"  >&lt;p&gt;Edward, it is Rich Hickey&apos;s policy only to consider for inclusion in Clojure patches written by people who have signed a Contributor Agreement: &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Were you interested in becoming a contributor?&lt;/p&gt;</comment>
                    <comment id="29276" author="ezyang" created="Mon, 27 Aug 2012 21:24:13 -0500"  >&lt;p&gt;Sure, although the patch attached is emphatically not the one you want to actually applying, since it only band-aids the problem.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11340" name="collision-workaround.patch" size="1128" author="ezyang" created="Thu, 21 Jun 2012 11:01:06 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1015] Standalone Clojure library for Java users</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1015</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Many of Clojure&apos;s data structures (e.g. PersistentHashMap) may be of interest to the wider Java community, and would benefit from being packaged in a way that makes them easy to include in projects.  While they are public (and thus can be accessed by way of clojure.lang), Clojure&apos;s classloader is implemented in a way such that Clojure files such as core.clj end up being loaded, even when an end-user is not interested in the Clojure environment itself.  The Java classes could also use some documentation!&lt;/p&gt;

&lt;p&gt;I&apos;d be happy to work on a patch but this change may require some restructuring of the build process, so it&apos;d be good to get community sign-off first.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15536">CLJ-1015</key>
            <summary>Standalone Clojure library for Java users</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ezyang">Edward Z. Yang</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Jun 2012 14:19:00 -0500</created>
                <updated>Thu, 14 Jun 2012 17:39:23 -0500</updated>
                                    <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28808" author="jafingerhut" created="Thu, 14 Jun 2012 17:39:23 -0500"  >&lt;p&gt;I am assuming this ticket is a request that the original Clojure distribution be modified to easily build such a library of data structures, and be maintained as a separate build target, going forward.&lt;/p&gt;

&lt;p&gt;Reference to related info: Below is a copy of most of a message from someone with userid Krukow posted to the Clojure Google group on June 3, 2012: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups#!topic/clojure/UyjmafY_ZE8&quot;&gt;https://groups.google.com/forum/?fromgroups#!topic/clojure/UyjmafY_ZE8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a project containing only the persistent data structures for use with Java et al. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/krukow/clj-ds&quot;&gt;https://github.com/krukow/clj-ds&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is the data structures only so no bootstrap penalty. There are also Java&apos;ish &quot;improvements&quot; like basic Generics and improved performance on the iterator pattern.&lt;/p&gt;

&lt;p&gt;It&apos;s still on Clojure 1.3 (As far as I recall), but I am planning on taking another iteration.&lt;/p&gt;

&lt;p&gt;TODO:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;better Generics support&lt;/li&gt;
	&lt;li&gt;more data structures  (tries, RRB-trees)&lt;/li&gt;
	&lt;li&gt;include the reducers library support for parallelism&lt;/li&gt;
&lt;/ul&gt;
</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1014] Latest Clojure master doesn&apos;t build</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1014</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Compile fails with the following error:&lt;/p&gt;

&lt;p&gt;compile-clojure:&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Compiling clojure.core to /home/ezyang/Dev/clojure/target/classes&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Compiling clojure.core.protocols to /home/ezyang/Dev/clojure/target/classes&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Compiling clojure.core.reducers to /home/ezyang/Dev/clojure/target/classes&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Exception in thread &quot;main&quot; java.lang.ClassNotFoundException: jsr166y.ForkJoinPool, compiling:(clojure/core/reducers.clj:56)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6462)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2478)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:518)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile1(Compiler.java:7030)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile1(Compiler.java:7025)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile1(Compiler.java:7025)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile(Compiler.java:7097)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.compile(RT.java:387)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.load(RT.java:427)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.load(RT.java:400)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$load$fn__4919.invoke(core.clj:5424)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$load.doInvoke(core.clj:5423)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$load_one.invoke(core.clj:5236)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$compile$fn__4924.invoke(core.clj:5435)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$compile.invoke(core.clj:5434)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Var.invoke(Var.java:415)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compile.main(Compile.java:81)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Caused by: java.lang.ClassNotFoundException: jsr166y.ForkJoinPool&lt;br/&gt;
         &lt;span class=&quot;error