<!--
RSS generated by JIRA (4.4#649-r158309) at Sat May 18 05:00:33 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+AND+resolution+%3D+Completed+AND+status+%3D+Closed&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+AND+resolution+%3D+Completed+AND+status+%3D+Closed</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="543" total="543"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-1012] partial function should also accept 1 arg (just f)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1012</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The partial function should accept just a function. This allows it to be properly used with apply.&lt;/p&gt;

&lt;p&gt;E.g. This breaks (but shouldn&apos;t) if args are nil: (apply partial f args)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15529">CLJ-1012</key>
            <summary>partial function should also accept 1 arg (just f)</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="kanaka">Joel Martin</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Jun 2012 14:28:13 -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.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28792" author="hircus" created="Wed, 13 Jun 2012 05:18:28 -0500"  >&lt;p&gt;Attached patch makes partial just returns f if called with only one argument. Not sure if this will have a performance impact or not; a Clojure/core member would probably be able to better judge if the use cases outweigh any performance hit.&lt;/p&gt;</comment>
                    <comment id="29173" author="fogus" created="Wed, 15 Aug 2012 10:45:58 -0500"  >&lt;p&gt;Attached a patch adding a test for this ticket.&lt;/p&gt;</comment>
                    <comment id="29174" author="fogus" created="Wed, 15 Aug 2012 10:47:43 -0500"  >&lt;p&gt;Original patch is trivial, but did not have a test. I added a test as a separate patch file.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11315" name="0001-Extend-partial-function-to-also-handle-one-argument-.patch" size="762" author="hircus" created="Wed, 13 Jun 2012 05:18:28 -0500" />
                    <attachment id="11433" name="CLJ-1012-partial-1-arity-test.diff" size="825" author="fogus" created="Wed, 15 Aug 2012 10:45: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-1011] clojure.data/diff should cope with null and false values in maps</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1011</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Current behaviour of clojure.data/diff:&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; (diff {:a &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;} {:a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;})
(nil {:a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} nil)
=&amp;gt; (diff {:a &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;} {:a nil})
(nil nil nil)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Proposed behaviour:&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; (diff {:a &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;} {:a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;})
({:a &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;} {:a &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} nil)
=&amp;gt; (diff {:a &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;} {:a nil})
({:a &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;} {:a nil} nil)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15527">CLJ-1011</key>
            <summary>clojure.data/diff should cope with null and false values in maps</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="phiipa">Philip Aston</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                    </labels>
                <created>Tue, 12 Jun 2012 05:04:16 -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.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28779" author="phiipa" created="Tue, 12 Jun 2012 05:04:58 -0500"  >&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; 
From e03a8060214d122ea2ebadf9e8a368f7f593d9f4 Mon Sep 17 00:00:00 2001
From: Philip Aston &amp;lt;philipa@mail.com&amp;gt;
Date: Sun, 10 Jun 2012 13:11:36 +0100
Subject: [PATCH] clojure.data/diff: cope with falsey values in maps

---
 src/clj/clojure/data.clj           |   18 +++++++++++++++++-
 test/clojure/test_clojure/data.clj |    3 ++-
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/clj/clojure/data.clj b/src/clj/clojure/data.clj
index 6e8dbcf..345b234 100644
--- a/src/clj/clojure/data.clj
+++ b/src/clj/clojure/data.clj
@@ -30,6 +30,22 @@
      (vec (repeat (apply max (keys m))  nil))
      m)))
 
+(defn- diff-associative-key
+  &quot;Diff associative things a and b, comparing only the key k.&quot;
+  [a b k]
+  (let [va (get a k)
+        vb (get b k)
+        [a* b* ab] (diff va vb)
+        in-a (contains? a k)
+        in-b (contains? b k)
+        same (and in-a in-b
+                  (or (not (nil? ab))
+                      (and (nil? va) (nil? vb))))]
+    [(when (and in-a (or (not (nil? a*)) (not same))) {k a*})
+     (when (and in-b (or (not (nil? b*)) (not same))) {k b*})
+     (when same {k ab})
+     ]))
+
 (defn- diff-associative
   &quot;Diff associative things a and b, comparing only keys in ks.&quot;
   [a b ks]
@@ -38,7 +54,7 @@
      (doall (map merge diff1 diff2)))
    [nil nil nil]
    (map
-    (fn [k] (map #(when % {k %}) (diff (get a k) (get b k))))
+    (partial diff-associative-key a b)
     ks)))
 
 (defn- diff-sequential
diff --git a/test/clojure/test_clojure/data.clj b/test/clojure/test_clojure/data.clj
index 9bab766..5a241e0 100644
--- a/test/clojure/test_clojure/data.clj
+++ b/test/clojure/test_clojure/data.clj
@@ -27,5 +27,6 @@
        [#{1} #{3} #{2}] (HashSet. [1 2]) (HashSet. [2 3])
        [nil nil [1 2]] [1 2] (into-array [1 2])
        [nil nil [1 2]] (into-array [1 2]) [1 2]
-       [{:a {:c [1]}} {:a {:c [0]}} {:a {:c [nil 2] :b 1}}] {:a {:b 1 :c [1 2]}} {:a {:b 1 :c [0 2]}}))
+       [{:a {:c [1]}} {:a {:c [0]}} {:a {:c [nil 2] :b 1}}] {:a {:b 1 :c [1 2]}} {:a {:b 1 :c [0 2]}}
+       [{:a nil} {:a false} {:b nil :c false}] {:a nil :b nil :c false} {:a false :b nil :c false}))
 
-- 
1.7.9.5
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 
</comment>
                    <comment id="28782" author="jafingerhut" created="Tue, 12 Jun 2012 12:43:02 -0500"  >&lt;p&gt;Philip, thanks for writing that patch.  Could you please attach it as a file to this ticket, instead of copying and pasting it into a comment?  Instructions are under the heading &quot;Adding patches&quot; on this page:&lt;/p&gt;

&lt;p&gt;&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;

&lt;p&gt;Rich Hickey&apos;s policy is only to include code in Clojure that is written by those who have signed a contributor agreement.  You can find out more at &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28783" author="phiipa" created="Tue, 12 Jun 2012 14:51:07 -0500"  >&lt;p&gt;Thanks Andy. Patch attached: &lt;/p&gt;

&lt;p&gt;0001-clojure.data-diff-cope-with-falsey-values-in-maps.patch&lt;/p&gt;

&lt;p&gt;I&apos;ll send in a CA.&lt;/p&gt;</comment>
                    <comment id="28828" author="phiipa" created="Sat, 16 Jun 2012 05:27:29 -0500"  >&lt;p&gt;CA snail-mailed yesterday, I guess it will take a week to arrive.&lt;/p&gt;</comment>
                    <comment id="28891" author="phiipa" created="Sat, 23 Jun 2012 05:00:17 -0500"  >&lt;p&gt;I now have a CA in place.&lt;/p&gt;</comment>
                    <comment id="29013" author="stu" created="Fri, 20 Jul 2012 16:51:32 -0500"  >&lt;p&gt;Yeah, this should be fixed.&lt;/p&gt;</comment>
                    <comment id="29158" author="aaron" created="Tue, 14 Aug 2012 21:42:01 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11311" name="0001-clojure.data-diff-cope-with-falsey-values-in-maps.patch" size="2164" author="phiipa" created="Tue, 12 Jun 2012 14:48: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-1009] make print-table org mode compatible</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1009</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="15521">CLJ-1009</key>
            <summary>make print-table org mode compatible</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="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Jun 2012 13:18:30 -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>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28760" author="jafingerhut" created="Fri, 8 Jun 2012 22:39:28 -0500"  >&lt;p&gt;Patch clj-1009-print-table-org-mode-patch2.txt dated June 8, 2012 is the same as Stuart Halloway&apos;s print-table-org-mode.txt of the same date, except a couple of tests have been added.  His code changes look correct to me.&lt;/p&gt;</comment>
                    <comment id="29149" author="aaron" created="Tue, 14 Aug 2012 20:22:44 -0500"  >&lt;p&gt;This is not quite correct. the header separator in org-mode is &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;|--+--+--|&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; not &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;+--+--+&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;</comment>
                    <comment id="29168" author="jafingerhut" created="Wed, 15 Aug 2012 10:29:30 -0500"  >&lt;p&gt;clj-1009-print-table-org-mode-patch3.txt dated Aug 15, 2012 is same as the previous -patch2.txt version of Jun 8, 2012 (now deleted as obsolete), except it corrects the header separator as identified by Aaron Bedra.&lt;/p&gt;</comment>
                    <comment id="29169" author="jafingerhut" created="Wed, 15 Aug 2012 10:31:48 -0500"  >&lt;p&gt;Presumptuously changing approval from Incomplete back to Vetted, as it was before Aaron Bedra described a problem with the patch, and I updated the patch to address his comment.  Feel free to apply the smackdown if necessary. &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="29172" author="aaron" created="Wed, 15 Aug 2012 10:44:50 -0500"  >&lt;p&gt;Looks ok now. Three cheers for org-mode awesomeness!!!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11431" name="clj-1009-print-table-org-mode-patch3.txt" size="3402" author="jafingerhut" created="Wed, 15 Aug 2012 10:29:30 -0500" />
                    <attachment id="11302" name="print-table-org-mode.txt" size="2034" author="stu" created="Fri, 8 Jun 2012 13:18:30 -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-1000] Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1000</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It seems there is a 30-40% performance degradation of PersistentHashMap.valAt(...) in Clojure 1.4.&lt;br/&gt;
Possibly due to references to new CPU-hungry implementation of Util.hasheq(...).&lt;/p&gt;

&lt;p&gt;I have created a demo project with more details and some profiling information here:&lt;br/&gt;
&lt;a href=&quot;https://github.com/oshyshko/clj-perf&quot;&gt;https://github.com/oshyshko/clj-perf&lt;/a&gt;&lt;/p&gt;</description>
                <environment>Java(TM) SE Runtime Environment (build 1.7.0_04-b21)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)</environment>
            <key id="15462">CLJ-1000</key>
            <summary>Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?</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="halgari">Timothy Baldridge</assignee>
                                <reporter username="oshyshko">Oleksandr Shyshko</reporter>
                        <labels>
                        <label>performance</label>
                    </labels>
                <created>Mon, 21 May 2012 22:06:54 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Tue, 11 Dec 2012 11:14:49 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30047" author="cgrand" created="Tue, 27 Nov 2012 08:30:26 -0600"  >&lt;p&gt;I added a patch consisting of three commits:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;one which adds caching to seqs, sets, maps, vectors and queues&lt;/li&gt;
	&lt;li&gt;one that aligns the shape of Util/hasheq on the one Util/equiv (to have a consistent behavior from the JIT compiler: without that deoptimization was more penalizing for hasheq than for equiv)&lt;/li&gt;
	&lt;li&gt;one that fix hasheq on records (which was non consistent with its equiv impl.) &amp;#8211; and this commit relies on a static method introduced in the &quot;caching hasheq&quot; commit&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="30112" author="halgari" created="Fri, 30 Nov 2012 12:10:26 -0600"  >&lt;p&gt;In the process of screening this, I&apos;m not seeing much of a performance difference after applying the patch. &lt;/p&gt;

&lt;p&gt;before patch:&lt;br/&gt;
user=&amp;gt; (-main)&lt;/p&gt;

&lt;p&gt;Version:  1.5.0-master-SNAPSHOT&lt;br/&gt;
&quot;Elapsed time: 6373.752 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6578.037 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6476.399 msecs&quot;&lt;/p&gt;


&lt;p&gt;after patch:&lt;br/&gt;
user=&amp;gt; (-main)&lt;/p&gt;

&lt;p&gt;Version:  1.5.0-master-SNAPSHOT&lt;br/&gt;
&quot;Elapsed time: 6182.699 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6548.086 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6496.711 msecs&quot;&lt;/p&gt;


&lt;p&gt;clojure 1.4:&lt;br/&gt;
user=&amp;gt; (-main)&lt;/p&gt;

&lt;p&gt;Version:  1.4.0&lt;br/&gt;
&quot;Elapsed time: 6484.234 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6243.672 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6248.898 msecs&quot;&lt;/p&gt;

&lt;p&gt;clojure 1.3&lt;br/&gt;
user=&amp;gt; (-main)&lt;/p&gt;

&lt;p&gt;Version:  1.3.0&lt;br/&gt;
&quot;Elapsed time: 3584.966 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3618.189 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3372.979 msecs&quot;&lt;/p&gt;


&lt;p&gt;I blew away my local clojure repo and re-applied the patch just to make sure, but the results are the same. Does this fix not optimize the case given in the original test project? &lt;/p&gt;

&lt;p&gt;For reference I&apos;m running this code:&lt;/p&gt;

&lt;p&gt;(defn -main&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;  (println)&lt;br/&gt;
  (println &quot;Version: &quot; (clojure-version))&lt;/p&gt;

&lt;p&gt;  (def mm 10000)&lt;/p&gt;

&lt;p&gt;  (def str-keys (map str (range mm)))&lt;br/&gt;
  (def m (zipmap str-keys (range mm)))&lt;br/&gt;
  (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i mm&amp;#93;&lt;/span&gt; (doseq &lt;span class=&quot;error&quot;&gt;&amp;#91;k str-keys&amp;#93;&lt;/span&gt; (m k))))&lt;/p&gt;

&lt;p&gt;  (def kw-keys (map #(keyword (str %)) (range mm)))&lt;br/&gt;
  (def m (zipmap kw-keys (range mm)))&lt;br/&gt;
  (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i mm&amp;#93;&lt;/span&gt; (doseq &lt;span class=&quot;error&quot;&gt;&amp;#91;k kw-keys&amp;#93;&lt;/span&gt; (m k))))&lt;/p&gt;

&lt;p&gt;  (def sym-keys (map #(symbol (str %)) (range mm)))&lt;br/&gt;
  (def m (zipmap sym-keys (range mm)))&lt;br/&gt;
  (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i mm&amp;#93;&lt;/span&gt; (doseq &lt;span class=&quot;error&quot;&gt;&amp;#91;k sym-keys&amp;#93;&lt;/span&gt; (m k))))&lt;/p&gt;

&lt;p&gt;  (println))&lt;/p&gt;</comment>
                    <comment id="30116" author="cgrand" created="Fri, 30 Nov 2012 14:10:19 -0600"  >&lt;p&gt;Sorry, I was too quick to react on the ML (someone said it was related to hasheq caching and since I had the patch almost ready: on a project I noticed too much time spent computing hasheq on vectors).&lt;br/&gt;
So no, my patch doesn&apos;t improve anything with kws, syms or strs as keys. However when keys are collections, it fares better.&lt;/p&gt;

&lt;p&gt;In 1.4, for a &quot;regular&quot; object, it must fails two instanceof tests before calling .hashCode().&lt;br/&gt;
If we make keywords and symbols implement IHashEq and reverse the test order (first IHashEq, then Number) it should improve the performance of the above benchmark &amp;#8211; except for Strings.&lt;/p&gt;</comment>
                    <comment id="30117" author="halgari" created="Fri, 30 Nov 2012 14:16:42 -0600"  >&lt;p&gt;Marking as incomplete, should we also delete the patch as it seems like it should be in a different ticket?&lt;/p&gt;</comment>
                    <comment id="30153" author="cgrand" created="Mon, 3 Dec 2012 10:00:07 -0600"  >&lt;p&gt;In 1.3, #&apos;hash was going through Object.hashCode and thus was simple and fast. Plus collections hashes were cached.&lt;br/&gt;
In 1.4 and master, #&apos;hash goes now through two instanceof test (Number and IHasheq in this order) before trying Object.hashCode in last resort. Plus collections hashes are not cached.&lt;br/&gt;
As such I&apos;m not sure Util.hasheq inherent slowness (compared to Util.hash) and hasheq caching should be separated in two issues.&lt;/p&gt;

&lt;p&gt;The caching-hasheq-v2.diff patchset reintroduces hashes caching for collections/hasheq and reorders the instanceof tests (to test for IHashEq before Number) and makes Keyword and Symbol implement IHashEq to branch fast in Util.hasheq.&lt;/p&gt;

&lt;p&gt;I recommend adding a collection test to the current benchmark:&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 -main
[&amp;amp; args]

(println)
(println &lt;span class=&quot;code-quote&quot;&gt;&quot;Version: &quot;&lt;/span&gt; (clojure-version))

(def mm 10000)

(def str-keys (map str (range mm)))
(def m (zipmap str-keys (range mm)))
(time (dotimes [i mm] (doseq [k str-keys] (m k))))

(def kw-keys (map #(keyword (str %)) (range mm)))
(def m (zipmap kw-keys (range mm)))
(time (dotimes [i mm] (doseq [k kw-keys] (m k))))

(def sym-keys (map #(symbol (str %)) (range mm)))
(def m (zipmap sym-keys (range mm)))
(time (dotimes [i mm] (doseq [k sym-keys] (m k))))

(def vec-keys (map (comp (juxt keyword symbol identity) str) (range mm)))
(def m (zipmap vec-keys (range mm)))
(time (dotimes [i mm] (doseq [k vec-keys] (m k))))

(println))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30158" author="halgari" created="Mon, 3 Dec 2012 10:38:45 -0600"  >&lt;p&gt;For some reason I can&apos;t get v2 to build against master. It applies cleanly, but fails to build.&lt;/p&gt;</comment>
                    <comment id="30165" author="cgrand" created="Mon, 3 Dec 2012 11:30:04 -0600"  >&lt;p&gt;Timothy: I inadvertently deleted a &quot;public&quot; modifier before commiting... fixed in caching-hasheq-v3.diff&lt;/p&gt;</comment>
                    <comment id="30203" author="halgari" created="Mon, 10 Dec 2012 11:00:29 -0600"  >&lt;p&gt;I now get the following results:&lt;/p&gt;

&lt;p&gt;Version:  1.4.0&lt;br/&gt;
&quot;Elapsed time: 6281.345 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6344.321 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6108.55 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 36172.135 msecs&quot;&lt;/p&gt;

&lt;p&gt;Version:  1.5.0-master-SNAPSHOT (pre-patch)&lt;br/&gt;
&quot;Elapsed time: 6126.337 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6320.857 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 6237.251 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 18167.05 msecs&quot;&lt;/p&gt;

&lt;p&gt;Version:  1.5.0-master-SNAPSHOT (post-patch)&lt;br/&gt;
&quot;Elapsed time: 6501.929 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3861.987 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3871.557 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 5049.067 msecs&quot;&lt;/p&gt;


&lt;p&gt;Marking as screened&lt;/p&gt;</comment>
                    <comment id="30206" author="oshyshko" created="Mon, 10 Dec 2012 15:53:06 -0600"  >&lt;p&gt;Please, could you add as a comment the bench result using 1.3 vs 1.5-master-post-patch?&lt;/p&gt;</comment>
                    <comment id="30217" author="oshyshko" created="Tue, 11 Dec 2012 14:13:31 -0600"  >&lt;p&gt;The performance with 1.5-master is now very close to 1.3 for 3/4 of the benchmark.&lt;/p&gt;

&lt;p&gt;However, this code is still showing 43% performance drop (3411 ms VS 6030 ms &amp;#8211; 1.3 VS 1.5-master):&lt;/p&gt;

&lt;p&gt;(def str-keys (map str (range mm)))&lt;br/&gt;
(def m (zipmap str-keys (range mm)))&lt;br/&gt;
(time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i mm&amp;#93;&lt;/span&gt; (doseq &lt;span class=&quot;error&quot;&gt;&amp;#91;k str-keys&amp;#93;&lt;/span&gt; (m k))))&lt;/p&gt;


&lt;p&gt;Version:  1.3.0&lt;br/&gt;
&quot;Elapsed time: 3411.353 msecs&quot;  &amp;lt;---&lt;br/&gt;
&quot;Elapsed time: 3459.992 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3365.182 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3813.637 msecs&quot;&lt;/p&gt;

&lt;p&gt;Version:  1.4.0&lt;br/&gt;
&quot;Elapsed time: 5710.073 msecs&quot; &amp;lt;---&lt;br/&gt;
&quot;Elapsed time: 5817.356 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 5774.856 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 18754.482 msecs&quot;&lt;/p&gt;

&lt;p&gt;Version:  1.5.0-master-SNAPSHOT&lt;br/&gt;
&quot;Elapsed time: 6030.247 msecs&quot; &amp;lt;---&lt;br/&gt;
&quot;Elapsed time: 3372.637 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3267.481 msecs&quot;&lt;br/&gt;
&quot;Elapsed time: 3852.927 msecs&quot;&lt;/p&gt;


&lt;p&gt;To reproduce:&lt;br/&gt;
$ git clone &lt;a href=&quot;https://github.com/clojure/clojure.git&quot;&gt;https://github.com/clojure/clojure.git&lt;/a&gt;&lt;br/&gt;
$ cd clojure&lt;br/&gt;
$ mvn install -Dmaven.test.skip=true&lt;/p&gt;

&lt;p&gt;$ cd ..&lt;/p&gt;

&lt;p&gt;$ git clone &lt;a href=&quot;https://github.com/oshyshko/clj-perf.git&quot;&gt;https://github.com/oshyshko/clj-perf.git&lt;/a&gt;&lt;br/&gt;
$ cd clj-perf&lt;br/&gt;
$ lein run-all&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11743" name="caching-hasheq-v3.diff" size="10183" author="cgrand" created="Mon, 3 Dec 2012 11:30:04 -0600" />
                    <attachment id="11240" name="clj_13.png" size="139196" author="oshyshko" created="Mon, 21 May 2012 22:06:54 -0500" />
                    <attachment id="11241" name="clj_14.png" size="143427" author="oshyshko" created="Mon, 21 May 2012 22:06:54 -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-990] Implement clojure.core.reducers/mapcat and some initial reducers tests</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-990</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The first patch implements a reducers equivalent of &lt;tt&gt;clojure.core/mapcat&lt;/tt&gt;, and the second patch adds a new &lt;tt&gt;reducers.clj&lt;/tt&gt; to the clojure tests that checks that &lt;tt&gt;map&lt;/tt&gt;, &lt;tt&gt;mapcat&lt;/tt&gt;, &lt;tt&gt;filter&lt;/tt&gt;, and &lt;tt&gt;reduce&lt;/tt&gt; are equivalent in &lt;tt&gt;clojure.core&lt;/tt&gt; and &lt;tt&gt;clojure.core.reducers&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15426">CLJ-990</key>
            <summary>Implement clojure.core.reducers/mapcat and some initial reducers tests</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="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>patch</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 10 May 2012 13:02:20 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Thu, 10 May 2012 19:45:01 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28433" author="richhickey" created="Thu, 10 May 2012 19:44:32 -0500"  >&lt;p&gt;applied - thanks!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11185" name="0001-Implement-clojure.core.reducers-mapcat.patch" size="1356" author="tsdh" created="Thu, 10 May 2012 13:02:20 -0500" />
                    <attachment id="11186" name="0002-Add-initial-reducers-tests.patch" size="2400" author="tsdh" created="Thu, 10 May 2012 13:02:20 -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-989] clojure.org/downloads page, nightly builds link out of date</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-989</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The clojure.org/downloads page links a page that claims to have up to date builds of Clojure&apos;s master branch at build.clojure.org.&lt;/p&gt;

&lt;p&gt;Either build.clojure.org needs to be updated, or the link should be removed or changed to reflect the statement.&lt;/p&gt;

&lt;p&gt;On a personal note, I&apos;d like to be able to link to alpha/beta versions of clojure 1.5.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15421">CLJ-989</key>
            <summary>clojure.org/downloads page, nightly builds link out of date</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="bmillare">Brent Millare</reporter>
                        <labels>
                        <label>web</label>
                    </labels>
                <created>Tue, 8 May 2012 17:57:39 -0500</created>
                <updated>Thu, 10 May 2012 20:52:02 -0500</updated>
                    <resolved>Thu, 10 May 2012 20:52:02 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28431" author="jafingerhut" created="Thu, 10 May 2012 18:11:30 -0500"  >&lt;p&gt;Once again likely abusing the &quot;Patch&quot; attribute of a ticket.  I&apos;ve set it to Code to indicate that it is ready for screening/action, not that it actually has a patch.  I suppose if you take a very broad view of patch, one that includes the English text describing the suggested web page changes to clojure.org/downloads in the description, then it does have a patch.&lt;/p&gt;</comment>
                    <comment id="28434" author="alexmiller" created="Thu, 10 May 2012 20:14:31 -0500"  >&lt;p&gt;I have updated the link for build.clojure.org to point to &lt;a href=&quot;https://oss.sonatype.org/content/repositories/snapshots/org/clojure/clojure/1.5.0-master-SNAPSHOT/&quot;&gt;https://oss.sonatype.org/content/repositories/snapshots/org/clojure/clojure/1.5.0-master-SNAPSHOT/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;afaik there are no alpha/beta versions of 1.5 yet.&lt;/p&gt;</comment>
                    <comment id="28438" author="jafingerhut" created="Thu, 10 May 2012 20:52:02 -0500"  >&lt;p&gt;Closing this issue &amp;#8211; Brent or someone else can reopen if they feel the issue was not fully resolved.&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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-988] the locking in MultiFn.java (synchronized methods) can cause lots of contention in multithreaded programs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-988</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;if you call a single multimethod a lot in multithreaded code you get lots of contention for the lock on the multimethod. this contention slows things down a lot.&lt;/p&gt;

&lt;p&gt;this is due to getMethod being synchronized. it would be great if there was some fast non-locking path through the multimethod.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15419">CLJ-988</key>
            <summary>the locking in MultiFn.java (synchronized methods) can cause lots of contention in multithreaded programs</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                        <label>bug</label>
                        <label>performance</label>
                    </labels>
                <created>Tue, 8 May 2012 11:14:53 -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>10</votes>
                        <watches>9</watches>
                        <comments>
                    <comment id="28411" author="hiredman" created="Tue, 8 May 2012 11:30:00 -0500"  >&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/6a8219ae3d4cd0ae?hl=en&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/6a8219ae3d4cd0ae?hl=en&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28446" author="santiago" created="Fri, 11 May 2012 06:38:34 -0500"  >&lt;p&gt;Here&apos;s a stab in the dark attempt at rewriting MultiFn to use atoms to swap between immutable copies of its otherwise mutable state. &lt;/p&gt;

&lt;p&gt;The four pieces of the MultiFn&apos;s state that are mutable and protected by locks are now contained in the MultiFn.State class, which is immutable and contains convenience functions for creating a new one with one field changed. An instance of this class is now held in an atom in the MultiFn called state. Changes to any of these four members are now done with an atomic swap of these State objects. &lt;/p&gt;

&lt;p&gt;The getMethod/findAndCacheBestMethod complex was rewritten to better enable the atomic logic. findAndCacheBestMethod was replaced with findBestMethod, which merely looks up the method; the caching logic was moved to getMethod so that it can be retried easily as part of the work that method does. &lt;/p&gt;

&lt;p&gt;As it was findAndCacheBestMethod seemingly had the potential to cause a stack overflow in a perfect storm of heavy concurrent modification, since it calls itself recursively if it finds that the hierarchy has changed while it has done its work. This logic is now done in the CAS looping of getMethod, so hopefully that is not even an unlikely possibility anymore.&lt;/p&gt;

&lt;p&gt;There is still seemingly a small race here, since the check is done of a regular variable against the value in a ref. Now as before, the ref could be updated just after you do the check, but before the MultiFn&apos;s state is updated. Of course, only the method lookup part of a MultiFn call was synchronized before; it could already change after the lookup but before the method itself executed, having a stale method finish seemingly after the method had been changed. Things are no different now in general, with the atom-based approach, so perhaps this race is not a big deal, as a stale value can&apos;t persist for long.&lt;/p&gt;

&lt;p&gt;The patch passes the tests and Clojure and multimethods seems to work.&lt;/p&gt;</comment>
                    <comment id="28482" author="hiredman" created="Sat, 12 May 2012 20:59:45 -0500"  >&lt;p&gt;this patch gets rid of the ugly lock contention issues. I have not been able to benchmark it vs. the old multimethod implementation, but looking at it, I would not be surprised if it is faster when the system is in a steady state.&lt;/p&gt;</comment>
                    <comment id="28747" author="stu" created="Fri, 8 Jun 2012 12:11:51 -0500"  >&lt;p&gt;This looks straightforward, except for getMethod. Can somebody with context add more discussion of how method caching works?&lt;/p&gt;

&lt;p&gt;Also, it would be great to have tests with this one.&lt;/p&gt;</comment>
                    <comment id="28810" author="santiago" created="Fri, 15 Jun 2012 04:44:53 -0500"  >&lt;p&gt;Obviously I didn&apos;t write the original code, so I&apos;m not the ideal&lt;br/&gt;
person to explain this stuff. But I did work with it a bit recently,&lt;br/&gt;
so in the hopes that I can be helpful, I&apos;m writing down my&lt;br/&gt;
understanding of the code as I worked with it. Since I came to the&lt;br/&gt;
code and sort of reverse engineered my way to this understanding,&lt;br/&gt;
hopefully laying this all out will make any mistakes or&lt;br/&gt;
misunderstandings I may have made easier to catch and correct. To&lt;br/&gt;
ensure some stability, I&apos;ll talk about the original MultiFn code as it&lt;br/&gt;
stands at this commit:&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojure/blob/8fda34e4c77cac079b711da59d5fe49b74605553/src/jvm/clojure/lang/MultiFn.java&quot;&gt;https://github.com/clojure/clojure/blob/8fda34e4c77cac079b711da59d5fe49b74605553/src/jvm/clojure/lang/MultiFn.java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are four pieces of state that change as the multimethod is either&lt;br/&gt;
populated with methods or called.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;methodTable: A persistent map from a dispatch value (Object) to&lt;br/&gt;
    a function (IFn). This is the obvious thing you think it is,&lt;br/&gt;
    determining which dispatch values call which function.&lt;/li&gt;
	&lt;li&gt;preferTable: A persistent map from a dispatch value (Object) to&lt;br/&gt;
    another value (Object), where the key &quot;is preferred&quot; to the value.&lt;/li&gt;
	&lt;li&gt;methodCache: A persistent map from a dispatch value (Object) to&lt;br/&gt;
    function (IFn). By default, the methodCache is assigned the same&lt;br/&gt;
    map value as the methodTable. If values are calculated out of the&lt;br/&gt;
    hierarchy during a dispatch, the originating value and the&lt;br/&gt;
    ultimate method it resolves to are inserted as additional items in&lt;br/&gt;
    the methodCache so that subsequent calls can jump right to the&lt;br/&gt;
    method without recursing down the hierarchy and preference table.&lt;/li&gt;
	&lt;li&gt;cachedHierarchy: An Object that refers to the hierarchy that is&lt;br/&gt;
    reflected in the latest cached values. It is used to check if the&lt;br/&gt;
    hierarchy has been updated since we last updated the cache. If it&lt;br/&gt;
    has been updated, then the cache is flushed.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I think reset(), addMethod(), removeMethod(), preferMethod(),&lt;br/&gt;
prefers(), isA(), dominates(), and resetCache() are extremely&lt;br/&gt;
straightforward in both the original code and the patch. In the&lt;br/&gt;
original code, the first four of those are synchronized, and the other&lt;br/&gt;
four are only called from methods that are synchronized (or from&lt;br/&gt;
methods only called from methods that are synchronized).&lt;/p&gt;

&lt;p&gt;Invoking a multimethod through its invoke() function will call&lt;br/&gt;
getFn(). getFn() will call the getMethod() function, which is&lt;br/&gt;
synchronized. This means any call of the multimethod will wait for and&lt;br/&gt;
take a lock as part of method invocation. The goal of the patch in&lt;br/&gt;
this issue is to remove this lock on calls into the multimethod. It in&lt;br/&gt;
fact removes the locks on all operations, and instead keeps its&lt;br/&gt;
internal mutable state by atomically swapping a private immutable&lt;br/&gt;
State object held in an Atom called state.&lt;/p&gt;

&lt;p&gt;The biggest change in the patch is to the&lt;br/&gt;
getFn()&lt;del&gt;&amp;gt;getMethod()&lt;/del&gt;&amp;gt;findAndCacheBestMethod() complex from the&lt;br/&gt;
original code. I&apos;ll describe how that code works first. &lt;/p&gt;

&lt;p&gt;In the original code, getFn() does nothing but bounce through&lt;br/&gt;
getMethod(). getMethod() tries three times to find a method to call,&lt;br/&gt;
after checking that the cache is up to date and flushing it if it&lt;br/&gt;
isn&apos;t:&lt;/p&gt;

&lt;p&gt;    1. It checks if there&apos;s a method for the dispatch value in the&lt;br/&gt;
    methodCache. &lt;/p&gt;

&lt;p&gt;    2. If not, it calls findAndCacheBestMethod() on the&lt;br/&gt;
    dispatch value. findAndCacheBestMethod() does the following:&lt;/p&gt;

&lt;p&gt;        1. It iterates through every map entry in the method table,&lt;br/&gt;
        keeping at each step the best entry it has found so far&lt;br/&gt;
        (according to the hierarchy and preference tables).  &lt;/p&gt;

&lt;p&gt;        2. If it did not find a suitable entry, it returns null.  &lt;/p&gt;

&lt;p&gt;        3. Otherwise, it checks if the hierarchy has been changed since the cache&lt;br/&gt;
        was last updated. If it has not changed, it inserts the method&lt;br/&gt;
        into the cache and returns it. If it has been changed, it&lt;br/&gt;
        resets the cache and calls itself recursively to repeat the process.&lt;/p&gt;

&lt;p&gt;    3. Failing all else, it will return the method for the default&lt;br/&gt;
    dispatch value.&lt;/p&gt;

&lt;p&gt;Again, remember everything in the list above happens in a call to a&lt;br/&gt;
synchronized function. Also note that as it is currently written,&lt;br/&gt;
findAndCacheBestMethod() uses recursion for iteration in a way that&lt;br/&gt;
grows the stack. This seems unlikely to cause a stack overflow unless&lt;br/&gt;
the multimethod is getting its hierarchy updated very rapidly for a&lt;br/&gt;
sustained period while someone else tries to call it. Nonetheless, the&lt;br/&gt;
hierarchy is held in an IRef that is updated independently of the&lt;br/&gt;
locking of the MultiFn. Finally, note that the multimethod is locked&lt;br/&gt;
only while the method is being found. Once it is found, the lock is&lt;br/&gt;
released and the method actually gets called afterwards without any&lt;br/&gt;
synchronization, meaning that by the time the method actually&lt;br/&gt;
executes, the multimethod may have already been modified in a way that&lt;br/&gt;
suggests a different method should have been called. Presumably this&lt;br/&gt;
is intended, understood, and not a big deal.&lt;/p&gt;

&lt;p&gt;Moving on now to the patch in this issue. As mentioned, the main&lt;br/&gt;
change is updating this entire apparatus to work with a single atomic&lt;br/&gt;
swap to control concurrency. This means that all updates to the&lt;br/&gt;
multimethod&apos;s state have to happen at one instant in time. Where the&lt;br/&gt;
original code could make multiple changes to the state at different&lt;br/&gt;
times, knowing it was safely protected by an exclusive lock, rewriting&lt;br/&gt;
for atom swaps requires us to reorganize the code so that all updates&lt;br/&gt;
to the state happen at the same time with a single CAS.&lt;/p&gt;

&lt;p&gt;To implement this change, I pulled the implicit looping logic from&lt;br/&gt;
findAndCacheBestMethod() up into getMethod() itself, and broke the&lt;br/&gt;
&quot;findBestMethod&quot; part into its own function, findBestMethod(), which&lt;br/&gt;
makes no update to any state while implementing the same&lt;br/&gt;
logic. getMethod() now has an explicit loop to avoid stack-consuming&lt;br/&gt;
recursion on retries. This infinite for loop covers all of the logic&lt;br/&gt;
in getMethod() and retries until a method is successfully found and a&lt;br/&gt;
CAS operation succeeds, or we determine that the method cannot be&lt;br/&gt;
found and we return the default dispatch value&apos;s implementation.&lt;/p&gt;

&lt;p&gt;I&apos;ll now describe the operation of the logic in the for loop. The&lt;br/&gt;
first two steps in the loop correspond to things getMethod() does&lt;br/&gt;
&quot;before&quot; its looping construct in the original code, but we have to do&lt;br/&gt;
in the loop to get the latest values.&lt;/p&gt;

&lt;p&gt;    1. First we dereference our state, and assign this value to both&lt;br/&gt;
    oldState and newState. We also set a variable called needWrite to&lt;br/&gt;
    false; this is so we can avoid doing a CAS (they&apos;re not free) when&lt;br/&gt;
    we have not actually updated the state.  &lt;/p&gt;

&lt;p&gt;    2. Check if the cache is stale, and flush it if so. If the cache&lt;br/&gt;
    gets flushed, set needWrite to true, as the state has changed.&lt;/p&gt;

&lt;p&gt;    3. Check if the methodCache has an entry for this dispatch&lt;br/&gt;
    value. If so, we are &quot;finished&quot; in the sense that we found the&lt;br/&gt;
    value we wanted. However, we may need to update the state. So, &lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;If needWrite is false, we can return without a CAS, so just&lt;br/&gt;
          break out of the loop and return the method.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;Otherwise, we need to update the state object with a CAS. If&lt;br/&gt;
          the CAS is successful, break out of the loop and return the&lt;br/&gt;
          target function. Otherwise, continue on the next iteration&lt;br/&gt;
          of the loop, skipping any other attempts to fetch the method&lt;br/&gt;
          later in the loop (useless work, at this point).&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;    4. The value was not in the methodCache, so call the function&lt;br/&gt;
    findBestMethod() to attempt to find a suitable method based on the&lt;br/&gt;
    hierarchy and preferences. If it does find us a suitable method,&lt;br/&gt;
    we now need to cache it ourselves. We create a new state object&lt;br/&gt;
    with the new method cache and attempt to update the state atom&lt;br/&gt;
    with a CAS (we definitely need a write here, so no need to check&lt;br/&gt;
    needWrite at this point).&lt;/p&gt;

&lt;p&gt;    The one thing that is possibly questionable is the check at this&lt;br/&gt;
    point to make sure the hierarchy has not been updated since the&lt;br/&gt;
    beginning of this method. I inserted this here to match the&lt;br/&gt;
    identical check at the corresponding point in&lt;br/&gt;
    findAndCacheBestMethod() in the original code. That is also a&lt;br/&gt;
    second check, since the cache is originally checked for freshness&lt;br/&gt;
    at the very beginning of getMethod() in the original code. That&lt;br/&gt;
    initial check happens at the beginning of the loop in the&lt;br/&gt;
    patch. Given that there is no synchronization with the method&lt;br/&gt;
    hierarchy, it is not clear to me that this second check is needed,&lt;br/&gt;
    since we are already proceeding with a snapshot from the beginning&lt;br/&gt;
    of the loop. Nonetheless, it can&apos;t hurt as far as I can tell, it&lt;br/&gt;
    is how the original code worked, and I assume there was some&lt;br/&gt;
    reason for that, so I kept the second check.&lt;/p&gt;

&lt;p&gt;    5. Finally, if findBestMethod() failed to find us a method for the&lt;br/&gt;
    dispatch value, find the method for the default dispatch value and&lt;br/&gt;
    return that by breaking out of the loop.&lt;/p&gt;

&lt;p&gt;So the organization of getMethod() in the patch is complicated by two&lt;br/&gt;
factors: (1) making the retry looping explicit and stackless, (2)&lt;br/&gt;
skipping the CAS when we don&apos;t need to update state, and (3) skipping&lt;br/&gt;
needless work later in the retry loop if we find a value but are&lt;br/&gt;
unable to succeed in our attempt to CAS. Invoking a multimethod that&lt;br/&gt;
has a stable hierarchy and a populated cache should not even have a&lt;br/&gt;
CAS operation (or memory allocation) on this code path, just a cache&lt;br/&gt;
lookup after the dispatch value is calculated.&lt;/p&gt;</comment>
                    <comment id="28811" author="santiago" created="Fri, 15 Jun 2012 04:45:58 -0500"  >&lt;p&gt;I&apos;ve updated this patch (removing the old version, which is entirely superseded by this one). The actual changes to MultiFn.java are identical (modulo any thing that came through in the rebase), but this newer patch has tests of basic multimethod usage, including defmulti, defmethod, remove-method, prefer-method and usage of these in a hierarchy that updates in a way interleaved with calls. &lt;/p&gt;</comment>
                    <comment id="28812" author="santiago" created="Fri, 15 Jun 2012 06:38:27 -0500"  >&lt;p&gt;I created a really, really simple benchmark to make sure this was an improvement. The following tests were on a quad-core hyper-threaded 2012 MBP. &lt;/p&gt;

&lt;p&gt;With two threads contending for a simple multimethod: &lt;br/&gt;
The lock-based multifns run at an average of 606ms, with about 12% user, 15% system CPU at around 150%. &lt;br/&gt;
The lockless multifns run at an average of 159ms, with about 25% user, 3% system CPU at around 195%.&lt;/p&gt;

&lt;p&gt;With four threads contending for a simple multimethod:&lt;br/&gt;
The lock-based multifns run at an average of 1.2s, with about 12% user, 15% system, CPU at around 150%.&lt;br/&gt;
The lockless multifns run at an average of 219ms, with about 50% user, 4% system, CPU at around 330%.&lt;/p&gt;

&lt;p&gt;You can get the code at &lt;a href=&quot;https://github.com/davidsantiago/multifn-perf&quot;&gt;https://github.com/davidsantiago/multifn-perf&lt;/a&gt; &lt;/p&gt;</comment>
                    <comment id="29159" author="santiago" created="Tue, 14 Aug 2012 22:02:00 -0500"  >&lt;p&gt;It&apos;s been a couple of months, and so I just wanted to check in and see if there was anything else needed to move this along. &lt;/p&gt;

&lt;p&gt;Also, Alan Malloy pointed out to me that my benchmarks above did not mention single-threaded performance. I actually wrote this into the tests above, but I neglected to report them at the time. Here are the results on the same machine as above (multithreaded versions are basically the same as the previous comment). &lt;/p&gt;

&lt;p&gt;With a single thread performing the same work:&lt;br/&gt;
The lock-based multifns run at an average of 142ms. &lt;br/&gt;
The lockless multifns run at an average of 115ms. &lt;/p&gt;

&lt;p&gt;So the lockless multimethods are still faster even in a single-threaded case, although the speedup is more modest compared to the speedups in the multithreaded cases above. This is not surprising, but it is good to know.&lt;/p&gt;</comment>
                    <comment id="29213" author="stuart.sierra" created="Fri, 17 Aug 2012 14:58:06 -0500"  >&lt;p&gt;Screened. The approach is sound. &lt;/p&gt;

&lt;p&gt;I can confirm similar performance measurements using David Santiago&apos;s benchmark, compared with Clojure 1.5 master as of commit f5f4faf.&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;Mean runtime (ms) of a multimethod when called repeatedly from N threads:

|            | N=1 | N=2 | N=4 |
|------------+-----+-----+-----|
| 1.5 master |  80 | 302 | 765 |
| lockless   |  63 |  88 | 125 |&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;My only concern is that the extra allocations of the &lt;tt&gt;State&lt;/tt&gt; class will create more garbage, but this is probably not significant if we are already using persistent maps. It would be interesting to compare this implementation with one using thread-safe mutable data structures (e.g. ConcurrentHashMap) for the cache.&lt;/p&gt;</comment>
                    <comment id="29216" author="santiago" created="Fri, 17 Aug 2012 19:05:54 -0500"  >&lt;p&gt;I think your assessment that it&apos;s not significant compared to the current implementation using persistent maps is correct. Regarding the extra garbage, note that the new State is only created when the hierarchy has changed or there&apos;s a cache miss (related, obviously)... situations where you&apos;re already screwed. Then it won&apos;t have to happen again for the same method (until another change to the multimethod). So for most code, it won&apos;t happen very often. &lt;/p&gt;

&lt;p&gt;ConcurrentHashMap might be faster, it&apos;d be interesting to see. My instinct is to keep it as close to being &quot;made out of Clojure&quot; as possible. In fact, it&apos;s hard to see why this couldn&apos;t be rewritten in Clojure itself some day, as I believe Chas Emerick has suggested. Also, I would point out that two of the three maps are used from the Clojure side in core.clj. I assume they would be happier if they were persistent maps. &lt;/p&gt;

&lt;p&gt;Funny story: I was going to point out the parts of the code that were called from the clojure side just now, and alarmingly cannot find two of the functions. I think I must have misplaced them while rewriting the state into an immutable object. Going to attach a new patch with the fix and some tests for it in a few minutes.&lt;/p&gt;</comment>
                    <comment id="29218" author="santiago" created="Fri, 17 Aug 2012 19:44:54 -0500"  >&lt;p&gt;Latest patch for this issue. Supersedes issue988-lockless-multifn+tests.diff as of 08/17/2012.&lt;/p&gt;</comment>
                    <comment id="29219" author="santiago" created="Fri, 17 Aug 2012 19:49:13 -0500"  >&lt;p&gt;As promised, I reimplemented those two functions. I also added more multimethod tests to the test suite. The new tests should definitely prevent a similar mistake. While I was at it, I went through core.clj and found all the multimethod API functions I could and ensured that there were at least some basic functionality tests for all of them. The ones I found were: defmulti, defmethod, remove-all-methods, remove-method, prefer-method, methods, get-method, prefers (Some of those already had tests from the earlier version of the patch). &lt;/p&gt;

&lt;p&gt;Really sorry about catching this right after you vetted the patch. 12771 test assertions were apparently not affected by prefers and methods ceasing to function, but now there are 12780 to help prevent a similar error. Since you just went through it, I&apos;m leaving the older version of the patch up so you can easily see the difference to what I&apos;ve added. &lt;/p&gt;</comment>
                    <comment id="29448" author="richhickey" created="Sat, 15 Sep 2012 09:05:46 -0500"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/83ebf814d5d6663c49c1b2d0d076b57638bff673&quot;&gt;https://github.com/clojure/clojure/commit/83ebf814d5d6663c49c1b2d0d076b57638bff673&lt;/a&gt; should fix these issues. The patch here was too much of a change to properly vet.&lt;/p&gt;

&lt;p&gt;If you could though, I&apos;d appreciate a patch with just the multimethod tests.&lt;/p&gt;</comment>
                    <comment id="29449" author="jafingerhut" created="Sat, 15 Sep 2012 10:59:01 -0500"  >&lt;p&gt;Patch clj-988-tests-only-patch-v1.txt dated Sep 15 2012 is a subset of David Santiago&apos;s &lt;br/&gt;
patch issue988-lockless-multifn+tests-120817.diff dated Aug 17 2012.  It includes only the tests from that patch.  Applies cleanly and passes tests with latest master after Rich&apos;s read/write lock change for multimethods was committed.&lt;/p&gt;</comment>
                    <comment id="29463" author="richhickey" created="Mon, 17 Sep 2012 09:20:43 -0500"  >&lt;p&gt;tests-only patch ok&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11498" name="clj-988-tests-only-patch-v1.txt" size="3569" author="jafingerhut" created="Sat, 15 Sep 2012 10:59:01 -0500" />
                    <attachment id="11441" name="issue988-lockless-multifn+tests-120817.diff" size="15875" author="santiago" created="Fri, 17 Aug 2012 19:44:54 -0500" />
                    <attachment id="11321" name="issue988-lockless-multifn+tests.diff" size="12422" author="santiago" created="Fri, 15 Jun 2012 04:45:58 -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-987] pprint doesn&apos;t flush the underlying stream</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-987</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Unlike prn, pprint doesn&apos;t flush the underlying stream.&lt;/p&gt;

&lt;p&gt;pretty_writer currently overrides .flush with behaviour that pushes its own data, but does not flush the underlying stream.&lt;/p&gt;

&lt;p&gt;pprint should behave similarly to prn with respect to flushing the underlying stream.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15416">CLJ-987</key>
            <summary>pprint doesn&apos;t flush the underlying stream</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="djpowell">David Powell</assignee>
                                <reporter username="djpowell">David Powell</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Mon, 7 May 2012 09:18:18 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Wed, 14 Nov 2012 09:23:02 -0600</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28405" author="djpowell" created="Mon, 7 May 2012 09:43:25 -0500"  >&lt;p&gt;Test included.&lt;br/&gt;
Patch should ensure that flushing happens after pprint, without introducing any additional unnecessary flushes.&lt;/p&gt;</comment>
                    <comment id="28754" author="stu" created="Fri, 8 Jun 2012 15:11:02 -0500"  >&lt;p&gt;I am confused by the tests &amp;#8211; they all seem to call prn, though some claim to be calling pprint.&lt;/p&gt;</comment>
                    <comment id="28762" author="djpowell" created="Sat, 9 Jun 2012 06:16:02 -0500"  >&lt;p&gt;Ah, sorry.  I&apos;d tried to remove duplicate tests before committing them, but removed the wrong ones.&lt;br/&gt;
Replacement patch attached:&lt;/p&gt;

&lt;p&gt;0002-pprint-now-flushes-the-underlying-stream-similarly-t.patch&lt;/p&gt;</comment>
                    <comment id="28887" author="jafingerhut" created="Thu, 21 Jun 2012 17:27:07 -0500"  >&lt;p&gt;Tempting fate once again by changing Approval from Incomplete to None after the reason it was marked as incomplete seems to have been addressed.&lt;/p&gt;</comment>
                    <comment id="29928" author="stuart.sierra" created="Fri, 9 Nov 2012 16:07:39 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                    <comment id="29942" author="stuart.sierra" created="Wed, 14 Nov 2012 09:23:02 -0600"  >&lt;p&gt;Pushed in commit 1588ff3f70e864d9817bc565bd2c30b08189bc6e&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11306" name="0002-pprint-now-flushes-the-underlying-stream-similarly-t.patch" size="5960" author="djpowell" created="Sat, 9 Jun 2012 06:16:02 -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-985] make jsr166 available at build time</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-985</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;but no runtime requirement.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15413">CLJ-985</key>
            <summary>make jsr166 available at build time</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="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sun, 6 May 2012 19:07:04 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Fri, 18 May 2012 20:16:21 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28401" author="hiredman" created="Mon, 7 May 2012 00:46:29 -0500"  >&lt;p&gt;antsetup.sh seems to be missing?&lt;/p&gt;</comment>
                    <comment id="28402" author="stu" created="Mon, 7 May 2012 08:01:08 -0500"  >&lt;p&gt;and now, a patch with antsetup included&lt;/p&gt;</comment>
                    <comment id="28426" author="sw1nn" created="Thu, 10 May 2012 14:05:28 -0500"  >&lt;p&gt;You say you don&apos;t want a runtime requirement, but presumably you&apos;ll want to, at some point, run tests as part of the build so some element of runtime is required?&lt;/p&gt;</comment>
                    <comment id="28529" author="stu" created="Fri, 18 May 2012 20:15:21 -0500"  >&lt;p&gt;Neale: the maven &quot;provided&quot; scope allows use during build without runtime requirement.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11175" name="build-with-jsr166-antsetup.patch" size="2985" author="stu" created="Mon, 7 May 2012 08:01:08 -0500" />
                    <attachment id="11174" name="build-with-jsr166.patch" size="2590" author="stu" created="Sun, 6 May 2012 19:07:04 -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-981] clojure.set/rename-keys deletes keys when there&apos;s a collision</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-981</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(set/rename-keys {:a &quot;one&quot; :b &quot;two&quot; :c &quot;three&quot;} {:a :b :b :a}) returns {:b &quot;one&quot; :c &quot;three&quot;}&lt;br/&gt;
should be {:a &quot;two&quot; :b &quot;one&quot; :c &quot;three&quot;}&lt;/p&gt;

&lt;p&gt;I have created a pull request for a fix, here: &lt;a href=&quot;https://github.com/clojure/clojure/pull/23&quot;&gt;https://github.com/clojure/clojure/pull/23&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15405">CLJ-981</key>
            <summary>clojure.set/rename-keys deletes keys when there&apos;s a collision</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="ed.bowler@gmail.com">Ed Bowler</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 May 2012 12:35:32 -0500</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28386" author="ed.bowler@gmail.com" created="Fri, 4 May 2012 13:31:19 -0500"  >&lt;p&gt;added fix&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11167" name="rename-keys-fix.patch" size="1689" author="ed.bowler@gmail.com" created="Fri, 4 May 2012 13:31: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-977] (int \a) returns a value, (long \a) throws an exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-977</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As described in the summary, calling (long ...) on a character throws a ClassCastException.  I know the semantics surrounding numbers has changed a bit, but I think it would be nice for this to be consistent.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15374">CLJ-977</key>
            <summary>(int \a) returns a value, (long \a) throws an 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="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ztellman">Zach Tellman</reporter>
                        <labels>
                    </labels>
                <created>Sat, 28 Apr 2012 03:09:50 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28484" author="scottlowe" created="Sat, 12 May 2012 22:45:29 -0500"  >&lt;p&gt;Attached a patch. 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-977&quot; title=&quot;(int \a) returns a value, (long \a) throws an exception&quot;&gt;&lt;del&gt;CLJ-977&lt;/del&gt;&lt;/a&gt;-int-a-returns-a-value-long-a-throws-an-excep.patch 13/May/12&lt;/p&gt;</comment>
                    <comment id="29148" author="aaron" created="Tue, 14 Aug 2012 20:11:48 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11211" name="0001-CLJ-977-int-a-returns-a-value-long-a-throws-an-excep.patch" size="850" author="scottlowe" created="Sat, 12 May 2012 22:45: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-975] inconsistent destructuring behaviour when using nested maps </title>
                <link>http://dev.clojure.org/jira/browse/CLJ-975</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The way destructuring happens should not be affected by the fact that I have the same w at two-levels.&lt;br/&gt;
user&amp;gt;&amp;gt; (let &lt;span class=&quot;error&quot;&gt;&amp;#91;{{a :a b :b :as w} :c a1 :a b1 :b :as w} {:a 10 :b 20 :c {:a 30 :b 40}}&amp;#93;&lt;/span&gt; {:a a :b b  :b1 b1 :a1 a1})&lt;br/&gt;
{:a 30, :b 40, :b1 40, :a1 30} &amp;lt;- unexpected behaviour.....&lt;/p&gt;

&lt;p&gt;user&amp;gt;&amp;gt; (let &lt;span class=&quot;error&quot;&gt;&amp;#91;{{a :a b :b :as w} :c a1 :a b1 :b :as w1} {:a 10 :b 20 :c {:a 30 :b 40}}&amp;#93;&lt;/span&gt; {:a a :b b  :b1 b1 :a1 a1})&lt;br/&gt;
{:a 30, :b 40, :b1 20, :a1 10} &amp;lt;- expected behaviour ..&lt;/p&gt;

&lt;p&gt;Even having the :as things from both should not affet how others are destructured.. The email thread talking about the same is here&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups#!topic/clojure/3z3JtXhcDB0&quot;&gt;https://groups.google.com/forum/?fromgroups#!topic/clojure/3z3JtXhcDB0&lt;/a&gt;&lt;/p&gt;</description>
                <environment>This should happen on any system. I have tested it on macs in version 1.4 and 1.2.1</environment>
            <key id="15343">CLJ-975</key>
            <summary>inconsistent destructuring behaviour when using nested 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="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="neotyk">Hubert Iwaniuk</assignee>
                                <reporter username="sunilnandihalli">Sunil S Nandihalli</reporter>
                        <labels>
                    </labels>
                <created>Thu, 19 Apr 2012 01:55:58 -0500</created>
                <updated>Fri, 18 May 2012 20:36:45 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:36:45 -0500</resolved>
                            <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>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28195" author="neotyk" created="Fri, 20 Apr 2012 14:18:52 -0500"  >&lt;p&gt;Test to reproduce reported issue and code fixing it.&lt;/p&gt;</comment>
                    <comment id="28197" author="neotyk" created="Fri, 20 Apr 2012 15:36:53 -0500"  >&lt;p&gt;Test to reproduce and clearly visualise this issue as well as code fixing it included.&lt;/p&gt;</comment>
                    <comment id="28521" author="stu" created="Fri, 18 May 2012 09:11:52 -0500"  >&lt;p&gt;A less eye-bleeding 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;(let [{{inner :a :as w} :c outer :a :as w}
      {:a 10 :c {:a 30}}]
  outer)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11071" name="CLJ-975-test.patch" size="2770" author="neotyk" created="Fri, 20 Apr 2012 14:18:52 -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-973] doc for *data-readers* is wrong about the format for data_readers.clj</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-973</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Sometime recently, the format for data_readers.clj changed to require a read-time literal map instead of pairs of symbols.  The doc string for &amp;#42;data-readers* should be updated to reflect the change.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15333">CLJ-973</key>
            <summary>doc for *data-readers* is wrong about the format for data_readers.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="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Sat, 14 Apr 2012 09:35:16 -0500</created>
                <updated>Sat, 14 Apr 2012 13:52:46 -0500</updated>
                    <resolved>Sat, 14 Apr 2012 13:52:46 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28142" author="steveminer@gmail.com" created="Sat, 14 Apr 2012 09:59:43 -0500"  >&lt;p&gt;Fixed doc string for &amp;#42;data-readers*&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11048" name="0001-CLJ-973-doc-for-data-readers.patch" size="1074" author="steveminer@gmail.com" created="Sat, 14 Apr 2012 09:59:43 -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-972] Document changes between Clojure 1.3 and 1.4</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-972</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The changes between Clojure 1.3 and 1.4 need to be documented before release.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15327">CLJ-972</key>
            <summary>Document changes between Clojure 1.3 and 1.4</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</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="stu">Stuart Halloway</assignee>
                                <reporter username="crnixon">Clinton R. Nixon</reporter>
                        <labels>
                    </labels>
                <created>Wed, 11 Apr 2012 09:10:49 -0500</created>
                <updated>Sun, 15 Apr 2012 08:13:42 -0500</updated>
                    <resolved>Sun, 15 Apr 2012 08:13:42 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11035" name="changes-1.4.patch" size="29355" author="crnixon" created="Wed, 11 Apr 2012 09:10: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>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-966] Add support for marker protocols</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-966</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The attached patch adds support to marker protocols, for example&lt;/p&gt;

&lt;p&gt;(defprotocol Sequential&lt;br/&gt;
&quot;marker protocol indicating a sequential type&quot;)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15316">CLJ-966</key>
            <summary>Add support for marker protocols</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="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Thu, 5 Apr 2012 07:16:52 -0500</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28086" author="jonase" created="Sat, 7 Apr 2012 13:20:28 -0500"  >&lt;p&gt;Marker protocols are supported and used in ClojureScript.&lt;/p&gt;</comment>
                    <comment id="29183" author="hiredman" created="Wed, 15 Aug 2012 14:23:44 -0500"  >&lt;p&gt;what are the uses for marker protocols? I know there are marker interfaces in java, but is it a pattern we want to carry forward?&lt;/p&gt;</comment>
                    <comment id="29186" author="fogus" created="Wed, 15 Aug 2012 14:40:36 -0500"  >&lt;p&gt;Nice and simple.  Tested with:&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 P (hi [_]))
(defprotocol M)
(deftype T [a] M P (hi [_] &quot;hi there&quot;))
(satisfies? P (T. 1))
(satisfies? M (T. 1))
(hi (T. 1))
(defprotocol M2 &quot;marker for 2&quot;)
(extend-type T M2)
(satisfies? M2 (T. 1))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Similar tests are included in the additional patch file as test cases. This additional patch file should be applied after the feature&apos;s main patch file.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11436" name="CLJ-966-additional-marker-tests-APPLY-AFTER.diff" size="2487" author="fogus" created="Wed, 15 Aug 2012 14:40:36 -0500" />
                    <attachment id="11029" name="marker-protocols.diff" size="4971" author="bronsa" created="Thu, 5 Apr 2012 07:16:52 -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-965] clojure.org/patches should have link to JIRA workflow wiki page added, and most content removed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-965</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_frm/thread/12e90e460aec29cb&quot;&gt;http://groups.google.com/group/clojure-dev/browse_frm/thread/12e90e460aec29cb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Relevant text supporting this suggestion copied below:&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://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only a few have permission to edit this page:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have carefully reviewed the content of those two side by side, section by section, and it seems to me that they are either identical, or &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; is more up to date.&lt;/p&gt;

&lt;p&gt;I am not proposing getting rid of &lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt;, but instead do this:&lt;/p&gt;

&lt;p&gt;Keep the first section headed &quot;Submitting patches to Clojure and Clojure Contrib&quot; exactly as it is now.&lt;/p&gt;

&lt;p&gt;Immediately under the heading &quot;So You Have an Idea...&quot;, put a single link, perhaps with one sentence or phrase, that points at &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;.  Delete all other text from there down on &lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt;.  You will lose nothing worth saving, and you will save future confusion as what is now &lt;span class=&quot;error&quot;&gt;&amp;#91;2&amp;#93;&lt;/span&gt; gets more and more stale. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15315">CLJ-965</key>
            <summary>clojure.org/patches should have link to JIRA workflow wiki page added, and most content removed</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>
                        <label>documentation</label>
                    </labels>
                <created>Wed, 4 Apr 2012 14:29:14 -0500</created>
                <updated>Thu, 10 May 2012 20:49:44 -0500</updated>
                    <resolved>Thu, 10 May 2012 20:49:44 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28069" author="jafingerhut" created="Wed, 4 Apr 2012 14:32:55 -0500"  >&lt;p&gt;I am probably abusing the &quot;Patch&quot; attribute of this ticket.  I&apos;ve set it to Code to indicate that it is ready for screening/action, not that it actually has a patch.  I suppose if you take a very broad view of patch, one that includes the English text describing the suggested web page changes to clojure.org/patches in the description, then it does have a patch.&lt;/p&gt;</comment>
                    <comment id="28262" author="jafingerhut" created="Tue, 24 Apr 2012 16:09:59 -0500"  >&lt;p&gt;Another link that would be nice to update: On &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt; there is a link with text &quot;preferred process for submitting&quot; that links to &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt;.  It should link 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; instead.&lt;/p&gt;</comment>
                    <comment id="28435" author="alexmiller" created="Thu, 10 May 2012 20:38:19 -0500"  >&lt;p&gt;I have boldly made the suggested changes to the patches page as it seems imminently reasonable to avoid duplicating the more maintained version of the content.  I added the sentence:&lt;/p&gt;

&lt;p&gt;&quot;Great! For more info on the process of creating issues in JIRA, creating and filing patches, tracking, screening and vetting patches, please visit the JIRA workflow page on the dev wiki.&quot; with a big wide link target to the jira workflow page.  &lt;/p&gt;

&lt;p&gt;If the powers that be deem my changes to be unsuitable, the powers that be can revert to the prior version here:&lt;br/&gt;
&lt;a href=&quot;http://clojure.org/page/diff/patches/270799794&quot;&gt;http://clojure.org/page/diff/patches/270799794&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28436" author="alexmiller" created="Thu, 10 May 2012 20:40:32 -0500"  >&lt;p&gt;I also changed the link on &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt; per the other comment.&lt;/p&gt;</comment>
                    <comment id="28437" author="jafingerhut" created="Thu, 10 May 2012 20:49:44 -0500"  >&lt;p&gt;Between the two of us, Alex, we have just enough permissions to make the change to clojure.org and close the ticket &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;   Thanks!&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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-964] test-clojure/rt.clj has undeclared dependency on clojure.set</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-964</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In test-clojure/rt.clj, the test last-var-wins-for-core evaluates #&apos;clojure.set/subset?.  This fails unless clojure.set has been loaded.  In the normal run of the test suite, this dependency is satisfied by test-clojure/core-set being loaded first.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15311">CLJ-964</key>
            <summary>test-clojure/rt.clj has undeclared dependency on clojure.set</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="dmiller">David Miller</reporter>
                        <labels>
                        <label>test</label>
                    </labels>
                <created>Sat, 31 Mar 2012 13:40:16 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28066" author="jafingerhut" created="Sat, 31 Mar 2012 20:47:35 -0500"  >&lt;p&gt;clj-964-add-require-of-clojure-set-patch1.txt dated March 31, 2012 applies cleanly as of latest master.  It simply adds a require of clojure.set to test_clojure/rt.clj.  I verified that if that test was the only one, it does fail without the require, and passes with it.  I also verified that every other test file succeeds on its own without any further changes.&lt;/p&gt;</comment>
                    <comment id="29150" author="aaron" created="Tue, 14 Aug 2012 20:30:55 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11028" name="clj-964-add-require-of-clojure-set-patch1.txt" size="679" author="jafingerhut" created="Sat, 31 Mar 2012 20:47:35 -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-963] Support pretty printing namespace declarations under code-dispatch</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-963</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently when you print code with an (ns ) declaration in it, the ns declaration comes out kind of messy. This patch makes that beautiful. &lt;/p&gt;</description>
                <environment>all</environment>
            <key id="15307">CLJ-963</key>
            <summary>Support pretty printing namespace declarations under code-dispatch</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="tomfaulhaber">Tom Faulhaber</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Thu, 29 Mar 2012 20:38:10 -0500</created>
                <updated>Sat, 1 Sep 2012 08:37:48 -0500</updated>
                    <resolved>Sat, 1 Sep 2012 08:37:48 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29260" author="stuart.sierra" created="Fri, 24 Aug 2012 08:30:19 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;

&lt;p&gt;It&apos;s not perfect, but an improvement.&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; (with-pprint-dispatch code-dispatch (pprint &apos;(ns com.some-example.my-app (:require clojure.string [clojure.set :as set] [clojure.java.io :refer (file reader)]))))
(ns
  com.some-example.my-app
  (:require
    clojure.string
    [clojure.set :as set]
    [clojure.java.io :refer (file reader)]))
nil&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; (with-pprint-dispatch code-dispatch (pprint &apos;(ns com.some-example.my-app (:require clojure.string [clojure.set :as set] [clojure.java.io :refer (file reader)]))))
(ns com.some-example.my-app
  (:require clojure.string [clojure.set :as set]
            [clojure.java.io :refer (file reader)]))
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11026" name="pprint-ns-patch.diff" size="9569" author="tomfaulhaber" created="Thu, 29 Mar 2012 20:38:11 -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>
                                                                                    <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-962] Vectors returned by subvec allow access at negative indices</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-962</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Google group thread: &lt;a href=&quot;https://mail.google.com/mail/?shva=1#label/clojure/1365e058eaf0d5fa&quot;&gt;https://mail.google.com/mail/?shva=1#label/clojure/1365e058eaf0d5fa&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vectors returned by subvec correctly disallow access to elements after their end, but not before their beginning.&lt;/p&gt;

&lt;p&gt;Clojure 1.3.0&lt;br/&gt;
user=&amp;gt; (def v1 (vec (range 100)))&lt;br/&gt;
#&apos;user/v1&lt;br/&gt;
user=&amp;gt; (def v2 (subvec v1 50 52))&lt;br/&gt;
#&apos;user/v2&lt;br/&gt;
user=&amp;gt; (v2 3)&lt;br/&gt;
IndexOutOfBoundsException   clojure.lang.APersistentVector$SubVector.nth (APersistentVector.java:526)&lt;br/&gt;
user=&amp;gt; (v2 -48)&lt;br/&gt;
2&lt;/p&gt;</description>
                <environment></environment>
            <key id="15304">CLJ-962</key>
            <summary>Vectors returned by subvec allow access at negative indices</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>Thu, 29 Mar 2012 09:55:00 -0500</created>
                <updated>Fri, 18 May 2012 10:03:07 -0500</updated>
                    <resolved>Fri, 18 May 2012 10:03:07 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28044" author="jafingerhut" created="Thu, 29 Mar 2012 10:12:53 -0500"  >&lt;p&gt;One-line simple fix.  clj-962-subvec-nth-throws-on-negative-index-patch1.txt dated March 29, 2012 applies, builds, and tests cleanly on latest master.  Includes a few new tests that exhibit the problem.  One author has signed CA.&lt;/p&gt;</comment>
                    <comment id="28192" author="alan@thinkrelevance.com" created="Fri, 20 Apr 2012 13:52:50 -0500"  >&lt;p&gt;I checked this out and it looks good to me, thank you.&lt;/p&gt;</comment>
                    <comment id="28432" author="jafingerhut" created="Thu, 10 May 2012 18:29:43 -0500"  >&lt;p&gt;clj-962-subvec-nth-throws-on-negative-index-patch2.txt dated May 10, 2012 is identical to previous patch clj-962-subvec-nth-throws-on-negative-index-patch1.txt dated Mar 29, 2012, except previous one failed to apply cleanly to latest master because of some lines of context changing in the source code.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11189" name="clj-962-subvec-nth-throws-on-negative-index-patch2.txt" size="1561" author="jafingerhut" created="Thu, 10 May 2012 18:29:43 -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-961] with-redefs loses a Var&apos;s root binding if the Var is thread-bound</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-961</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When a Var has an in-thread binding and I use with-redefs to temporarily alter its root binding, the value restored to the root binding after with-redefs is finished will not be the original root value, but the thread-local one. The problem is using deref instead of something like clojure.lang.Var&apos;s .getRawRoot to backup the original root values in with-derefs-fn.&lt;/p&gt;

&lt;p&gt;I have never used with-redefs and it is very unlikely that one would use it while the Vars in question are thread-bound. However, when reading the function&apos;s definition in Joy of Clojure and later in core.clj, I did not believe this behaviour was intended.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15303">CLJ-961</key>
            <summary>with-redefs loses a Var&apos;s root binding if the Var is thread-bound</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="richhickey">Rich Hickey</assignee>
                                <reporter username="jirkamarsik">Ji&#345;&#237; Mar&#353;&#237;k</reporter>
                        <labels>
                    </labels>
                <created>Wed, 28 Mar 2012 11:05:29 -0500</created>
                <updated>Fri, 20 Jul 2012 16:44:41 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:44:41 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28970" author="aaron" created="Tue, 10 Jul 2012 18:53:57 -0500"  >&lt;p&gt;I paired with Gary on this and tested the patch on my machine after it was uploaded.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11375" name="0001-with-redefs-saves-root-binding-instead-of-thread-loc.patch" size="1507" author="gfredericks" created="Tue, 10 Jul 2012 18:47:20 -0500" />
                    <attachment id="11020" name="with_redefs_bug.clj" size="100" author="jirkamarsik" created="Wed, 28 Mar 2012 11:05: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-960] Capture :column metadata (needed for ClojureScript source maps)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-960</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve begun working on implementing SourceMaps for ClojureScript. For an overview of SourceMaps, see: &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/&quot;&gt;http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/&lt;/a&gt; For discussion of the feature in ClojureScript, see: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/zgmXO2iM1JQ/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/zgmXO2iM1JQ/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to produce accurate source maps, I need column information in addition to line information from the Clojure reader.&lt;/p&gt;

&lt;p&gt;I&apos;ve made the necessary enhancement to LispReader, etc. but have some cleanup and testing left to do. I&apos;d also like a sanity check from the core team before attaching a formal patch. You can find my work in progress here: &lt;a href=&quot;https://github.com/brandonbloom/clojure/compare/columns&quot;&gt;https://github.com/brandonbloom/clojure/compare/columns&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15297">CLJ-960</key>
            <summary>Capture :column metadata (needed for ClojureScript source maps)</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="bbloom">Brandon Bloom</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 27 Mar 2012 00:56:10 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="28132" author="dnolen" created="Fri, 13 Apr 2012 08:29:54 -0500"  >&lt;p&gt;You need to attach a patch so this can be assessed. Thanks!&lt;/p&gt;</comment>
                    <comment id="28670" author="bbloom" created="Thu, 31 May 2012 18:09:32 -0500"  >&lt;p&gt;Sorry David! I added a patch a while ago but forgot to add the patch label(s?) as well as leave a comment.&lt;/p&gt;

&lt;p&gt;The patch may be out of date now, but I haven&apos;t checked. Hopefully the prescreening process will pick it up automatically run the tests.&lt;/p&gt;</comment>
                    <comment id="28671" author="jafingerhut" created="Thu, 31 May 2012 18:32:31 -0500"  >&lt;p&gt;Yes, Brandon, your patch has been on the list of prescreened patches since April 15.  It has always applied and built cleanly during that time.  That patch label is nice to have for certain JIRA report filters, but isn&apos;t necessary for the prescreening process to pick it up.&lt;/p&gt;</comment>
                    <comment id="29052" author="jszakmeister" created="Fri, 27 Jul 2012 05:32:07 -0500"  >&lt;p&gt;v2 now applies against the current master (191b05f1).  The original patch seemed to be broken from a whitespace perspective, which was making it difficult to apply--even in a 3-way merge.  The only real conflict was in Compiler.java where a &quot;final int line&quot; was added to CompilerException.  All the tests passed.&lt;/p&gt;</comment>
                    <comment id="29055" author="bbloom" created="Fri, 27 Jul 2012 19:33:52 -0500"  >&lt;p&gt;It looks like the line field was added to CompilerException in commit 89245c68, but that commit doesn&apos;t use it for anything. Maybe a later commit uses it? Also, if we want to keep that field, can we also add a column field for patch v3?&lt;/p&gt;</comment>
                    <comment id="29056" author="dnolen" created="Fri, 27 Jul 2012 19:36:42 -0500"  >&lt;p&gt;This patch is an enhancement. In order for this one to make any movement I believe it will need a design page outlining the problem, what this solves / alternatives.&lt;/p&gt;</comment>
                    <comment id="29268" author="bbloom" created="Sat, 25 Aug 2012 21:38:40 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/display/design/Compiler+tracking+of+columns&quot;&gt;http://dev.clojure.org/display/design/Compiler+tracking+of+columns&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added a design page, but it seems like overkill. This is a straightforward enhancement...&lt;/p&gt;</comment>
                    <comment id="29595" author="richhickey" created="Thu, 4 Oct 2012 08:51:23 -0500"  >&lt;p&gt;I&apos;ve applied the v2 patch (thanks!), but before we close the ticket can we please get a patch comprising some tests?&lt;/p&gt;</comment>
                    <comment id="29690" author="cemerick" created="Fri, 19 Oct 2012 11:45:30 -0500"  >&lt;p&gt;Attached &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-960&quot; title=&quot;Capture :column metadata (needed for ClojureScript source maps)&quot;&gt;&lt;del&gt;CLJ-960&lt;/del&gt;&lt;/a&gt;-tests.diff to verify &lt;tt&gt;:line&lt;/tt&gt; and &lt;tt&gt;:column&lt;/tt&gt; metadata as now provided by &lt;tt&gt;LineNumberingPushbackReader&lt;/tt&gt;.&lt;/p&gt;</comment>
                    <comment id="29698" author="stu" created="Fri, 19 Oct 2012 15:02:41 -0500"  >&lt;p&gt;The tests are a little fragile (exact map comparison) and so will break if the reader ever does more things. In library and app projects I write tests like this using core.match, but that isn&apos;t available as a build dependency here. &lt;/p&gt;

&lt;p&gt;Marking screened anyway.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11579" name="CLJ-960-tests.diff" size="2466" author="cemerick" created="Fri, 19 Oct 2012 11:45:30 -0500" />
                    <attachment id="11050" name="columns-1.patch" size="41013" author="bbloom" created="Sat, 14 Apr 2012 18:43:42 -0500" />
                    <attachment id="11401" name="columns-1-v2.patch" size="40939" author="jszakmeister" created="Fri, 27 Jul 2012 05:32:07 -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-954] TAP Support in clojure.test.tap Needs Updating</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-954</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;testing-vars-str&lt;/tt&gt; function requires one argument, but in the &lt;tt&gt;clojure.test.tap&lt;/tt&gt; namespace it is currently called with zero arguments. This results in a &lt;tt&gt;clojure.lang.ArityException&lt;/tt&gt; when attempting to generate TAP output with &lt;tt&gt;with-tap-out&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;Here are links to the occurrences of this in the latest commit to &lt;tt&gt;clojure.test.tap&lt;/tt&gt;:&lt;/p&gt;

&lt;p&gt; 1. &lt;a href=&quot;https://github.com/clojure/clojure/blob/36642c984cbf52456e45a8af0a96e4b7e7417041/src/clj/clojure/test/tap.clj#L81&quot;&gt;https://github.com/clojure/clojure/blob/36642c984cbf52456e45a8af0a96e4b7e7417041/src/clj/clojure/test/tap.clj#L81&lt;/a&gt;&lt;br/&gt;
 2. &lt;a href=&quot;https://github.com/clojure/clojure/blob/36642c984cbf52456e45a8af0a96e4b7e7417041/src/clj/clojure/test/tap.clj#L92&quot;&gt;https://github.com/clojure/clojure/blob/36642c984cbf52456e45a8af0a96e4b7e7417041/src/clj/clojure/test/tap.clj#L92&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After fixing this particular issue in my local copy of 1.4.0-SNAPSHOT, there appear to be other problems with this code as well (e.g., not producing correct output for failing tests). Since this code appears to be unmaintained and untested, perhaps it should live outside the main Clojure repo?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15283">CLJ-954</key>
            <summary>TAP Support in clojure.test.tap Needs Updating</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="semperos">Daniel Gregoire</reporter>
                        <labels>
                    </labels>
                <created>Thu, 15 Mar 2012 22:39:54 -0500</created>
                <updated>Fri, 18 May 2012 20:36:58 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:36:58 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28151" author="jszakmeister" created="Sun, 15 Apr 2012 18:45:19 -0500"  >&lt;p&gt;This fixes all the known issues with the tap test runner.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11054" name="fix-tap-test-runner.diff" size="5988" author="jszakmeister" created="Sun, 15 Apr 2012 18:45: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-953] drop-while doc string wrong, nil instead of logical false</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-953</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;&quot;Returns a lazy sequence of the items in coll starting from the first
-  item &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; which (pred item) returns nil.&quot;
+  item &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; which (pred item) returns logical &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;.&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15279">CLJ-953</key>
            <summary>drop-while doc string wrong, nil instead of logical false</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="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="spoon16">Eric Schoonover</reporter>
                        <labels>
                        <label>documentation</label>
                        <label>patch,</label>
                    </labels>
                <created>Thu, 15 Mar 2012 16:50:50 -0500</created>
                <updated>Fri, 30 Mar 2012 09:16:31 -0500</updated>
                    <resolved>Fri, 30 Mar 2012 09:16:31 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10992" name="take-while_doc_string_CLJ-953.diff" size="732" author="spoon16" created="Thu, 15 Mar 2012 16:55:04 -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-952] bigdec does not properly convert a clojure.lang.BigInt</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-952</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;bigdec handles java.math.BigInteger when converting to java.math.BigDecimal, but it does not handle clojure.lang.BigInt.  Instead it treats a clojure.lang.BigInt as a Number, by casting it to long.  This causes the following error:&lt;/p&gt;

&lt;p&gt;Clojure 1.4.0-beta3&lt;br/&gt;
user=&amp;gt; (bigdec (inc (bigint Long/MAX_VALUE)))&lt;br/&gt;
IllegalArgumentException Value out of range for long: 9223372036854775808  clojure.lang.RT.longCast (RT.java:1123)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15274">CLJ-952</key>
            <summary>bigdec does not properly convert a clojure.lang.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="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>
                    </labels>
                <created>Mon, 12 Mar 2012 14:21:41 -0500</created>
                <updated>Fri, 18 May 2012 12:32:12 -0500</updated>
                    <resolved>Fri, 18 May 2012 12:32:12 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27974" author="jafingerhut" created="Wed, 21 Mar 2012 10:55:30 -0500"  >&lt;p&gt;Add a case to bigdec to handle BigInts.  Also eliminate a reflection warning in the ratio case while we are in there.  Paul&apos;s failing case has been added to tests, fails before the fix, and passes after.  Attempted to make it as run-time efficient as possible by creating a new BigInt/toBigDecimal, patterned after the existing BigInt/toBigInteger.&lt;/p&gt;</comment>
                    <comment id="27975" author="pjstadig" created="Wed, 21 Mar 2012 11:51:50 -0500"  >&lt;p&gt;I was originally thinking of something like &lt;tt&gt;(BigDecimal. (.toBigInteger ^clojure.lang.BigInt x))&lt;/tt&gt;.  Adding a &lt;tt&gt;toBigDecimal&lt;/tt&gt; method to &lt;tt&gt;clojure.lang.BigInt&lt;/tt&gt; saves some object allocations and such.  Probably more of a micro optimization, but it works.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Clojure 1.4.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (bigdec (inc (bigint Long/MAX_VALUE)))&lt;br/&gt;
9223372036854775808M&lt;/p&gt;

&lt;p&gt;Thanks, Andy!&lt;/p&gt;

&lt;p&gt;+1&lt;/p&gt;</comment>
                    <comment id="28190" author="alan@thinkrelevance.com" created="Fri, 20 Apr 2012 13:35:40 -0500"  >&lt;p&gt;Looks good to me, thanks.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10999" name="clj-952-make-bigdec-work-on-bigints-patch1.txt" size="2145" author="jafingerhut" created="Wed, 21 Mar 2012 10:55:30 -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-948] It would be very useful to be able to annotate the constructors of classes created with gen-class</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-948</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;gen-class currently provides a way to annotate methods, but not constructors.&lt;/p&gt;

&lt;p&gt;when interoperating with java code that uses google juice heavily the ability to annotate constructors is required.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15266">CLJ-948</key>
            <summary>It would be very useful to be able to annotate the constructors of classes created with gen-class</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="chouser@n01se.net">Chouser</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                    </labels>
                <created>Tue, 6 Mar 2012 07:59:13 -0600</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27921" author="jafingerhut" created="Fri, 9 Mar 2012 09:15:37 -0600"  >&lt;p&gt;clj-948-annotate-gen-class-constructors-patch2.txt same as Kevin&apos;s &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-948&quot; title=&quot;It would be very useful to be able to annotate the constructors of classes created with gen-class&quot;&gt;&lt;del&gt;CLJ-948&lt;/del&gt;&lt;/a&gt;.patch, but with slight update so it applies cleanly to latest master as of March 9, 2012.  ant builds and tests with no errors or warnings.  One author Kevin Downey has signed CA.&lt;/p&gt;</comment>
                    <comment id="27924" author="hiredman" created="Fri, 9 Mar 2012 09:27:22 -0600"  >&lt;p&gt;&lt;a href=&quot;http://www.s2ki.com/s2000/uploads/gallery/1288955707/gallery_99130_32179_14062581294cd627112ab1f.gif&quot;&gt;http://www.s2ki.com/s2000/uploads/gallery/1288955707/gallery_99130_32179_14062581294cd627112ab1f.gif&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28017" author="jafingerhut" created="Mon, 26 Mar 2012 17:52:03 -0500"  >&lt;p&gt;clj-948-annotate-gen-class-constructors-patch3.txt on Mar 26, 2012 is no different from previous patches, except that it applies cleanly to latest master as of that date.  One author Kevin Downey has signed a CA.  Kevin, you don&apos;t need to thank me again.  The last time gave me eye damage (only joking).&lt;/p&gt;</comment>
                    <comment id="29472" author="chouser@n01se.net" created="Tue, 18 Sep 2012 00:40:35 -0500"  >&lt;p&gt;Patch is small and is a nice improvement.  Tests look good and pass.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11013" name="clj-948-annotate-gen-class-constructors-patch3.txt" size="3673" author="jafingerhut" created="Mon, 26 Mar 2012 17:52:03 -0500" />
                    <attachment id="10980" name="CLJ-948.patch" size="3656" author="hiredman" created="Tue, 6 Mar 2012 08:03:35 -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-943] When load-lib fails, a namespace is still created</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-943</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When requiring a namespace that doesn&apos;t compile, a namespace is still created. The attached patch removes the namespace on failure if the namespace wasn&apos;t already present on entry to load-lib. See the test case in the patch for repro instructions.&lt;/p&gt;

&lt;p&gt;This is obviously a subset of having atomic loads. Would a step further in this direction, e.g. using a swapable state object within clojure.lang.Namespace be of interest?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15255">CLJ-943</key>
            <summary>When load-lib fails, a namespace is still created</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="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Thu, 1 Mar 2012 19:30:47 -0600</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28755" author="stu" created="Fri, 8 Jun 2012 15:17:56 -0500"  >&lt;p&gt;Why catch Exception, not Throwable?&lt;/p&gt;</comment>
                    <comment id="28756" author="stu" created="Fri, 8 Jun 2012 15:23:33 -0500"  >&lt;p&gt;This patch accomplishes its purpose, although (in the absence of fully atomic load) I would imagine it creates a race condition if one thread tried to load a broken namespace while another thread tried simply to create a namespace.&lt;/p&gt;

&lt;p&gt;Marked screened anyway...&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10977" name="0001-Remove-namespace-if-load-lib-fails-and-namespace-did.patch" size="2899" author="hugoduncan" created="Thu, 1 Mar 2012 19:30:47 -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-942] Calls to instance methods through the Reflector double unwrap exceptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-942</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When calling an instance method with one or more arguments, if an exception is thrown that has a cause, then that exception is wrapped in an InvocationTargetException.  The Reflector tries to unwrap that, but it also unwraps the exception that is thrown by the method being called reflectively.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15254">CLJ-942</key>
            <summary>Calls to instance methods through the Reflector double unwrap 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="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>
                    </labels>
                <created>Thu, 1 Mar 2012 17:31:05 -0600</created>
                <updated>Fri, 9 Mar 2012 13:46:03 -0600</updated>
                    <resolved>Fri, 9 Mar 2012 13:46:03 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27904" author="stu" created="Tue, 6 Mar 2012 20:58:38 -0600"  >&lt;p&gt;The main purpose of patch looks sound. The test cleanup stuff also looks sound, and is low risk as it only changes the build phase and subtracts a file that we should not be packaging from the release jar.&lt;/p&gt;

&lt;p&gt;Thanks Paul.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10976" name="reflection-fix.diff" size="7208" author="pjstadig" created="Thu, 1 Mar 2012 17:31:05 -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-940] Passing a non-sequence to refer :only results in uninformative exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-940</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Compiling the following code results in a &lt;tt&gt;Don&apos;t know how to create ISeq from: clojure.lang.Symbol&lt;/tt&gt; exception&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;code&lt;/tt&gt;&lt;br/&gt;
(ns clj14.myns&lt;br/&gt;
  (:use&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.core :only seq&amp;#93;&lt;/span&gt;))&lt;br/&gt;
&lt;tt&gt;code&lt;/tt&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15246">CLJ-940</key>
            <summary>Passing a non-sequence to refer :only results in uninformative 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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Fri, 24 Feb 2012 12:20:40 -0600</created>
                <updated>Sat, 1 Sep 2012 08:37:48 -0500</updated>
                    <resolved>Sat, 1 Sep 2012 08:37:48 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27922" author="jafingerhut" created="Fri, 9 Mar 2012 09:22:18 -0600"  >&lt;p&gt;Hugo, your patch doesn&apos;t apply cleanly to latest master due to some changed lines of context around it that are from before Nov 2011, which confuses me given that your patch was created recently.  I could mechanically update it, but if you could take a look and create an updated patch yourself it would be safer.&lt;/p&gt;</comment>
                    <comment id="28288" author="jafingerhut" created="Thu, 26 Apr 2012 19:36:12 -0500"  >&lt;p&gt;Patch clj-940-add-exception-for-non-sequence-in-refer-only-patch.txt dated Apr 26 2012 is same as Hugo Duncan&apos;s, except it applies cleanly to latest master as of today.&lt;/p&gt;</comment>
                    <comment id="29210" author="stuart.sierra" created="Fri, 17 Aug 2012 09:14:49 -0500"  >&lt;p&gt;Previous patch does not accurately reflect new &lt;tt&gt;:refer&lt;/tt&gt; syntax in &lt;tt&gt;ns&lt;/tt&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;(:require [... :refer ...])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I offer a new patch, 0003-&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;-check-for-sequential.patch, as an alternative.&lt;/p&gt;

&lt;p&gt;This patch also checks for the more specific clojure.lang.Sequential instead of IPersistentCollection (which includes sets and maps).&lt;/p&gt;

&lt;p&gt;If I had my druthers, I&apos;d check for IPersistentList, but I can&apos;t face the screaming that would result.&lt;/p&gt;

&lt;p&gt;Neither patch provides file/line information in the error, but there isn&apos;t much affordance for that in core.clj right now.&lt;/p&gt;</comment>
                    <comment id="29239" author="aaron" created="Tue, 21 Aug 2012 10:57:07 -0500"  >&lt;p&gt;Applies cleanly against d4170e65d001c8c2976f1bd7159484056b9a9d6d. This looks good to me. We should at some point talk more about the implications of checking IPersistenList, but I think there is enough value here to push it forward.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10959" name="0001-add-exception-for-non-sequence-in-refer-only.diff" size="939" author="hugoduncan" created="Fri, 24 Feb 2012 12:20:40 -0600" />
                    <attachment id="11440" name="0003-CLJ-940-check-for-sequential.patch" size="1064" author="stuart.sierra" created="Fri, 17 Aug 2012 09:14:49 -0500" />
                    <attachment id="11114" name="clj-940-add-exception-for-non-sequence-in-refer-only-patch.txt" size="937" author="jafingerhut" created="Thu, 26 Apr 2012 19:36:12 -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-936] Improve docs about argument destructuring at clojure.org</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-936</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;What:&lt;br/&gt;
Make the description of argument destructuring more visible at &lt;a href=&quot;http://clojure.org/special_forms&quot;&gt;http://clojure.org/special_forms&lt;/a&gt;, namely:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;add a heading such as &quot;&amp;lt;h4&amp;gt;Binding Forms (Argument Destructuring)&amp;lt;/h4&amp;gt;&quot; to the section describing it&lt;/li&gt;
	&lt;li&gt;make all occurences of &quot;binding-form&quot; a link to that heading, especially under the let and fn headings&lt;/li&gt;
	&lt;li&gt;for (fn ..) add a new second paragraph like &quot;Regarding binding forms, also known as argument destructuring, &amp;lt;a href=#thea-new-heading&amp;gt;read more in the binding forms section&amp;lt;/a&amp;gt; under the let special form.&quot;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Why:&lt;br/&gt;
It was always surprisingly difficult for me to google out the explanation of destructuring in Clojure and only today have I discovered that it is described pretty well under the let special form. Thus it should be made more visible to the readers (and preferably also search engines). (Even though Google has returned the page as one of the first matches, I had problems seeing it there - partly due to usually mistyping destructuring e.g. as deconstruction).&lt;/p&gt;

&lt;p&gt;Thanks a lot!&lt;/p&gt;

&lt;p&gt;PS: I haven&apos;t found a better way to report this, such as a commenting capability on the page itself.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15238">CLJ-936</key>
            <summary>Improve docs about argument destructuring at clojure.org</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="jakubholynet">Jakub Holy</reporter>
                        <labels>
                        <label>documentation</label>
                        <label>web</label>
                    </labels>
                <created>Tue, 21 Feb 2012 15:13:26 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Tue, 27 Nov 2012 17:28:12 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27936" author="jafingerhut" created="Mon, 12 Mar 2012 18:03:25 -0500"  >&lt;p&gt;Jakub, I don&apos;t think I have authorization to edit those web pages in the way you suggest.  I did want to comment that the most recent version of the Clojure cheatsheet at &lt;a href=&quot;http://clojure.org/cheatsheet&quot;&gt;http://clojure.org/cheatsheet&lt;/a&gt; now has a link called &quot;examples&quot; in the &quot;Special Forms&quot; section that links to the &apos;let&apos; section of the special forms documentation page.&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="10005">Accepted</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-934] disj! throws exception when attempting to remove multiple items in one call</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-934</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;disj! fails whenever called with multiple items to remove:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (-&amp;gt; #{5 10 15 20} transient (disj! 10 15) persistent!)&lt;br/&gt;
ClassCastException clojure.lang.PersistentHashSet$TransientHashSet cannot be cast to clojure.lang.IPersistentSet  clojure.core/disj (core.clj:1419)&lt;/p&gt;

&lt;p&gt;It is a simple one line fix to disj! Clojure source code to correct this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15236">CLJ-934</key>
            <summary>disj! throws exception when attempting to remove multiple items in one call</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>Tue, 21 Feb 2012 02:10:48 -0600</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -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>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27919" author="jafingerhut" created="Fri, 9 Mar 2012 09:02:01 -0600"  >&lt;p&gt;clj-934-transient-disj-patch2.txt fixes a problem with my previous one where it had a warning during testing because of a poorly named test that conflicted with a name in clojure.core.  This one is clean.&lt;/p&gt;</comment>
                    <comment id="28744" author="stu" created="Fri, 8 Jun 2012 10:37:20 -0500"  >&lt;p&gt;Patch 3 is same as patch 2, but nonreflective invocation.&lt;/p&gt;</comment>
                    <comment id="28745" author="jafingerhut" created="Fri, 8 Jun 2012 10:42:34 -0500"  >&lt;p&gt;Removed older patch in favor of Stuart&apos;s improved one clj-934-transient-disj-patch-3.txt dated June 8, 2012.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11300" name="clj-934-transient-disj-patch-3.txt" size="2313" author="stu" created="Fri, 8 Jun 2012 10:37:20 -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-933] Compiler warning on clojure.test-clojure.require-scratch</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-933</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;During Clojure build:&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] Testing clojure.test-clojure.java-interop
    [java] WARNING: with-bindings already refers to: #&apos;clojure.core/with-bindings in namespace: clojure.test-clojure.require-scratch, being replaced by: #&apos;clojure.main/with-bindings&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15234">CLJ-933</key>
            <summary>Compiler warning on clojure.test-clojure.require-scratch</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Mon, 20 Feb 2012 09:07:47 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:05 -0600</updated>
                    <resolved>Mon, 20 Feb 2012 17:18:44 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27775" author="stuart.sierra" created="Mon, 20 Feb 2012 09:33:24 -0600"  >&lt;p&gt;Fixed in patch, which uses a different namespace for the test.&lt;/p&gt;</comment>
                    <comment id="27783" author="stuart.sierra" created="Mon, 20 Feb 2012 17:18:44 -0600"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10930" name="CLJ-933-0001.patch" size="1075" author="stuart.sierra" created="Mon, 20 Feb 2012 09:33:24 -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-932] contains? should throw exception on non-keyed collections</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-932</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;contains?&lt;/tt&gt; function, given a collection which is not an associative (Map, Set, String, array), returns false instead of throwing an exception.&lt;/p&gt;

&lt;p&gt;This is a subject of confusion when people call &lt;tt&gt;contains?&lt;/tt&gt; on sequential collections like lists, and on associative collections which do not implement the &lt;tt&gt;Associative&lt;/tt&gt; interface.&lt;/p&gt;

&lt;p&gt;Other predicates, such as &lt;tt&gt;even?&lt;/tt&gt;, throw an exception when passed arguments of an invalid type.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15229">CLJ-932</key>
            <summary>contains? should throw exception on non-keyed collections</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 17 Feb 2012 15:19:20 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27759" author="stuart.sierra" created="Fri, 17 Feb 2012 15:30:57 -0600"  >&lt;p&gt;Patch adds fix, adds some tests, and removes tests reflecting the old behavior.&lt;/p&gt;</comment>
                    <comment id="29178" author="aaron" created="Wed, 15 Aug 2012 12:31:03 -0500"  >&lt;p&gt;This seems to be working properly, but what about vectors?&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;(contains? [1 2 3] 3)
;-&amp;gt; false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29179" author="jafingerhut" created="Wed, 15 Aug 2012 12:40:46 -0500"  >&lt;p&gt;The doc string for contains? covers the vector and Java array case explicitly.  I&apos;m not saying that this behavior shouldn&apos;t change, but at least it is well documented what it currently does in these cases.&lt;/p&gt;</comment>
                    <comment id="29182" author="aaron" created="Wed, 15 Aug 2012 14:03:53 -0500"  >&lt;p&gt;Agreed. I just want to make sure that we are still ok with this functionality given that things are changing. Are there others (Stuart) that want to chime in here and make the intentions clear? If this is good then I would consider this screened and ready.&lt;/p&gt;</comment>
                    <comment id="29185" author="stuart.sierra" created="Wed, 15 Aug 2012 14:40:02 -0500"  >&lt;p&gt;Vector is Associative, so supporting &lt;tt&gt;contains?&lt;/tt&gt; is valid even if it does not do what people might expect:&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; (contains? [:a :b :c] 2)
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
user=&amp;gt; (contains? [:a :b :c] 7)
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All I&apos;m trying to change here is have &lt;tt&gt;contains?&lt;/tt&gt; throw an exception if the argument is &lt;b&gt;not&lt;/b&gt; Associative. The current behavior (returning false) was hiding a bug in my code.&lt;/p&gt;

&lt;p&gt;I do not consider this a breaking change. I believe the docstring of &lt;tt&gt;contains?&lt;/tt&gt; leaves room for this interpretation, but Rich will have the final say.&lt;/p&gt;</comment>
                    <comment id="29187" author="aaron" created="Wed, 15 Aug 2012 14:42:30 -0500"  >&lt;p&gt;Perfect. I just wanted to make sure that this was intended.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10921" name="CLJ-932-0001.patch" size="1809" author="stuart.sierra" created="Fri, 17 Feb 2012 15:30:57 -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-931] Syntactically broken clojure.test/are tests succeed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-931</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;While clojure.test/are is a very useful macro, it has one major flaw.  If the assertion is syntactically incorrect, the test succeeds.  Take this testcase:&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 broken-test
  (are [a b c] (= a b c)
       1 1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;See the error?  The are form takes three values, but I have provided only two.  The test simply passes.&lt;/p&gt;

&lt;p&gt;Latest patch checks the number of arguments to &lt;tt&gt;are&lt;/tt&gt; and throws an exception if they don&apos;t match.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15225">CLJ-931</key>
            <summary>Syntactically broken clojure.test/are tests succeed</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="tsdh">Tassilo Horn</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 Feb 2012 10:40:15 -0600</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27726" author="jafingerhut" created="Thu, 16 Feb 2012 11:36:51 -0600"  >&lt;p&gt;Is this the same issue as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-806&quot; title=&quot;clojure.test/are does not fail with insufficient arguments&quot;&gt;&lt;del&gt;CLJ-806&lt;/del&gt;&lt;/a&gt;?  If so, it might be nice to close one with a comment that it is a duplicate of the other.  Given &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-806&quot; title=&quot;clojure.test/are does not fail with insufficient arguments&quot;&gt;&lt;del&gt;CLJ-806&lt;/del&gt;&lt;/a&gt; has no patch, and this one does, perhaps preferable to close &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-806&quot; title=&quot;clojure.test/are does not fail with insufficient arguments&quot;&gt;&lt;del&gt;CLJ-806&lt;/del&gt;&lt;/a&gt;?&lt;/p&gt;</comment>
                    <comment id="27728" author="tsdh" created="Thu, 16 Feb 2012 11:46:08 -0600"  >&lt;p&gt;John, you are right.  I didn&apos;t find it searching for &quot;test are&quot; earlier today; now I do.&lt;/p&gt;

&lt;p&gt;I did as you&apos;ve suggested: closed &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-806&quot; title=&quot;clojure.test/are does not fail with insufficient arguments&quot;&gt;&lt;del&gt;CLJ-806&lt;/del&gt;&lt;/a&gt; in favour of this one.&lt;/p&gt;</comment>
                    <comment id="27733" author="jafingerhut" created="Fri, 17 Feb 2012 02:27:05 -0600"  >&lt;p&gt;I&apos;ve tested this patch by hand, and it seems to work fine, and the code looks correct.  I have tried several ways to add a unit test to verify this fix, but haven&apos;t found the right way to do it, if there is one.&lt;/p&gt;</comment>
                    <comment id="27735" author="tsdh" created="Fri, 17 Feb 2012 02:58:54 -0600"  >&lt;p&gt;I&apos;m working on it... &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="27737" author="tsdh" created="Fri, 17 Feb 2012 04:10:11 -0600"  >&lt;p&gt;This patch obsoletes the former on (I&apos;m gonna delete the old one).  It includes:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;an extended fix that catches also the zero-arg given case&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;a fix for a testcase in test/clojure/test_clojure/java_interop.clj which only passed because of the bug this issue is all about&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;a currently #_-disabled test case for testing `are&apos;.  It is disabled, because it fails when run with &quot;ant test&quot;.  However, it works just fine when run inside some REPL.  I presume that&apos;s because ant runs inside its own JVM instance and thus makes catching exceptions from macroexpand/eval forms impossible?!?&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27738" author="tsdh" created="Fri, 17 Feb 2012 04:36:48 -0600"  >&lt;p&gt;Another minor update.  Now (are [] true) is allowed (but meaningless).  In the previous patch, you got a &quot;divide by zero&quot; in this case.&lt;/p&gt;</comment>
                    <comment id="27925" author="jafingerhut" created="Fri, 9 Mar 2012 09:29:20 -0600"  >&lt;p&gt;Patch 0001-Fix-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-931&quot; title=&quot;Syntactically broken clojure.test/are tests succeed&quot;&gt;&lt;del&gt;CLJ-931&lt;/del&gt;&lt;/a&gt;-Syntactically-broken-clojure.test-are-te.patch applies, builds, and tests cleanly as of March 9, 2012 latest master.  One author Tassilo has signed CA.&lt;/p&gt;</comment>
                    <comment id="27927" author="stuart.sierra" created="Fri, 9 Mar 2012 10:11:34 -0600"  >&lt;p&gt;I can&apos;t make the test work either. The patch looks good. Just remove the broken test instead of leaving it commented out.&lt;/p&gt;</comment>
                    <comment id="27928" author="jafingerhut" created="Fri, 9 Mar 2012 10:24:42 -0600"  >&lt;p&gt;clj-931-error-on-bad-are-syntax-patch2.txt same as previous one, except removes commented out test.  Applies, builds, and tests cleanly to latest master.&lt;/p&gt;</comment>
                    <comment id="27929" author="stuart.sierra" created="Fri, 9 Mar 2012 10:37:21 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10920" name="0001-Fix-CLJ-931-Syntactically-broken-clojure.test-are-te.patch" size="3645" author="tsdh" created="Fri, 17 Feb 2012 04:36:48 -0600" />
                    <attachment id="10989" name="clj-931-error-on-bad-are-syntax-patch2.txt" size="2339" author="jafingerhut" created="Fri, 9 Mar 2012 10:24:42 -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>
                                                                                    <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-928] instant literal for Date and Timestamp should print in UTC</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-928</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The default #inst returns a java.util.Date.  Date is always in UTC, and doesn&apos;t know about time zones, but the implementation of the print method always renders it in the default time zone.  For example,&lt;/p&gt;

&lt;p&gt;user=&amp;gt; #inst &quot;2012Z&quot;&lt;br/&gt;
#inst &quot;2011-12-31T19:00:00.000-05:00&quot;&lt;/p&gt;

&lt;p&gt;RFC3339 says:&lt;/p&gt;

&lt;p&gt;4.3. Unknown Local Offset Convention&lt;/p&gt;

&lt;p&gt;  If the time in UTC is known, but the offset to local time is unknown,&lt;br/&gt;
  this can be represented with an offset of &quot;-00:00&quot;.  This differs&lt;br/&gt;
  semantically from an offset of &quot;Z&quot; or &quot;+00:00&quot;, which imply that UTC&lt;br/&gt;
  is the preferred reference point for the specified time.&lt;/p&gt;

&lt;p&gt;java.sql.Timestamp should also print in UTC since that class doesn&apos;t keep timezone information.  The print-method for Timestamp seems broken.&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (binding &lt;span class=&quot;error&quot;&gt;&amp;#91;*data-readers* {&apos;inst #&apos;clojure.instant/read-instant-timestamp}] (read-string &quot;#inst \&quot;2012Z\&quot;&quot;))&lt;br/&gt;
#inst &quot;2011-12-31T19:000000000000000-05:00&quot;&lt;br/&gt;
&lt;br/&gt;
user=&amp;gt; (binding [&lt;b&gt;data-readers&lt;/b&gt; {&apos;inst #&apos;clojure.instant/read-instant-timestamp}&amp;#93;&lt;/span&gt; (read-string &quot;#inst \&quot;2012-01-01T01:23:45.678+00:00\&quot;&quot;))&lt;br/&gt;
#inst &quot;2011-12-31T20:267800000000000-05:00&quot;&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (java.sql.Timestamp. 0)&lt;br/&gt;
#inst &quot;1969-12-31T19:000000000000000-05:00&quot;&lt;/p&gt;


&lt;p&gt;The implementations of the print-methods for Data, GregorianCalendar and Timestamp do too much string manipulation.  I suggest doing some refactoring.  (Patch coming soon.)&lt;/p&gt;

&lt;p&gt;Also, the documentation needs some updating.  clojure.instant/read-instant-date, etc. mention &lt;b&gt;instant-reader&lt;/b&gt; but I think that mechanism was generalized as &lt;b&gt;data-readers&lt;/b&gt;.&lt;/p&gt;</description>
                <environment>1.4-beta1, Mac OS X 10.7.3, java version &amp;quot;1.6.0_30&amp;quot;</environment>
            <key id="15207">CLJ-928</key>
            <summary>instant literal for Date and Timestamp should print in UTC</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="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>reader</label>
                    </labels>
                <created>Tue, 7 Feb 2012 13:19:34 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Fri, 24 Feb 2012 15:29:11 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27689" author="steveminer@gmail.com" created="Tue, 7 Feb 2012 13:28:29 -0600"  >&lt;p&gt;#inst literals for Date and Timestamp should print in UTC.  Fixed round-tripping problem with Timestamp nanos (and re-enabled test).  Refactored print-methods to avoid some string manipulations, particularly regarding Calendar timezone offsets.  Added tests including those from &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-926&quot; title=&quot;Instant literals do not round trip correctly&quot;&gt;&lt;del&gt;CLJ-926&lt;/del&gt;&lt;/a&gt;, which this patch also fixes.  Fixed doc on read-instant-date, etc.&lt;/p&gt;</comment>
                    <comment id="27691" author="fogus" created="Tue, 7 Feb 2012 15:10:58 -0600"  >&lt;p&gt;Thank you.  I will run this patch through the paces ASAP.&lt;/p&gt;</comment>
                    <comment id="27693" author="cosmin" created="Tue, 7 Feb 2012 19:09:47 -0600"  >&lt;p&gt;&quot;Date is always in UTC, and doesn&apos;t know about time zones&quot;&lt;/p&gt;

&lt;p&gt;Given that pretty much all of the methods on Date return results in the local timezone, I wouldn&apos;t quite say that Date is always in UTC. Granted, most of those methods are deprecated; toString() however isn&apos;t and it also displays the date in the local timezone.&lt;/p&gt;

&lt;p&gt;We can certainly force printing of dates in UTC, by overriding the timezone setting on SimpleDateFormat, and there might be other valid reasons for always forcing UTC representation. Dates not being timezone aware however doesn&apos;t seem like one to me.&lt;/p&gt;</comment>
                    <comment id="27698" author="steveminer@gmail.com" created="Wed, 8 Feb 2012 08:54:11 -0600"  >&lt;p&gt;It&apos;s only a slight exaggeration to say that a java.util.Date is intrinsically a long (milliseconds since &quot;the epoch&quot;).  For Clojure&apos;s purposes, an &quot;instant&quot; is a point in time in a universal sense (not situated in a timezone) so UTC makes sense as the canonical form.  RFC 3339 section 4.3 says to use &quot;-00:00&quot; for the offset when timezone information is unknown.  java.sql.Timestamp is like a Date with an extra field for nanos so it also should use UTC for the canonical form.&lt;/p&gt;

&lt;p&gt;My argument for UTC as the canonical form is that it best matches the desired semantics of a Clojure instant.  I think it&apos;s the most conservative way to go and offers the best approach to interoperability by following RFC 3339.&lt;/p&gt;

&lt;p&gt;java.util.Calendar is by design cognizant of timezones so it arguably makes sense to preserve the timezone information.  Note that comparisons of Calendars take into account the timezone so two Calendar objects might be the same instant in a sense but not be equal because of the timezones.  That might be a bit tricky for Clojure users who want a clean abstraction of &quot;instant&quot; with multiple implementations.  Presumably they know what they are doing if they decide to use read-instant-calendar.  It might be a good idea to be more explicit about this in the documentation.&lt;/p&gt;</comment>
                    <comment id="27781" author="fogus" created="Mon, 20 Feb 2012 15:22:01 -0600"  >&lt;p&gt;Modified priting to conform to the following:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Instant instances are stored in UTC format without offset information.&lt;/li&gt;
	&lt;li&gt;Instant literals with offset information will be parsed and stored with offset applied.&lt;/li&gt;
	&lt;li&gt;Instant literals without offset information will be parsed as UTC format without offset information.&lt;/li&gt;
	&lt;li&gt;Instants will print as time having local offset applied and without offset printed.&lt;/li&gt;
	&lt;li&gt;Instants without offset info will be print-dup&apos;d as UTC format with RFC-3339 default offset information (-00:00)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;    This provides a canonical storage and read format of UTC and a print format relative to the local offset.&lt;/p&gt;</comment>
                    <comment id="27846" author="stuart.sierra" created="Fri, 24 Feb 2012 14:11:18 -0600"  >&lt;p&gt;With Fogus&apos; patch on Feb. 20, instant literals do not round-trip unless &lt;tt&gt;&amp;#42;print-dup&amp;#42;&lt;/tt&gt; is bound true:&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;  (let [i (read-string &lt;span class=&quot;code-quote&quot;&gt;&quot;#inst \&quot;&lt;/span&gt;2012-02-24T14:41-02:00\&quot;&quot;)
              j (read-string (pr-str i))]
          (prn i)
          (prn j)
          (prn (= i j)))
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T11:41:00.000&quot;&lt;/span&gt;
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T06:41:00.000&quot;&lt;/span&gt;
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
nil
user=&amp;gt;(binding [*print-dup* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
        (let [i (read-string &lt;span class=&quot;code-quote&quot;&gt;&quot;#inst \&quot;&lt;/span&gt;2012-02-24T14:41-02:00\&quot;&quot;)
              j (read-string (pr-str i))]
          (prn i)
          (prn j)
          (prn (= i j))))
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T16:41:00.000-00:00&quot;&lt;/span&gt;
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T16:41:00.000-00:00&quot;&lt;/span&gt;
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The docstring of &lt;tt&gt;&amp;#42;print-dup&amp;#42;&lt;/tt&gt; says nothing about print/read values being equal (by Clojure&apos;s definition of =) only that print/read values will be of the same type. &quot;Type&quot; is not a particularly meaningful concept when applied to data literals.&lt;/p&gt;

&lt;p&gt;We (Stuart &amp;amp; Luke) believe that print/read values should &lt;b&gt;always&lt;/b&gt; print in such a way that they can be read back as the same instant.  Printing an instant should either:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;print in local time, with local offset&lt;/li&gt;
	&lt;li&gt;always print in UTC, with zero offset&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Instants should &lt;b&gt;never&lt;/b&gt; print without any time zone offset, as this admits too much confusion.&lt;/p&gt;</comment>
                    <comment id="27848" author="stuart.sierra" created="Fri, 24 Feb 2012 14:46:56 -0600"  >&lt;p&gt;Just spoke with Rich Hickey, who made the following assertions:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Instants should always represent an exact point in time, unambiguously. This representation may include time zone information.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;Our specification for instant literals allows any part on the right to be omitted. Omitting the time zone offset means UTC is assumed. It is not important whether or not the default printer includes the UTC &quot;00:00&quot; offset or omits it.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;If we are printing an instant literal based on a type that does &lt;b&gt;not&lt;/b&gt; contain time zone information (e.g., java.util.Date) then we should &lt;b&gt;not&lt;/b&gt; add time zone information but simply print in UTC.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;If we are printing an instant literal based on a type that &lt;b&gt;can&lt;/b&gt; contain time zone information (e.g., java.util.Calendar) then we &lt;b&gt;may&lt;/b&gt; print with the time zone offset included. This is a nice-to-have feature, not a requirement. It is always permissible to print instants in UTC.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;It is possible that round-trip print/read of an instant &lt;b&gt;may&lt;/b&gt; lose time zone information, depending on the types used, but it this should not change the meaning of the instant in UTC.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27851" author="steveminer@gmail.com" created="Fri, 24 Feb 2012 15:13:29 -0600"  >&lt;p&gt;I believe my original patch satisfies the requirements stated above.  I&apos;m happy to work on this if you want something changed.&lt;/p&gt;</comment>
                    <comment id="27852" author="stuart.sierra" created="Fri, 24 Feb 2012 15:22:53 -0600"  >&lt;p&gt;Rejected Fogus&apos; patch of Feb. 20.&lt;/p&gt;

&lt;p&gt;Screened Steve Miner&apos;s patch of Feb. 7. Ready for Rich.&lt;/p&gt;</comment>
                    <comment id="27853" author="stuart.sierra" created="Fri, 24 Feb 2012 15:29:11 -0600"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10933" name="CLJ-928-instant-literals-for-Date-and-Timestamp-fogus.patch" size="21551" author="fogus" created="Mon, 20 Feb 2012 15:22:01 -0600" />
                    <attachment id="10896" name="CLJ-928-instant-literals-for-Date-and-Timestamp.patch" size="13173" author="steveminer@gmail.com" created="Tue, 7 Feb 2012 13:28:29 -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-927] default tagged literal reader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-927</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;With data reader support, it&apos;s impossible to write a program to read an arbitrary stream of Clojure forms.  For example, the following code will fail with the current 1.4.0-beta1 tagged literal support:&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;#point [0 2]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It might be enough to require that the read side define a reader for &lt;tt&gt;point&lt;/tt&gt;, but what if we do not wish to require that both sides of the conversation know about the &lt;tt&gt;#point&lt;/tt&gt; tag beforehand?  Using the &lt;tt&gt;identity&lt;/tt&gt; function as a default allows the reader to handle the literal form as is even when it doesn&apos;t recognize a tag (or even care to translate it).&lt;/p&gt;

&lt;p&gt;The change from the current behavior is that missing tagged literal parsers are no longer error conditions.&lt;/p&gt;

</description>
                <environment></environment>
            <key id="15206">CLJ-927</key>
            <summary>default tagged literal reader</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="fogus">Fogus</reporter>
                        <labels>
                        <label>clojure</label>
                        <label>reader</label>
                    </labels>
                <created>Mon, 6 Feb 2012 15:45:06 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:26:05 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27708" author="steveminer@gmail.com" created="Sun, 12 Feb 2012 10:30:52 -0600"  >&lt;p&gt;I&apos;d like to preserve the unknown literal tag as well as the value.  That would allow a program to recreate the printed representation.  A map would work as the value. You&apos;d get something like: {:unknown-literal point :value &lt;span class=&quot;error&quot;&gt;&amp;#91;0 2&amp;#93;&lt;/span&gt;}.  If you needed to pass that on to some other process, you could easily write it in the original literal form.  Perhaps the key for literal tag should be namespace qualified to avoid possible confusion with user data.  Another benefit of returning a map for an unknown literal tag is that equality tests still seem reasonable:  (not= #foo &quot;abc&quot; #bar &quot;abc&quot;).&lt;/p&gt;</comment>
                    <comment id="29483" author="steveminer@gmail.com" created="Tue, 18 Sep 2012 11:01:38 -0500"  >&lt;p&gt;It would be convenient if I could handle unknown tags using some sort of catch-all key in &amp;#42;data-readers* (say &apos;default).  The associated function should take two arguments: the tag and the literal value.  If there is no &apos;default key in &amp;#42;data-readers*, then an error would be thrown (same as Clojure 1.4).  &lt;/p&gt;

&lt;p&gt;I think it&apos;s a simple way to allow the programmer to take control without having to add new API or data types.  It&apos;s just one distinguished key (&apos;default, :default something like that) and one additional line of doc.&lt;/p&gt;

&lt;p&gt;I can provide a patch.&lt;/p&gt;</comment>
                    <comment id="29513" author="richhickey" created="Fri, 21 Sep 2012 09:17:03 -0500"  >&lt;p&gt;This needs to be addressed. We should follow the advice given in the &lt;a href=&quot;https://github.com/edn-format/edn&quot;&gt;edn&lt;/a&gt; docs:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;If a reader encounters a tag for which no handler is registered, the implementation can either report an error, call a designated &apos;unknown element&apos; handler, or create a well-known generic representation that contains both the tag and the tagged element, as it sees fit. Note that the non-error strategies allow for readers which are capable of reading any and all edn, in spite of being unaware of the details of any extensions present.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;We can get both of the latter by having a preinstalled default unknown element handler that returns the generic representation. &quot;identity&quot; is out since it loses the tag. Using a map with namespaced keys is somewhat subtle. An TaggedElement record type is also possible.&lt;/p&gt;

&lt;p&gt;Issues are - what happens when more than one library tries to supply a default? If the system supplies one, perhaps it&apos;s best to only allow dynamic rebinding and not static installation. Or error on conflicting default handlers, or first/last one wins (but first/&apos;last&apos; might be difficult to predict).&lt;/p&gt;</comment>
                    <comment id="29672" author="steveminer@gmail.com" created="Wed, 17 Oct 2012 12:49:16 -0500"  >&lt;p&gt;Everyone agrees that identity is not an appropriate default so I changed the Summary field.&lt;/p&gt;</comment>
                    <comment id="29683" author="steveminer@gmail.com" created="Thu, 18 Oct 2012 20:54:29 -0500"  >&lt;p&gt;Minimal patch that adds support for a default data reader in &amp;#42;data-readers*.  If an unknown tag is read, we look up the &apos;default reader in &amp;#42;data-readers and call it with two arguments: the tag and the value.  By default, there is no default reader and you get an exception as in Clojure 1.4.&lt;/p&gt;</comment>
                    <comment id="29684" author="steveminer@gmail.com" created="Thu, 18 Oct 2012 20:57:47 -0500"  >&lt;p&gt;An alternative patch that establishes a default data reader to handle the case of an unknown tag.  The default reader returns a map with metadata to define the :unknown-tag.  This preserves the information for the unknown data literal, but keeps a simple and convenient format.&lt;/p&gt;</comment>
                    <comment id="29685" author="stu" created="Fri, 19 Oct 2012 05:27:54 -0500"  >&lt;p&gt;Steve,&lt;/p&gt;

&lt;p&gt;I am guessing that you consider these two patches alternatives, not cumulative. I am marking as screened the &quot;default-in-data-readers&quot; patch, which allows users to specify a &apos;default handler.&lt;/p&gt;

&lt;p&gt;The other patch &quot;unknown-data-reader&quot;, which specifies a built-in Clojure handler for unknown tags, is &lt;b&gt;not&lt;/b&gt; screened. It specifies a default handler that returns a metadata-annotated map.  If there is to be a default handler, I think it would need to return something disjoint from data, e.g. a tagged interface of some kind (or at least a namespaced name in the map.)&lt;/p&gt;

&lt;p&gt;It would be a great help to have a little discussion along with the patches.&lt;/p&gt;</comment>
                    <comment id="29686" author="steveminer@gmail.com" created="Fri, 19 Oct 2012 08:01:06 -0500"  >&lt;p&gt;Yes, the two patches are separate alternatives.  The &quot;default-in-data-readers&quot; patch just adds the special treatment for the &apos;default key in &amp;#42;data-readers* without providing a system default.  This allows the application programmer to provide a catch-all handler for unknown data literal tags.  Libraries should be discouraged from setting a &apos;default handler.  Conflicts with the &apos;default key in data_readers.clj are handled just like other keys so it would be a bad thing for multiple libraries to try to take over the &apos;default data reader.  Libraries can instead provide implementations and let the application programmer do the actual setting of the &apos;default key.&lt;/p&gt;

&lt;p&gt;The second patch (&quot;unknown-data-reader&quot;) implements &apos;default similarly, but also provides for a &apos;default reader in default-data-readers.  My unknown-data-reader returns a map.  I found it safer and simpler to deal with keywords instead of symbols for unknown tag &amp;#8211; Clojure doesn&apos;t like symbols for unknown packages and you never know what you might get in data literal tags.  After experimenting with with my original idea of having a map with two keys (essentially :tag and :value), I decided that I preferred the single entry map with the key derived from the tag and the value preserved as read.  Adding the metadata to define the :unknown-tag provides enough information for the application programmer to deal with the maps unambiguously.  I think the single entry maps are easier to read.&lt;/p&gt;

&lt;p&gt;The alternative that I did not pursue would be to use a new record type as the default data type.  My second patch could be used as a basis for that approach.  We just need to replace my unknown-data-reader function with one that creates a record (TaggedElement).&lt;/p&gt;</comment>
                    <comment id="29706" author="richhickey" created="Fri, 19 Oct 2012 17:43:54 -0500"  >&lt;p&gt;I don&apos;t like the &apos;default entry, especially if it is usually wrong for a library to set it. &lt;/p&gt;

&lt;p&gt;Having no bindable var default makes editing data_readers.clj an outstanding chore for everyone. &lt;/p&gt;

&lt;p&gt;It is unlikely a single special override in data_readers.clj is suitable for every reading situation, even in the same app.&lt;/p&gt;

&lt;p&gt;If there is a known TaggedElement type, then people need only be able to opt out of that. &lt;br/&gt;
So if there were a &lt;b&gt;default-tagged-reader&lt;/b&gt; function of (tag read-element) that built a TaggedElement (or, alternatively, threw, if people prefer), people could just rebind that in a particular reading context.&lt;/p&gt;

&lt;p&gt;There&apos;s no perfect default, but in most situations getting unknown data is an error. I personally would default to that, and provide a read-tagged-element fn people could bind in when trying to implement read-anything.&lt;/p&gt;</comment>
                    <comment id="29727" author="steveminer@gmail.com" created="Sat, 20 Oct 2012 10:03:35 -0500"  >&lt;p&gt;old patches deleted.  This revised patch introduces a var &amp;#42;default-data-reader-fn* which can be used to handle unknown tags.  By default it is nil and an exception is thrown for the unknown tag as in Clojure 1.4.  If it&apos;s non-nil, the function is called with the tag and value.  I chose the name so that it contained &apos;data-reader&apos;, which makes it search friendly.  I wanted to commit this separately from any attempt to provide a built-in catch-all reader and new record type as that might be more contentious.&lt;/p&gt;</comment>
                    <comment id="29891" author="steveminer@gmail.com" created="Fri, 2 Nov 2012 09:42:10 -0500"  >&lt;p&gt;The patch for &amp;#42;default-data-reader-fn* was committed for Clojure 1.5 beta1.  The programmer can now specify a catch-all reader, which solves the main issue.  However, there is no built-in default reader so unknown tags still cause exceptions to be thrown as in Clojure 1.4.  &lt;/p&gt;

&lt;p&gt;I think this bug can be closed.  Default reader implementations could be provided by a contrib library.  Or someone can open a new bug if you want the language to provide a built-in default reader.&lt;/p&gt;</comment>
                    <comment id="29892" author="bronsa" created="Fri, 2 Nov 2012 13:24:46 -0500"  >&lt;p&gt;what about adding &lt;b&gt;default-tagged-reader-fn&lt;/b&gt; to clojure.main/with-bindings to make it set!able?&lt;/p&gt;</comment>
                    <comment id="29897" author="steveminer@gmail.com" created="Sat, 3 Nov 2012 09:29:54 -0500"  >&lt;p&gt;Good point about making it set!-able.  I filed that issue as a separate bug: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1101&quot; title=&quot;*default-data-reader-fn* should be set!-able in REPL&quot;&gt;CLJ-1101&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="29914" author="stuart.sierra" created="Fri, 9 Nov 2012 08:26:05 -0600"  >&lt;p&gt;Resolved.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11586" name="CLJ-927-default-data-reader-fn-for-unknown-tags.patch" size="5278" author="steveminer@gmail.com" created="Sat, 20 Oct 2012 10:03:35 -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-925] rand-nth throws on empty list</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-925</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;rand-nth throws when given an empty list.&lt;/p&gt;

&lt;p&gt;Solution is to either call seq on parameter, or to supply nil as a not-found parameter in call to nth. Patch fir latter fix included.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15201">CLJ-925</key>
            <summary>rand-nth throws on empty 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="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="wagjo">Jozef Wagner</reporter>
                        <labels>
                    </labels>
                <created>Sun, 5 Feb 2012 07:06:03 -0600</created>
                <updated>Tue, 14 Aug 2012 13:35:28 -0500</updated>
                    <resolved>Tue, 14 Aug 2012 13:35:28 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27986" author="jafingerhut" created="Fri, 23 Mar 2012 02:38:58 -0500"  >&lt;p&gt;Changing Patch attribute to value &quot;Code&quot;, since I&apos;ve been told that is what it ought to be for a ticket with a patch ready for screening.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10891" name="patch.diff" size="685" author="wagjo" created="Sun, 5 Feb 2012 07:06:03 -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-924] Error reporting of invalid digit in unicode character literal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-924</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I ran across the following code when reading unicode character literals in readUnicodeChar(String token, int offset, int length, int base)&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; 
int d = Character.digit(token.charAt(i), base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + (char) d);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 


&lt;p&gt;Casting -1 to a char doesn&apos;t seem to produce anything useful. I&apos;m guessing the appropriate code might look 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; 
int d = Character.digit(token.charAt(i), base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + token.charAt(i));
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 


&lt;p&gt;For comparison, the code in the other readUnicodeCharacter used when reading strings handles this correctly with:&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;int d = Character.digit(ch, base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + (char) ch); 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15200">CLJ-924</key>
            <summary>Error reporting of invalid digit in unicode character literal</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="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                    </labels>
                <created>Sun, 5 Feb 2012 01:06:22 -0600</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27670" author="cosmin" created="Sun, 5 Feb 2012 01:09:04 -0600"  >&lt;p&gt;Attached a patch with the minor code fix.&lt;/p&gt;</comment>
                    <comment id="27849" author="stuart.sierra" created="Fri, 24 Feb 2012 15:00:12 -0600"  >&lt;p&gt;Screened. I can&apos;t demonstrate this code being called by the reader, but it seems to be correct.&lt;/p&gt;</comment>
                    <comment id="27881" author="jafingerhut" created="Mon, 27 Feb 2012 22:08:13 -0600"  >&lt;p&gt;Sorry to disturb things after this has been screened, but clj-924-unicode-invalid-digit-patch2.txt has some added tests that cause the problem to occur, as well as one other similar one nearby in LispReader.java, which is also fixed, in addition to Cosmin&apos;s fix.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10890" name="CLJ-924-unicode-invalid-digit.patch" size="924" author="cosmin" created="Sun, 5 Feb 2012 01:09:04 -0600" />
                    <attachment id="10969" name="clj-924-unicode-invalid-digit-patch2.txt" size="6659" author="jafingerhut" created="Mon, 27 Feb 2012 22:08: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-923] Reading ratios prefixed by + is not working</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-923</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In general Clojure&apos;s number types can be read prefixed with either a +&lt;br/&gt;
or - and this seems to work correctly for reading integers and floats.&lt;br/&gt;
In the case of ratios however things break down when ratios are&lt;br/&gt;
prefixed with a +.&lt;/p&gt;

&lt;p&gt;The ratio pattern in LispReader.java does match on ratios starting&lt;br/&gt;
with both + and - but matchNumber fails on ratios prefixed with +&lt;br/&gt;
because it ends up calling &quot;new BigInteger(m.group(1))&quot; and it turns&lt;br/&gt;
out the constructor for BigInteger has no problems with negative&lt;br/&gt;
numbers but it doesn&apos;t like numbers prefixed by a +.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15159">CLJ-923</key>
            <summary>Reading ratios prefixed by + is not working</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="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                    </labels>
                <created>Fri, 3 Feb 2012 18:06:54 -0600</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:52 -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>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27645" author="cosmin" created="Fri, 3 Feb 2012 18:26:09 -0600"  >&lt;p&gt;added patch with fix and tests&lt;/p&gt;</comment>
                    <comment id="27854" author="hiredman" created="Fri, 24 Feb 2012 16:02:26 -0600"  >&lt;p&gt;changes to the reader tests on master cause 0001-added-tests-for-reading-ratios-and-fixed-reading-of-.patch to no longer apply cleanly&lt;/p&gt;</comment>
                    <comment id="27856" author="jafingerhut" created="Fri, 24 Feb 2012 16:21:55 -0600"  >&lt;p&gt;clj-923-reading-ratios-prefixed-by-plus-patch.txt applies cleanly to latest as of Feb 24, 2012 (2:20 PM PST &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="28000" author="jafingerhut" created="Fri, 23 Mar 2012 19:55:54 -0500"  >&lt;p&gt;clj-923-reading-ratios-prefixed-by-plus-patch2.txt still semantically same as Cosmin&apos;s original patch, except it applies, builds, and tests cleanly on latest master as of Mar 23, 2012.  Context lines around patch must have changed recently.&lt;/p&gt;</comment>
                    <comment id="28002" author="cosmin" created="Fri, 23 Mar 2012 20:07:23 -0500"  >&lt;p&gt;Thanks for updating the patch. I&apos;ve removed the original to make it clear which one we need.&lt;/p&gt;</comment>
                    <comment id="29157" author="aaron" created="Tue, 14 Aug 2012 21:33:29 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11005" name="clj-923-reading-ratios-prefixed-by-plus-patch2.txt" size="1897" author="jafingerhut" created="Fri, 23 Mar 2012 19:55:54 -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-921] Ant 1.8 gives warning about &apos;includeantruntime&apos; when building Clojure</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-921</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;m building Clojure locally with Ant 1.8.2.  I get a warning:&lt;/p&gt;

&lt;p&gt;compile-java:&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;javac&amp;#93;&lt;/span&gt; /Users/miner/cljproj/clojure/build.xml:39: warning: &apos;includeantruntime&apos; was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds&lt;/p&gt;

&lt;p&gt;A good explanation is available here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/questions/5103384/ant-warning-includeantruntime-was-not-set&quot;&gt;http://stackoverflow.com/questions/5103384/ant-warning-includeantruntime-was-not-set&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The simple fix is to add an attribute to the javac task:  includeAntRuntime=&quot;false&quot;.&lt;/p&gt;</description>
                <environment>Mac OS X 10.7, Ant 1.8.2, Java 1.6</environment>
            <key id="15151">CLJ-921</key>
            <summary>Ant 1.8 gives warning about &apos;includeantruntime&apos; when building Clojure</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Mon, 30 Jan 2012 16:48:07 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:11:44 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10794" name="0001-includeAntRuntime.patch" size="657" author="steveminer@gmail.com" created="Mon, 30 Jan 2012 16:48:07 -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="10009">Fixed</customfieldvalue>

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

<item>
            <title>[CLJ-920] Adds support for FreeDesktop&apos;s xdg-open in clojure.java.browse/browse-url.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-920</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This patch allows environments that support FreeDesktop to browse a URL in their default browser. This is important because unless the desktop environment bridges to Java (like Gnome does) the URL will be opened in a Swing window, which is not always desired.&lt;/p&gt;

&lt;p&gt;See: &lt;a href=&quot;https://github.com/clojure/clojure/pull/14&quot;&gt;https://github.com/clojure/clojure/pull/14&lt;/a&gt;&lt;/p&gt;</description>
                <environment>Any environment that supports FreeDesktop, so Linux and BSD mainly.</environment>
            <key id="15150">CLJ-920</key>
            <summary>Adds support for FreeDesktop&apos;s xdg-open in clojure.java.browse/browse-url.</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="jeremyheiler">Jeremy Heiler</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Sat, 28 Jan 2012 10:45:35 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Wed, 29 Feb 2012 13:19:52 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27704" author="jafingerhut" created="Fri, 10 Feb 2012 05:08:51 -0600"  >&lt;p&gt;Is this a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;CLJ-896&lt;/a&gt;?  Can you look at the patch there and see if there is any advantage to the patch for it vs. the one here?  Or perhaps some combination that is an improvement on them both?&lt;/p&gt;</comment>
                    <comment id="27890" author="jafingerhut" created="Wed, 29 Feb 2012 13:19:53 -0600"  >&lt;p&gt;The issue is definitely a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;CLJ-896&lt;/a&gt;.  The proposed patches were different.  &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;CLJ-896&lt;/a&gt; now has an attached patch that is an enhancement of what Jeremy Heiler created.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10793" name="browseurl.patch" size="653" author="jeremyheiler" created="Sat, 28 Jan 2012 10:45:35 -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-917] clojure.core/definterface is not included in the API docs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-917</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Is &lt;tt&gt;definterface&lt;/tt&gt; meant to be a public API?  If yes, then it needs a docstring.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15143">CLJ-917</key>
            <summary>clojure.core/definterface is not included in the API 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="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="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Mon, 23 Jan 2012 07:58:55 -0600</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27618" author="tsdh" created="Wed, 25 Jan 2012 14:28:05 -0600"  >&lt;p&gt;This patch obsoletes the previous one.  The only addition is the insertion of :added metadata which is needed to make the tests pass.&lt;/p&gt;</comment>
                    <comment id="27911" author="tsdh" created="Thu, 8 Mar 2012 03:53:02 -0600"  >&lt;p&gt;Updated patch.&lt;/p&gt;</comment>
                    <comment id="27995" author="stuart.sierra" created="Fri, 23 Mar 2012 09:04:59 -0500"  >&lt;p&gt;Screened, pending question for Rich: &quot;Is definterface meant to be a public API?&quot;&lt;/p&gt;</comment>
                    <comment id="28663" author="tsdh" created="Thu, 31 May 2012 01:45:29 -0500"  >&lt;p&gt;Rebased patch on current master.&lt;/p&gt;</comment>
                    <comment id="29265" author="stuart.sierra" created="Fri, 24 Aug 2012 13:12:24 -0500"  >&lt;p&gt;Screened again. Still applies as of commit 1c8eb16a14ce5daefef1df68d2f6b1f143003140&lt;/p&gt;</comment>
                    <comment id="29688" author="stu" created="Fri, 19 Oct 2012 10:32:40 -0500"  >&lt;p&gt;The &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-971&quot; title=&quot;Jar within a jar throws a runtime error&quot;&gt;CLJ-971&lt;/a&gt; patch I just added is the same as the original with grammar corrections.&lt;/p&gt;</comment>
                    <comment id="29723" author="tsdh" created="Sat, 20 Oct 2012 05:48:29 -0500"  >&lt;p&gt;Patch including Stu&apos;s grammar/typo fixes.&lt;/p&gt;

&lt;p&gt;Sorry, contributors like to show up in the commit history, so I couldn&apos;t resist stealing my patch back from you. &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>
                </comments>
                    <attachments>
                    <attachment id="11585" name="0001-Add-docstring-and-added-metadata-to-definterface.patch" size="1100" author="tsdh" created="Sat, 20 Oct 2012 05:48:29 -0500" />
                    <attachment id="11578" name="CLJ-917-definterface.patch" size="1090" author="stu" created="Fri, 19 Oct 2012 10:32:40 -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-916] into loses metadata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-916</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The into fn loses metadata.&lt;/p&gt;

&lt;p&gt;I&apos;m seeing some team members (myself included) rely on metadata. Metadata has been incredibly useful in some cases, however the silent destruction of metadata by core clojure fns (into, walk, etc) have been a source of increasing complexity and confusion. &lt;/p&gt;

&lt;p&gt;A team member could start relying on a 3rd party library that used &apos;into&apos;. Actually, the into fn could essentially be added to the code base at any time in many ways. Wrt metadata the potential for incidental complexity increases exponentially as more developers and libraries enter the mix. &lt;/p&gt;

&lt;p&gt;One of the reasons Clojure has worked for us so well is because it has greatly reduced incidental complexity.&lt;br/&gt;
IMHO the &apos;into metadata bug&apos; seriously limits the usefulness of metadata and would love to see the into fn fixed in 1.4.&lt;/p&gt;



</description>
                <environment></environment>
            <key id="15134">CLJ-916</key>
            <summary>into loses metadata</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="markswanson">Mark Swanson</reporter>
                        <labels>
                        <label>into</label>
                        <label>metadata</label>
                        <label>walk</label>
                    </labels>
                <created>Sat, 21 Jan 2012 11:58:29 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="27899" author="jafingerhut" created="Thu, 1 Mar 2012 04:42:26 -0600"  >&lt;p&gt;Someone please correct this if it is wrong, but it seems that into loses metadata because it is implemented using transients, and transients lose metadata.  If true, then one way to fix this ticket is to implement metadata for transients.&lt;/p&gt;

&lt;p&gt;Are there any fundamental reasons why it would be difficult to add metadata to transients, as long as the metadata itself was immutable?&lt;/p&gt;</comment>
                    <comment id="27958" author="jafingerhut" created="Fri, 16 Mar 2012 04:57:42 -0500"  >&lt;p&gt;First rough cut of a patch that makes not only into, but also select-keys, clojure.set/project, and clojure.set/rename preserve metadata.  Added tests for these and many other functions.  Still some open questions about other functions not tested in comments.  This patch does not attempt to make transients preserve metadata.&lt;/p&gt;</comment>
                    <comment id="28001" author="jafingerhut" created="Fri, 23 Mar 2012 20:03:25 -0500"  >&lt;p&gt;clj-916-make-into-and-others-preserve-metadata-patch2.txt is semantically same patch and comments as March 16, 2012.  Merely touched up to apply cleanly to latest master as of Mar 23, 2012.&lt;/p&gt;</comment>
                    <comment id="28613" author="abrooks" created="Sat, 26 May 2012 22:58:00 -0500"  >&lt;p&gt;I just ran into this issue myself. Is there anything that I could do to help get this fixed? Test writing? Patch checks? I&apos;m happy to help in any way I can.&lt;/p&gt;</comment>
                    <comment id="28614" author="jafingerhut" created="Sun, 27 May 2012 01:11:15 -0500"  >&lt;p&gt;You could examine the existing patch, including its tests, and see if it would have done what you were hoping it would do.  Add a comment here regarding whether the changes look good to you.  The attached patch is already on my weekly list of prescreened patches, but it is only one among many.&lt;/p&gt;</comment>
                    <comment id="29180" author="fogus" created="Wed, 15 Aug 2012 13:14:46 -0500"  >&lt;p&gt;The code is clean and tests test what they should test.  Regarding the questions in the test file:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;I recommend (royal) we create another ticket for the remaining clojure.set functions and discuss them there.  Once resolved the questions in the metadata.clj test file should be removed.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;remove&lt;/tt&gt; returns a LazySeq, but the intent of the question is clear.  I vote that remove preserve metadata as well, but that should be the topic of yet another ticket.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;One final point. I&apos;d prefer that tickets be addressed in isolation and not contain extra fixes. This is a personal preference, but one that I&apos;d like to take up on the clojure-dev list.&lt;/p&gt;</comment>
                    <comment id="29191" author="jafingerhut" created="Thu, 16 Aug 2012 00:38:41 -0500"  >&lt;p&gt;clj-916-make-into-preserve-metadata-patch1.txt dated Aug 15 2012 only changes the behavior of into so that it preserves metadata.  One or more other tickets will be created for some other functions that currently do not preserve metadata, but perhaps should.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11006" name="clj-916-make-into-and-others-preserve-metadata-patch2.txt" size="7444" author="jafingerhut" created="Fri, 23 Mar 2012 20:03:25 -0500" />
                    <attachment id="11437" name="clj-916-make-into-preserve-metadata-patch1.txt" size="3811" author="jafingerhut" created="Thu, 16 Aug 2012 00:38:41 -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-914] Add support for UUID literals using tagged literal capability.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-914</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using the tagged literal facility added in Clojure 1.4-alpha4, add support for a UUID literal of the form:&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;#uuid &quot;550e8400-e29b-41d4-a716-446655440000&quot;

;=&amp;gt; #&amp;lt;UUID 550e8400-e29b-41d4-a716-446655440000&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The default object built with this literal would be a &lt;tt&gt;java.util.UUID&lt;/tt&gt;.  A print-method for this type would also be required for this enhancement.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15124">CLJ-914</key>
            <summary>Add support for UUID literals using tagged literal capability.</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="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                    </labels>
                <created>Fri, 20 Jan 2012 12:35:00 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:05:10 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27630" author="fogus" created="Fri, 27 Jan 2012 12:02:46 -0600"  >&lt;p&gt;Added updated patch based on fixes to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-871&quot; title=&quot;instant literal&quot;&gt;&lt;del&gt;CLJ-871&lt;/del&gt;&lt;/a&gt;.  This patch should be applied AFTER the patch for the latest patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-871&quot; title=&quot;instant literal&quot;&gt;&lt;del&gt;CLJ-871&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10779" name="CLJ-914-uuid-literals.diff" size="2899" author="fogus" created="Fri, 20 Jan 2012 14:53:54 -0600" />
                    <attachment id="10791" name="CLJ-914-uuid-literals-update.patch" size="3178" author="fogus" created="Fri, 27 Jan 2012 12:02:46 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10013">Test</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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stuart.sierra</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-910] [Patch] Allow for type-hinting the method receiver in memfn</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-910</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The attached patch copies metadata given to the method name symbol of memfn to the method receiver in the expansion.  That way, memfn is able to be used even for type-hinted calls resulting in a big performance win.&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; (time (dotimes [i 1000000] ((memfn intValue) 1)))
Reflection warning, NO_SOURCE_FILE:1 - call to intValue can&apos;t be resolved.
&quot;Elapsed time: 2579.229115 msecs&quot;
nil
user&amp;gt; (time (dotimes [i 1000000] ((memfn ^Number intValue) 1)))
&quot;Elapsed time: 12.015235 msecs&quot;
nil
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15115">CLJ-910</key>
            <summary>[Patch] Allow for type-hinting the method receiver in memfn</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="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>performance</label>
                        <label>reflection</label>
                    </labels>
                <created>Fri, 13 Jan 2012 06:02:28 -0600</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>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27912" author="tsdh" created="Thu, 8 Mar 2012 03:56:20 -0600"  >&lt;p&gt;Updated patch.&lt;/p&gt;</comment>
                    <comment id="29245" author="aaron" created="Tue, 21 Aug 2012 18:06:49 -0500"  >&lt;p&gt;Applies properly against d4170e65d001c8c2976f1bd7159484056b9a9d6d. Things look good to me. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10985" name="0001-Make-memfn-allow-for-type-hinting-the-method-receive.patch" size="1168" author="tsdh" created="Thu, 8 Mar 2012 03:56:20 -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-909] Make LineNumberingPushbackReader&apos;s buffer size configurable</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-909</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In some situations, it&apos;s necessary to configure the buffer size of LineNumberingPushbackReader&apos;s wrapped java.io.LineNumberReader, that gets created in the constructor. A concrete problem case is where you want to avoid doing reads from the underlying Reader whenever possible, so using a buffer size of 1 makes it a bit lazier. I can also imagine cases where you&apos;d want to &lt;b&gt;increase&lt;/b&gt; the buffer from java.io.BufferedReader&apos;s 8192-char default, but I haven&apos;t dealt with that one directly.&lt;/p&gt;

&lt;p&gt;There&apos;s no good way to do this by subclassing LineNumberingPushbackReader, since all the action happens in the constructors: those of java.io.LineNumberReader and the superclass of LineNumberingPushbackReader, which is java.io.PushbackReader. So my current workaround is to copy the entirety of LineNumberingPushbackReader, change the name, and add a constructor. Having LineNumberingPushbackReader support this directly would be great.&lt;/p&gt;

&lt;p&gt;Both java.io.LineNumberReader and java.io.PushbackReader have constructors that accept the buffer size as the second argument, so it seems very reasonable to me to add a similar constructor for LineNumberingPushbackReader.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15111">CLJ-909</key>
            <summary>Make LineNumberingPushbackReader&apos;s buffer size configurable</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="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Wed, 11 Jan 2012 19:16:40 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -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>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27607" author="trptcolin" created="Sun, 22 Jan 2012 18:56:50 -0600"  >&lt;p&gt;This patch still works great.&lt;/p&gt;

&lt;p&gt;Turns out my current workaround to get around the lack of this ability has a problem: LispReader depends on the concrete LineNumberingPushbackReader class to be able to call .getLineNumber (via instanceof / casting). So the similar (read: nearly-copied) class I&apos;m trying to use can&apos;t store line numbers, which makes the stack trace less nice (fwiw, this is in REPL-y: &lt;a href=&quot;https://github.com/trptcolin/reply&quot;&gt;https://github.com/trptcolin/reply&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It would be nice to have an interface (ILineNumberingPushbackReader?) that declares getLineNumber, readLine, and atLineStart,  and have things check instanceof on that instead of the concrete class. That way, anyone else adhering to the LineNumberingPushbackReader contract (in order to bind that to &amp;#42;in&amp;#42; as the docstring for `clojure.main/repl` prescribes) can do it and have line numbering play nicely with the Clojure reader.&lt;/p&gt;

&lt;p&gt;If that sounds desirable, I can replace this patch. The existing patch will also work fine if we want to keep things concrete, or if that feels enough like solving a different problem to require another ticket.&lt;/p&gt;</comment>
                    <comment id="29181" author="fogus" created="Wed, 15 Aug 2012 13:49:59 -0500"  >&lt;p&gt;The patch looks fine.&lt;/p&gt;

&lt;p&gt;Regarding the larger question of an interface I&apos;d say another ticket is in order. The existence of LNPBR is an implementation detail, but I too have found it useful.  Maybe there is a wider discussion on the usefulness of LNPBR and a sane way to expose it for tool, compiler, etc. devs?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10767" name="0001-Allow-custom-buffer-size-in-LineNumberingPushbackRea.patch" size="929" author="trptcolin" created="Wed, 11 Jan 2012 19:16:40 -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-905] clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-905</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.string/replace only gives special treatment to replacement string when match is a regex pattern.  clojure.string/replace-first does so in those cases, but also when match is a string to be matched literally.  For example, these cases are not consistent with each other:&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; (str/replace &quot;food&quot; &quot;o&quot; &quot;$&quot;)&lt;br/&gt;
&quot;f$$d&quot;&lt;br/&gt;
user=&amp;gt; (str/replace-first &quot;food&quot; &quot;o&quot; &quot;$&quot;)&lt;br/&gt;
java.lang.StringIndexOutOfBoundsException: String index out of range: 1 (NO_SOURCE_FILE:0)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15092">CLJ-905</key>
            <summary>clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace</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="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sat, 31 Dec 2011 17:02:38 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 24 Aug 2012 07:41:28 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27501" author="jafingerhut" created="Sat, 31 Dec 2011 17:04:54 -0600"  >&lt;p&gt;Suggested fix for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-905&quot; title=&quot;clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace&quot;&gt;&lt;del&gt;CLJ-905&lt;/del&gt;&lt;/a&gt;, plus addition of function clojure.string/re-qr for quoting replacement strings that caller wishes to be treated literally when match is a pattern.&lt;/p&gt;</comment>
                    <comment id="27653" author="jafingerhut" created="Sat, 4 Feb 2012 13:59:52 -0600"  >&lt;p&gt;&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; has a proposed combined patch for this issue and that one.&lt;/p&gt;</comment>
                    <comment id="29224" author="jafingerhut" created="Sat, 18 Aug 2012 12:09:41 -0500"  >&lt;p&gt;This issue should now be corrected with the patch, attached to &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 was applied on Aug 18, 2012.&lt;/p&gt;</comment>
                    <comment id="29258" author="stuart.sierra" created="Fri, 24 Aug 2012 07:41:28 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-905&quot; title=&quot;clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace&quot;&gt;&lt;del&gt;CLJ-905&lt;/del&gt;&lt;/a&gt; same status as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;: patch applied 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; addresses this one, too, applied Aug 18, 2012 &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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-904] Document *read-eval* in read, read-string</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-904</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Even though the #=() reader syntax is &quot;unofficial&quot;, &amp;#42;read-eval&amp;#42; should be documented in the appropriate API functions &amp;#8211; this is a serious security problem for anyone accepting serialized Clojure data structures. E.g., a system service reading a config file, a server accepting an API request.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15091">CLJ-904</key>
            <summary>Document *read-eval* in read, read-string</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="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Sat, 31 Dec 2011 09:39:50 -0600</created>
                <updated>Fri, 22 Feb 2013 09:02:45 -0600</updated>
                    <resolved>Fri, 15 Feb 2013 11:00:12 -0600</resolved>
                            <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>6</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="29936" author="timmc" created="Tue, 13 Nov 2012 18:49:33 -0600"  >&lt;p&gt;My goodness, I entirely neglected to attach a patch for this! Well, here it is, short and sweet.&lt;/p&gt;</comment>
                    <comment id="29946" author="jafingerhut" created="Wed, 14 Nov 2012 14:34:34 -0600"  >&lt;p&gt;Tim, I&apos;m pretty sure that read-line&apos;s behavior is safe regardless of the value of &lt;b&gt;read-eval&lt;/b&gt;.  It only reads characters from the stream without interpretation or evaluation, and returns them as a string.  If so, adding the warning to read-line&apos;s doc string seems wrong.&lt;/p&gt;</comment>
                    <comment id="29952" author="timmc" created="Wed, 14 Nov 2012 22:06:04 -0600"  >&lt;p&gt;Oops! Replaced the patch.&lt;/p&gt;</comment>
                    <comment id="30071" author="redinger" created="Tue, 27 Nov 2012 17:36:23 -0600"  >&lt;p&gt;Patch applies cleanly and adds a useful message.&lt;/p&gt;</comment>
                    <comment id="30512" author="steveminer@gmail.com" created="Wed, 30 Jan 2013 10:15:10 -0600"  >&lt;p&gt;See also discussion on the mailing list:  &lt;br/&gt;
&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;Several people who care about safety think that &amp;#42;read-eval* should be false by default.  Documentation does not make up for a security hole.&lt;/p&gt;</comment>
                    <comment id="30513" author="steveminer@gmail.com" created="Wed, 30 Jan 2013 10:44:00 -0600"  >&lt;p&gt;It would be useful to document the interaction between &amp;#42;print-dup* and &amp;#42;read-eval* as well.  In most cases, if you use &amp;#42;print-dup* true to preserve exact types, you&apos;ll want to bind &amp;#42;read-eval* true to read them.  Code that depends on their default values is brittle.&lt;/p&gt;</comment>
                    <comment id="30514" author="jafingerhut" created="Wed, 30 Jan 2013 10:52:24 -0600"  >&lt;p&gt;See also the newer ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1153&quot; title=&quot;Change *read-eval* default value to false&quot;&gt;&lt;del&gt;CLJ-1153&lt;/del&gt;&lt;/a&gt;, which has a patch to change &lt;b&gt;read-eval&lt;/b&gt; default value to false.&lt;/p&gt;</comment>
                    <comment id="30560" author="jafingerhut" created="Wed, 6 Feb 2013 12:38:19 -0600"  >&lt;p&gt;With the recent changes Rich has done to add read-edn and read-edn-string, he has also updated the doc strings of read and read-string to call out the potential security dangers, emphasize that they are intended for use only in reading code and/or data from trusted sources, and to point to the safer read-edn and read-edn-string for data interchange purposes.&lt;/p&gt;

&lt;p&gt;The purpose of this ticket seems to be satisfied with those commits.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11679" name="0002-CLJ-904-Note-about-read-eval-on-docstrings-for-reade.patch" size="1097" author="timmc" created="Wed, 14 Nov 2012 22:06:04 -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-902] doc macro broken for namespaces</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-902</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Clojure 1.3.0&lt;br/&gt;
user=&amp;gt; (doc clojure.pprint)&lt;br/&gt;
ClassNotFoundException clojure.pprint  java.net.URLClassLoader$1.run (URLClassLoader.java:366)&lt;/p&gt;

&lt;p&gt;It appears it is not safe to call resolve on a symbol representing a namespace; you get the error above. FWIW, I seem to have resolved the problem (see attached diff) by moving the find-ns clause above the resolve clause (in the cond); also the reference to namespace-doc needs to be var-quoted since namespace-doc is private. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15088">CLJ-902</key>
            <summary>doc macro broken for namespaces</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="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Wed, 28 Dec 2011 17:35:22 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Sun, 12 Aug 2012 15:48:09 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27732" author="jafingerhut" created="Fri, 17 Feb 2012 00:43:30 -0600"  >&lt;p&gt;Verified there is a bug, and that this change fixes it.  New patch is in proper format, and includes a new unit test that would have caught the bug.&lt;/p&gt;</comment>
                    <comment id="29090" author="stuart.sierra" created="Wed, 8 Aug 2012 09:52:32 -0500"  >&lt;p&gt;Screened. Ready for approval.&lt;/p&gt;</comment>
                    <comment id="29117" author="stuart.sierra" created="Sun, 12 Aug 2012 15:48:10 -0500"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10916" name="clj-902-doc-on-namespaces-patch.txt" size="2028" author="jafingerhut" created="Fri, 17 Feb 2012 00:43:30 -0600" />
                    <attachment id="10755" name="repl.diff" size="595" author="glchapman" created="Wed, 28 Dec 2011 17:35:22 -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-898] Agent sends consume heap</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-898</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Simple demonstration:&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 update [state]
  (send *agent* update)
  (inc state))

(def a (agent 1))

(send a update)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On Clojure 1.2.1, this runs forever with no problem. On 1.3.0, it throws &quot;java.lang.OutOfMemoryError: Java heap space.&quot;&lt;/p&gt;

&lt;p&gt;The problem appears to be &lt;tt&gt;clojure.core/binding-conveyor-fn&lt;/tt&gt;: each &lt;tt&gt;send&lt;/tt&gt; creates a new Var binding frame, and nested &lt;tt&gt;send&lt;/tt&gt; creates an infinite stack of frames.&lt;/p&gt;

&lt;p&gt;Also discussed at &lt;a href=&quot;https://groups.google.com/d/topic/clojure/1qUNPZv3OYA/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/1qUNPZv3OYA/discussion&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15076">CLJ-898</key>
            <summary>Agent sends consume heap</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 16 Dec 2011 09:12:05 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Fri, 27 Jan 2012 09:51:22 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27478" author="tsdh" created="Fri, 16 Dec 2011 11:46:16 -0600"  >&lt;p&gt;I&apos;ve just checked the code: send uses binding (which calls push-thread-bindings, creating a new Frame with non-null prev) inside which the binding-conveyor-fn captures the current frame.  When the binding-conveyor-fn runs, the old Frame is restored, and since the wrapped function sends again, a new thread-binding is pushed on top of that.&lt;/p&gt;

&lt;p&gt;Hm, one way to get rid of the issue was not to capture the &quot;real&quot; current Frame in the binding-conveyor-fn but only a shallow copy, i.e., a Frame with the same bindings but no prev.  I&apos;ve tried that out, all tests still pass, and the example above won&apos;t grow heap without bounds.  Patch attached.&lt;/p&gt;</comment>
                    <comment id="27479" author="stuart.sierra" created="Fri, 16 Dec 2011 14:30:13 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                    <comment id="27616" author="tsdh" created="Wed, 25 Jan 2012 14:24:33 -0600"  >&lt;p&gt;My fix had some small issue as David Miller pointed out correctly in&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/12f07da889819bc5613546ec223e97ac27c86dbf#commitcomment-867608&quot;&gt;https://github.com/clojure/clojure/commit/12f07da889819bc5613546ec223e97ac27c86dbf#commitcomment-867608&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Attached is a patch that fixes the quirk.&lt;/p&gt;</comment>
                    <comment id="27617" author="tsdh" created="Wed, 25 Jan 2012 14:25:29 -0600"  >&lt;p&gt;Here&apos;s the fix for the fix.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10749" name="0001-Only-capture-a-shallow-copy-of-the-current-Frame-in-.patch" size="1693" author="tsdh" created="Fri, 16 Dec 2011 11:46:16 -0600" />
                    <attachment id="10788" name="0002-Fix-the-already-pushed-fix-for-CLJ-898.patch" size="768" author="tsdh" created="Wed, 25 Jan 2012 14:25:29 -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-897] deftype error message is misleading not useful</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-897</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you forget to include the argument vector for deftype, i.e.&lt;/p&gt;

&lt;p&gt;(deftype second-request-handler&lt;br/&gt;
  HttpServer.RequestHandler&lt;br/&gt;
  (canRespond &lt;span class=&quot;error&quot;&gt;&amp;#91;this request&amp;#93;&lt;/span&gt; true)&lt;br/&gt;
  (getResponse &lt;span class=&quot;error&quot;&gt;&amp;#91;this request&amp;#93;&lt;/span&gt; nil))&lt;/p&gt;

&lt;p&gt;which should be...&lt;/p&gt;

&lt;p&gt;(deftype second-request-handler []&lt;br/&gt;
  HttpServer.RequestHandler&lt;br/&gt;
  (canRespond &lt;span class=&quot;error&quot;&gt;&amp;#91;this request&amp;#93;&lt;/span&gt; true)&lt;br/&gt;
  (getResponse &lt;span class=&quot;error&quot;&gt;&amp;#91;this request&amp;#93;&lt;/span&gt; nil))&lt;/p&gt;

&lt;p&gt;I get the error message..&lt;/p&gt;

&lt;p&gt;Don&apos;t know how to create ISeq from: clojure.lang.Symbol (main.clj:1)&lt;/p&gt;

&lt;p&gt;When in fact the error is coming from (second-request-handler.clj:3). Can this error message be improved and give the actually location of the error?&lt;/p&gt;</description>
                <environment>OS X</environment>
            <key id="15071">CLJ-897</key>
            <summary>deftype error message is misleading not useful</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="mylesmegyesi">Myles Megyesi</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Dec 2011 08:46:44 -0600</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27490" author="tsdh" created="Fri, 23 Dec 2011 04:28:59 -0600"  >&lt;p&gt;The problem is that deftype and defrecord use destructuring in the argument vector, so the error pops up before the macro is actually running.&lt;/p&gt;

&lt;p&gt;The attached patch removes the destructuring form (but keeps the nice syntax in :arglists) and adds a vector? check to validate-fields.&lt;/p&gt;

&lt;p&gt;All tests pass, and the example above now errors with &quot;AssertionError No fields vector given.&quot;&lt;/p&gt;</comment>
                    <comment id="27987" author="jafingerhut" created="Fri, 23 Mar 2012 02:40:46 -0500"  >&lt;p&gt;Changing Patch attribute to &quot;Code&quot;.&lt;/p&gt;</comment>
                    <comment id="28287" author="jafingerhut" created="Thu, 26 Apr 2012 19:29:18 -0500"  >&lt;p&gt;clj-897-deftype-error-message-is-misleading-patch.txt dated Apr 26 2012 is the same as Tassilo Horn&apos;s patch, except it is updated to apply cleanly to latest master as of today.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10753" name="0001-Fix-CLJ-897-Don-t-use-descructuring-in-defrecord-def.patch" size="1908" author="tsdh" created="Fri, 23 Dec 2011 04:28:59 -0600" />
                    <attachment id="11113" name="clj-897-deftype-error-message-is-misleading-patch.txt" size="1872" author="jafingerhut" created="Thu, 26 Apr 2012 19:29:18 -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-895] Collection.toArray implementations do not conform to Java API docs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-895</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Per &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/index.html?java/util/Collections.html&quot;&gt;http://docs.oracle.com/javase/6/docs/api/index.html?java/util/Collections.html&lt;/a&gt;, Collection.toArray(T []) implements must allocate an array of type T[], not Object[]. This will cause type-casty code to break. Not often a problem in Clojure, but e.g. it makes Clojure defrecords unprintable from the JRuby console.&lt;/p&gt;

&lt;p&gt;There is also a chance to DRY up some common code, as the six places that have this problem should all call an RT helper.&lt;/p&gt;

&lt;p&gt;This also fixes toArray(T[]) for PersistentQueue when the passed array has the same length as the queue.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15063">CLJ-895</key>
            <summary>Collection.toArray implementations do not conform to Java API docs</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sat, 10 Dec 2011 17:27:36 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:07 -0600</updated>
                    <resolved>Sun, 19 Feb 2012 20:20:56 -0600</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27451" author="stu" created="Sat, 10 Dec 2011 17:35:37 -0600"  >&lt;p&gt;Sorry about the ^M crap in the patch, feel free to humiliate me on twitter with the correct incantation to prettify patch whitespace.&lt;/p&gt;</comment>
                    <comment id="27452" author="cosmin" created="Sat, 10 Dec 2011 22:44:27 -0600"  >&lt;p&gt;I don&apos;t understand the motivation for changing toArray in PersistentList. Calling seqToPassedArray here seems to accomplish the same thing, but the way in which it does that becomes harder to follow (at least for me). I would be tempted to keep the old toArray code in PersistentList.&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[] toArray(Object[] objects){                                                                                                                                                          
-               if(objects.length &amp;gt; 0)                                                                                                                                                                      
-                       objects[0] = null;                                                                                                                                                                  
-               return objects;                                                                                                                                                                             
+       public Object[] toArray(Object[] a){                                                                                                                                                                
+        return RT.seqToPassedArray(seq(), a);                                                                                                                                                              
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also, in the implementation of seqToPassedArray I think the final if condition can be simplified because dest != passed only if len &amp;gt; passed.length. I think this would do.&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;+        if (len &amp;lt; passed.length) {
+            dest[len] = null;
+        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally, it probably wouldn&apos;t hurt to throw some braces around the for loop.&lt;/p&gt;</comment>
                    <comment id="27453" author="stu" created="Sun, 11 Dec 2011 06:53:45 -0600"  >&lt;p&gt;Thanks Cosmin. &quot;take-2&quot; patch incorporates your suggestions.&lt;/p&gt;</comment>
                    <comment id="27454" author="cosmin" created="Sun, 11 Dec 2011 22:17:24 -0600"  >&lt;p&gt;I removed the line ending changes from PersistentQueue from the patch so now just the relevant changes should be left.&lt;/p&gt;</comment>
                    <comment id="27455" author="cosmin" created="Mon, 12 Dec 2011 01:56:34 -0600"  >&lt;p&gt;Added tests for the new toArray functionality. Checking for collections shorter, same-length, and longer than the passed array for lists, vectors, hash-sets and queues.&lt;/p&gt;

&lt;p&gt;In the process discovered that the previous implementation of toArray for PersistentQueue was actually broken when the passed array had the same length as the queue because&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;if(a.length &amp;gt;= count())
    a[count()] = null;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;should have been&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;if(a.length &amp;gt; count())
    a[count()] = null;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which was the case for the other implementations. With the new shared implementation of RT.seqToPassedArray this is no longer a problem.&lt;/p&gt;</comment>
                    <comment id="27476" author="stuart.sierra" created="Fri, 16 Dec 2011 09:30:51 -0600"  >&lt;p&gt;Patch 0895-to-array-take-3.patch does not apply on 485b6fc357157458f156bbba49f8e78c10c66c31&lt;/p&gt;</comment>
                    <comment id="27481" author="cosmin" created="Fri, 16 Dec 2011 16:20:34 -0600"  >&lt;p&gt;Odd, it seems to apply cleanly for me onto 485b6fc357157458f156bbba49f8e78c10c66c31 as well as 12f07da889819bc5613546ec223e97ac27c86dbf (current HEAD).&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 reset --hard HEAD
HEAD is now at 485b6fc [maven-release-plugin] prepare for next development iteration
$ git checkout 485b6fc357157458f156bbba49f8e78c10c66c31
HEAD is now at 485b6fc... [maven-release-plugin] prepare for next development iteration
$ patch -p1 &amp;lt; 0895-to-array-take-3.patch 
patching file src/jvm/clojure/lang/APersistentSet.java
patching file src/jvm/clojure/lang/APersistentVector.java
patching file src/jvm/clojure/lang/ASeq.java
patching file src/jvm/clojure/lang/LazySeq.java
patching file src/jvm/clojure/lang/PersistentQueue.java
patching file src/jvm/clojure/lang/RT.java
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27646" author="cosmin" created="Fri, 3 Feb 2012 18:52:38 -0600"  >&lt;p&gt;One more shot at getting a combined patch for this issue. 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-895&quot; title=&quot;Collection.toArray implementations do not conform to Java API docs&quot;&gt;&lt;del&gt;CLJ-895&lt;/del&gt;&lt;/a&gt;.-Use-RT.seqToPassedArray-to-implement-Collec.patch contains the fix as well as the tests and should apply with no problems on top of e27a27d9a6dc3fd0d15f26a5076e2876007e0ae6&lt;/p&gt;</comment>
                    <comment id="27770" author="stu" created="Sun, 19 Feb 2012 18:48:53 -0600"  >&lt;p&gt;the take 4 patch is the same as previous, merely cleaned up to apply on master&lt;/p&gt;</comment>
                    <comment id="27771" author="stu" created="Sun, 19 Feb 2012 19:17:40 -0600"  >&lt;p&gt;Aargh. One last time with correct git usage. Ignore take-4, the take-5 patch applies on master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10799" name="0001-CLJ-895.-Use-RT.seqToPassedArray-to-implement-Collec.patch" size="6277" author="cosmin" created="Fri, 3 Feb 2012 18:52:38 -0600" />
                    <attachment id="10928" name="0895-take-4.patch" size="6231" author="stu" created="Sun, 19 Feb 2012 18:48:53 -0600" />
                    <attachment id="10929" name="0895-take-5.patch" size="6225" author="stu" created="Sun, 19 Feb 2012 19:17:40 -0600" />
                    <attachment id="10738" name="0895-to-array.patch" size="7561" author="stu" created="Sat, 10 Dec 2011 17:35:37 -0600" />
                    <attachment id="10739" name="0895-to-array-take-2.patch" size="6868" author="stu" created="Sun, 11 Dec 2011 06:53:45 -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-893] crafted `vec&apos; call allows created vector to be mutated</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-893</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; (let [a (to-array (repeat 31 0)), v (vec a)]
        [(v 2) (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (aset a 2 &apos;no) (v 2))])
[0 no]
user&amp;gt; (let [a (to-array (repeat 33 0)), v (vec a)]
        [(v 2) (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (aset a 2 &apos;no) (v 2))])
[0 0]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;While a relaxation of &lt;b&gt;when&lt;/b&gt; different changes to the environment are made may impact the resulting value of the vector, as it is with lazy seqs, it oughtn&apos;t be possible to get two different results for the same access, just as with lazy seqs.&lt;/p&gt;</description>
                <environment>Found in 1.3.0; tested in 1.4.0-alpha2 as well.</environment>
            <key id="15059">CLJ-893</key>
            <summary>crafted `vec&apos; call allows created vector to be mutated</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="s11001001">Stephen Compall</reporter>
                        <labels>
                    </labels>
                <created>Thu, 8 Dec 2011 19:26:47 -0600</created>
                <updated>Fri, 18 May 2012 12:32:03 -0500</updated>
                    <resolved>Fri, 18 May 2012 12:32:03 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27436" author="stu" created="Fri, 9 Dec 2011 09:34:12 -0600"  >&lt;p&gt;The code path followed here lets vec assume (without copying) a passed-in array. to-array just returns the array, and createOwning doesn&apos;t copy either.&lt;/p&gt;

&lt;p&gt;Seems like we need a defensive copy somewhere&lt;/p&gt;</comment>
                    <comment id="27605" author="richhickey" created="Sun, 22 Jan 2012 12:26:10 -0600"  >&lt;p&gt;Just document that, when passed an array, vec aliases it, and it should not be changed. Then only people that can&apos;t ensure that must copy it first.&lt;/p&gt;</comment>
                    <comment id="27865" author="jafingerhut" created="Fri, 24 Feb 2012 20:33:07 -0600"  >&lt;p&gt;Proposed patch to document the existing behavior, and briefly suggest safe ways to use vec with mutable collections.&lt;/p&gt;</comment>
                    <comment id="27994" author="stuart.sierra" created="Fri, 23 Mar 2012 09:00:14 -0500"  >&lt;p&gt;I think the docstring in the 24/Feb/12 patch is too long. Also not entirely correct: calling &lt;tt&gt;vec&lt;/tt&gt; on a mutable java.util.List, for example, will create an immutable vector from the contents of the List.&lt;/p&gt;

&lt;p&gt;Instead just say that Java arrays may be aliased by &lt;tt&gt;vec&lt;/tt&gt; and should not be modified.&lt;/p&gt;</comment>
                    <comment id="28015" author="jafingerhut" created="Mon, 26 Mar 2012 17:16:36 -0500"  >&lt;p&gt;clj-893-doc-vec-aliases-java-array-patch2.txt of Mar 26, 2012 is shorter than the previous attempt, and avoids the error Stuart Sierra found.&lt;/p&gt;</comment>
                    <comment id="28130" author="richhickey" created="Fri, 13 Apr 2012 08:09:17 -0500"  >&lt;p&gt;I&apos;d prefer it said will alias and &quot;should not be modified&quot; vs &quot;should be copied&quot;.&lt;/p&gt;</comment>
                    <comment id="28144" author="jafingerhut" created="Sat, 14 Apr 2012 16:22:41 -0500"  >&lt;p&gt;Would someone better at writing Clojure style doc strings take a crack at this?  I&apos;m too verbose.  I have added a (verbose) note about this behavior on clojuredocs.org.&lt;/p&gt;</comment>
                    <comment id="28221" author="brentonashworth" created="Sat, 21 Apr 2012 16:12:00 -0500"  >&lt;p&gt;Added patch&lt;/p&gt;

&lt;p&gt;clj-893-doc-vec-aliases-java-array-patch3.txt&lt;/p&gt;

&lt;p&gt;With this patch the doc string 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;Creates a &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; vector containing the contents of coll. Java arrays
will be aliased and should not be modified.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="28266" author="jafingerhut" created="Tue, 24 Apr 2012 19:42:06 -0500"  >&lt;p&gt;Removed non-preferred patch clj-893-doc-vec-aliases-java-array-patch2.txt of Mar 26, 2012.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11084" name="clj-893-doc-vec-aliases-java-array-patch3.txt" size="836" author="brentonashworth" created="Sat, 21 Apr 2012 16:08: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-892] sort changes its argument, if a Java array</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-892</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user&amp;gt; (let [a (to-array &lt;span class=&quot;error&quot;&gt;&amp;#91;32 11&amp;#93;&lt;/span&gt;)] &lt;br/&gt;
        (prn (seq a))&lt;br/&gt;
        (sort a)&lt;br/&gt;
        (prn (seq a)))&lt;br/&gt;
(32 11)&lt;br/&gt;
(11 32)&lt;br/&gt;
nil&lt;/p&gt;

&lt;p&gt;Where the second line printed ought to be the same as the first.&lt;/p&gt;</description>
                <environment>java version &amp;quot;1.6.0_22&amp;quot;&lt;br/&gt;
OpenJDK Runtime Environment (IcedTea6 1.10.4) (6b22-1.10.4-0ubuntu1~11.04.1)&lt;br/&gt;
(clojure-version)&lt;br/&gt;
&amp;quot;1.4.0-alpha2&amp;quot;</environment>
            <key id="15058">CLJ-892</key>
            <summary>sort changes its argument, if a Java array</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="s11001001">Stephen Compall</reporter>
                        <labels>
                    </labels>
                <created>Thu, 8 Dec 2011 19:14:37 -0600</created>
                <updated>Fri, 18 May 2012 12:35:48 -0500</updated>
                    <resolved>Fri, 18 May 2012 12:35:48 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Reviewed Backlog</fixVersion>
                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27438" author="stu" created="Fri, 9 Dec 2011 09:37:53 -0600"  >&lt;p&gt;This is an enhancement request, since the docs for sort make no promise one way or the other. &lt;/p&gt;

&lt;p&gt;For performance, I prefer the current behavior, so another possibility is a clarifying doc string.&lt;/p&gt;</comment>
                    <comment id="28016" author="jafingerhut" created="Mon, 26 Mar 2012 17:32:41 -0500"  >&lt;p&gt;clj-892-clarify-sort-sort-by-doc-strings-patch1.txt of Mar 26, 2012 applies cleanly to latest master on that date.  Only doc string changes, to make it clear that by sort and sort-by will modify Java arrays given as arguments.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11012" name="clj-892-clarify-sort-sort-by-doc-strings-patch1.txt" size="1409" author="jafingerhut" created="Mon, 26 Mar 2012 17:32:41 -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-890] Tagged literals in reader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-890</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/display/design/Tagged+Literals&quot;&gt;http://dev.clojure.org/display/design/Tagged+Literals&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15045">CLJ-890</key>
            <summary>Tagged literals in reader</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 2 Dec 2011 17:15:43 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:02 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:12:01 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27411" author="stuart.sierra" created="Fri, 2 Dec 2011 17:32:48 -0600"  >&lt;p&gt;Rough draft in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-890&quot; title=&quot;Tagged literals in reader&quot;&gt;&lt;del&gt;CLJ-890&lt;/del&gt;&lt;/a&gt;-001.patch:&lt;/p&gt;

&lt;p&gt;This adds reader tags like &lt;tt&gt;#user/foo&lt;/tt&gt;. If the symbol following the &lt;tt&gt;#&lt;/tt&gt; is namespace-qualified, or if it is one of a predefined set of built-in tags (currently empty) it is interpreted as a tag. Otherwise, it is interpreted as a class name, as in defrecord literals.&lt;/p&gt;

&lt;p&gt;The dynamic Var &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt; is a map from tags (symbols) to reader functions/Vars. Each invocation of &lt;tt&gt;Compiler.load&lt;/tt&gt; creates a new thread-local binding, as does the REPL. At the top of a source file, use &lt;tt&gt;(set! &amp;#42;data-readers&amp;#42; ...)&lt;/tt&gt; to define the tags just for that file. For runtime invocations of the reader, use &lt;tt&gt;binding&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;When reading a tagged literal, if the tag is &lt;b&gt;not&lt;/b&gt; defined in &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt; it is added as &lt;tt&gt;:data&lt;/tt&gt; metadata on the following form. If the following form does not support metadata, the tag is ignored. This causes a problem when an undefined tag is used in source code, because the compiler tries to evaluate it:&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; #foo.bar/bar {:a 1}
CompilerException java.lang.RuntimeException: No such &lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;: foo.bar/bar, compiling:(NO_SOURCE_PATH:0) 
user=&amp;gt; (quote #foo.bar/bar {:a 1})
{:a 1}
user=&amp;gt; (meta *1)
{:data foo.bar/bar}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27445" author="stuart.sierra" created="Fri, 9 Dec 2011 15:08:23 -0600"  >&lt;p&gt;New file &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-890&quot; title=&quot;Tagged literals in reader&quot;&gt;&lt;del&gt;CLJ-890&lt;/del&gt;&lt;/a&gt;-002.patch:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;tag definitions loaded from &lt;tt&gt;/data_readers.clj&lt;/tt&gt; files on classpath&lt;/li&gt;
	&lt;li&gt;read as a series of symbol-symbol pairs&lt;/li&gt;
	&lt;li&gt;&quot;target&quot; symbol interpreted as a Var&lt;/li&gt;
	&lt;li&gt;creates namespaces and interns Vars as necessary&lt;/li&gt;
	&lt;li&gt;may be more than one file&lt;/li&gt;
	&lt;li&gt;throws exception on conflict&lt;/li&gt;
	&lt;li&gt;sets root binding of &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27557" author="stuart.sierra" created="Fri, 13 Jan 2012 08:28:23 -0600"  >&lt;p&gt;Patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-890&quot; title=&quot;Tagged literals in reader&quot;&gt;&lt;del&gt;CLJ-890&lt;/del&gt;&lt;/a&gt;-002.patch applied following discussion with Rich. Will be included in release 1.4.0-alpha4&lt;/p&gt;</comment>
                    <comment id="29200" author="bbloom" created="Thu, 16 Aug 2012 21:48:08 -0500"  >&lt;p&gt;It would be a small extension to allow overriding of readers for untagged forms as well.&lt;/p&gt;

&lt;p&gt;For example, MapReader currently calls RT.map(a) when it could call RT.get(data_readers, MAP_TAG).invoke(a)&lt;/p&gt;

&lt;p&gt;This would allow consumers of the reader to supply their own implementations for any basic data structure. Not that anyone is likely to have a &lt;b&gt;better&lt;/b&gt; map/set/etc, but I could see it being useful for using a different RegExp engine or something like that. The primary use case I have in mind, however, is the ClojureScript compiler. The compiler needs to know the &lt;b&gt;order&lt;/b&gt; of the key-value-pairs in a map or the elements in a set. See &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;</comment>
                </comments>
                    <attachments>
                    <attachment id="10731" name="CLJ-890-001.patch" size="4945" author="stuart.sierra" created="Fri, 2 Dec 2011 17:32:48 -0600" />
                    <attachment id="10737" name="CLJ-890-002.patch" size="6626" author="stuart.sierra" created="Fri, 9 Dec 2011 15:08:23 -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-886] java.io/do-copy can garble multibyte characters</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-886</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See comments in fix:&lt;/p&gt;

&lt;p&gt;(defmethod do-copy &lt;span class=&quot;error&quot;&gt;&amp;#91;InputStream Writer&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;#^InputStream input #^Writer output opts&amp;#93;&lt;/span&gt;&lt;br/&gt;
  ;; WRONG! if the buffer boundry falls in the middle of a multibyte character, we will get garbled results.&lt;br/&gt;
  #_&lt;br/&gt;
  (let [#^&quot;&lt;span class=&quot;error&quot;&gt;&amp;#91;B&amp;quot; buffer (make-array Byte/TYPE (buffer-size opts))&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (loop []&lt;br/&gt;
      (let &lt;span class=&quot;error&quot;&gt;&amp;#91;size (.read input buffer)&amp;#93;&lt;/span&gt;&lt;br/&gt;
        (when (pos? size)&lt;br/&gt;
          (let &lt;span class=&quot;error&quot;&gt;&amp;#91;chars (.toCharArray (String. buffer 0 size (encoding opts)))&amp;#93;&lt;/span&gt;&lt;br/&gt;
            (do (.write output chars)&lt;br/&gt;
                (recur)))))))&lt;br/&gt;
  ;; here we decode the characters before stuffing them into the buffer&lt;br/&gt;
  (let [#^&quot;[C&quot; buffer (make-array Character/TYPE (buffer-size opts))&lt;br/&gt;
        in (InputStreamReader. input (encoding opts))]&lt;br/&gt;
    (loop []&lt;br/&gt;
      (let &lt;span class=&quot;error&quot;&gt;&amp;#91;size (.read in buffer 0 (alength buffer))&amp;#93;&lt;/span&gt;&lt;br/&gt;
        (if (pos? size)&lt;br/&gt;
          (do (.write output buffer 0 size)&lt;br/&gt;
              (recur)))))))&lt;/p&gt;</description>
                <environment>all</environment>
            <key id="15033">CLJ-886</key>
            <summary>java.io/do-copy can garble multibyte characters</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="jpalmucci">Jeff Palmucci</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Mon, 28 Nov 2011 16:24:43 -0600</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27418" author="jpalmucci" created="Mon, 5 Dec 2011 11:23:01 -0600"  >&lt;p&gt;Make patch file per &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt;. Also sent in my CA.&lt;/p&gt;</comment>
                    <comment id="27484" author="jpalmucci" created="Mon, 19 Dec 2011 08:53:13 -0600"  >&lt;p&gt;Any reason why this hasn&apos;t been applied yet? It&apos;s a pretty serious error. Just wondering if I&apos;ve submitted anything incorrectly. Thanks.&lt;/p&gt;</comment>
                    <comment id="27703" author="jafingerhut" created="Thu, 9 Feb 2012 20:13:03 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-886&quot; title=&quot;java.io/do-copy can garble multibyte characters&quot;&gt;&lt;del&gt;CLJ-886&lt;/del&gt;&lt;/a&gt;-fix2.patch includes Jeff Palmucci&apos;s fix, plus another one found while enhancing clojure.java.io&apos;s unit tests to fail with the original code.  Tested on Mac OS X 10.6.8 with java 1.6.0_29 and Ubuntu Linux 11.04 with JVM 1.7.0_02.&lt;/p&gt;</comment>
                    <comment id="27710" author="jpalmucci" created="Mon, 13 Feb 2012 07:29:48 -0600"  >&lt;p&gt;Andy&apos;s fix is good. Please use the fix2 patch instead of the original.&lt;/p&gt;</comment>
                    <comment id="27755" author="stuart.sierra" created="Fri, 17 Feb 2012 14:55:49 -0600"  >&lt;p&gt;Screened. Patch applies successfully and the tests seem to be complete.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10733" name="clj-886.diff" size="2280" author="jpalmucci" created="Mon, 5 Dec 2011 11:23:01 -0600" />
                    <attachment id="10899" name="CLJ-886-fix2.patch" size="7248" author="jafingerhut" created="Thu, 9 Feb 2012 20:13:03 -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>
                                                                                    <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-885] clojure.java.io/Coercions doesn&apos;t handle URL-escaping</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-885</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.java.io/Coercions implementations for URL -&amp;gt; File and File -&amp;gt; URL don&apos;t take URL escaping into account, and I think they should.&lt;/p&gt;

&lt;p&gt;This breaks things like slurping a resource file that has spaces in the path.&lt;/p&gt;

&lt;p&gt;Example behavior here: &lt;a href=&quot;https://gist.github.com/1398972&quot;&gt;https://gist.github.com/1398972&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I will post a link to the clojure-dev list discussion in the comments once I have the link for this ticket to post there.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15032">CLJ-885</key>
            <summary>clojure.java.io/Coercions doesn&apos;t handle URL-escaping</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="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Sun, 27 Nov 2011 22:21:02 -0600</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27351" author="trptcolin" created="Sun, 27 Nov 2011 22:37:48 -0600"  >&lt;p&gt;clojure-dev posting with more details (and presumably forthcoming discussion): &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/bTNX4pt_b4w/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/bTNX4pt_b4w/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27375" author="trptcolin" created="Wed, 30 Nov 2011 12:31:30 -0600"  >&lt;p&gt;Updated patch to fix the issue David Powell brought up on the dev list, so that &quot;+&quot; in a URL does not get translated to &quot; &quot; in a File.&lt;/p&gt;</comment>
                    <comment id="27377" author="stuart.sierra" created="Wed, 30 Nov 2011 14:04:46 -0600"  >&lt;p&gt;Vetted &amp;amp; assigned to &quot;Approved Backlog&quot; in preparation for next release.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10719" name="0001-Handle-URL-escaping-in-both-directions-in-java.io-Co.patch" size="5157" author="trptcolin" created="Sun, 27 Nov 2011 22:21:02 -0600" />
                    <attachment id="10726" name="0002-Handle-URL-escaping-in-both-directions-in-java.io-Co.patch" size="3224" author="trptcolin" created="Wed, 30 Nov 2011 12:31: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>
                                            <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-882] non-dynamic earmuff var warning would be better with file name and line number</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-882</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If a var name looks like it&apos;s meant to be dynamic but isn&apos;t declared so, Clojure 1.3 generates this 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;Warning: *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. 
Please either indicate ^:dynamic *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* or change the name.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;When porting a project to Clojure 1.3, one of the project&apos;s dependencies may cause the warning, in which case it can be difficult to tell which.  The code causing the warning may only exist inside a .jar and possibly only in a .class file inside that.  This means significant work is required even to know which project needs to be told their code doesn&apos;t work on Clojure 1.3.&lt;/p&gt;

&lt;p&gt;Much less work would be required if the warning included the filename and line number causing the warning.  The compiler has easy access to that information when it generates the warning.&lt;/p&gt;

&lt;p&gt;I suggest just adding these to the end so that the warning would look 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;Warning: *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. 
Please either indicate ^:dynamic *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* or change the name. (out/of-date/code.clj:210)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15026">CLJ-882</key>
            <summary>non-dynamic earmuff var warning would be better with file name and line number</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="chouser@n01se.net">Chouser</assignee>
                                <reporter username="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Tue, 22 Nov 2011 20:00:13 -0600</created>
                <updated>Fri, 2 Dec 2011 09:03:00 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:03:00 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27376" author="chouser@n01se.net" created="Wed, 30 Nov 2011 12:54:02 -0600"  >&lt;p&gt;Attach tiny patch to add filename and line number to warning about def of non-dynamic var with *&apos;s in the name (earmuffs)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10727" name="0001-Add-file-and-line-number-to-earmuff-warning.-CLJ-882.patch" size="1334" author="chouser@n01se.net" created="Wed, 30 Nov 2011 12:54:02 -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-881] Problem with the &quot;cl-format&quot; function from the clojure.pprint</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-881</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Let&apos;s see the following scenario:&lt;/p&gt;

&lt;p&gt;vdim@home:~/clojure$ git log -1&lt;br/&gt;
commit ba930d95fc3a4a78c5bd6756ea483c9dac681618&lt;br/&gt;
Author: Rich Hickey &amp;lt;richhickey@gmail.com&amp;gt;&lt;br/&gt;
Date:   Sun Oct 30 10:44:55 2011 -0400&lt;/p&gt;

&lt;p&gt;    inline equiv in variadic =&lt;br/&gt;
vdim@home:~/clojure$ rlwrap java -cp clojure-1.4.0-master-SNAPSHOT.jar clojure.main&lt;br/&gt;
Clojure 1.4.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (use &apos;clojure.pprint)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (cl-format nil &quot;~12,10F&quot; 1.00000000074)&lt;br/&gt;
&quot;1.0000000007&quot;&lt;br/&gt;
user=&amp;gt; (cl-format nil &quot;~12,10F&quot; 1.00000000076)&lt;br/&gt;
NumberFormatException For input string: &quot;10000000007&quot;  java.lang.NumberFormatException.forInputString (NumberFormatException.java:65)&lt;br/&gt;
user=&amp;gt;&lt;/p&gt;


&lt;p&gt;The exception is caused from round-str function (cl-format.clj) where&lt;br/&gt;
my number (100000000076) is coerced to an Integer (see line with Integer/valueOf code&lt;br/&gt;
into this function).&lt;/p&gt;

&lt;p&gt;Is this normal behaviour?&lt;/p&gt;

&lt;p&gt;See patch with tests and my suggestion for solving this problem.&lt;/p&gt;</description>
                <environment>Linux 2.6.31-22-generic #61-Ubuntu SMP Wed Jul 28 01:57:06 UTC 2010 i686 GNU/Linux</environment>
            <key id="15020">CLJ-881</key>
            <summary>Problem with the &quot;cl-format&quot; function from the clojure.pprint</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="vdim">Vyacheslav Dimitrov</reporter>
                        <labels>
                    </labels>
                <created>Sun, 20 Nov 2011 02:47:16 -0600</created>
                <updated>Fri, 18 May 2012 20:37:04 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:37:04 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27313" author="vdim" created="Sun, 20 Nov 2011 02:49:03 -0600"  >&lt;p&gt;Also I can create pull request if any.&lt;/p&gt;</comment>
                    <comment id="27706" author="jafingerhut" created="Sun, 12 Feb 2012 02:29:18 -0600"  >&lt;p&gt;I&apos;ve modified Vyacheslav&apos;s patch so that it is in the proper format.  I also changed his implementation of function inc-s so that it should allocate a bit less memory, and removed an addition of a redundant test case that is in his patch.  There is a bug he has found here, and I&apos;ve verified that this patch fixes it.&lt;/p&gt;</comment>
                    <comment id="28014" author="jafingerhut" created="Mon, 26 Mar 2012 17:04:41 -0500"  >&lt;p&gt;clj-881-cl-format-exception-patch2.txt Mar 26, 2012 applies cleanly to latest master, and fixes the problem in the same way as my Feb 12, 2012 patch (since deleted to avoid confusion).  I am the author, and have signed a CA.&lt;/p&gt;</comment>
                    <comment id="28053" author="tomfaulhaber" created="Thu, 29 Mar 2012 20:15:36 -0500"  >&lt;p&gt;This patch looks good to me. I recommend we apply it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11010" name="clj-881-cl-format-exception-patch2.txt" size="3112" author="jafingerhut" created="Mon, 26 Mar 2012 17:04:41 -0500" />
                    <attachment id="10710" name="patchfile" size="2743" author="vdim" created="Sun, 20 Nov 2011 02:47:16 -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-879] Allow :require to support a :refer clause</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-879</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There&apos;s been discussion previously about the complexity of the ns&lt;br/&gt;
macro. In particular the fact that :use causes all vars to be referred&lt;br/&gt;
by default is widely seen as unfortunate, and the distinction between&lt;br/&gt;
use and require is a source of conceptual overhead for people new to&lt;br/&gt;
the language.&lt;/p&gt;

&lt;p&gt;We can&apos;t change the fact that :use refers everything by default&lt;br/&gt;
without breaking lots of existing code. But it would be possible to&lt;br/&gt;
enhance :require to support referring specified vars, leaving us free&lt;br/&gt;
to deprecate or otherwise discourage the use of :use.&lt;/p&gt;

&lt;p&gt;Clojure-dev thread discussing this: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/91b708ddb909affd&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/91b708ddb909affd&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15015">CLJ-879</key>
            <summary>Allow :require to support a :refer clause</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="technomancy">Phil Hagelberg</assignee>
                                <reporter username="technomancy">Phil Hagelberg</reporter>
                        <labels>
                        <label>patch,</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 17 Nov 2011 16:08:40 -0600</created>
                <updated>Fri, 17 Feb 2012 14:18:28 -0600</updated>
                    <resolved>Fri, 17 Feb 2012 14:18:28 -0600</resolved>
                                                                    <due></due>
                    <votes>9</votes>
                        <watches>7</watches>
                        <comments>
                    <comment id="27345" author="technomancy" created="Fri, 25 Nov 2011 14:52:12 -0600"  >&lt;p&gt;Patch containing implementation, test, and documentation.&lt;/p&gt;</comment>
                    <comment id="27515" author="technomancy" created="Fri, 6 Jan 2012 14:21:19 -0600"  >&lt;p&gt;Any chance we could get some discussion going on this?&lt;/p&gt;</comment>
                    <comment id="27565" author="devinus" created="Sat, 14 Jan 2012 01:12:29 -0600"  >&lt;p&gt;I&apos;d love to see this discussed.&lt;/p&gt;</comment>
                    <comment id="27631" author="technomancy" created="Fri, 27 Jan 2012 16:42:51 -0600"  >&lt;p&gt;So... how about it? Thoughts?&lt;/p&gt;</comment>
                    <comment id="27740" author="hiredman" created="Fri, 17 Feb 2012 11:30:50 -0600"  >&lt;p&gt;patch still applies cleanly to master, tests pass&lt;/p&gt;

&lt;p&gt;there is a warning when you run the tests though:&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.keywords&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; Testing clojure.test-clojure.load&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; WARNING: with-bindings already refers to: #&apos;clojure.core/with-bindings in namespace: clojure.test-clojure.require-scratch, being replaced by: #&apos;clojure.main/with-bindings&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; Testing clojure.test-clojure.logic&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; Testing clojure.test-clojure.macros&lt;/p&gt;</comment>
                    <comment id="27743" author="stuart.sierra" created="Fri, 17 Feb 2012 13:36:58 -0600"  >&lt;p&gt;Vetted. Patch is good, although it needs docstring updates in &apos;require&apos;&lt;/p&gt;</comment>
                    <comment id="27745" author="stuart.sierra" created="Fri, 17 Feb 2012 13:55:39 -0600"  >&lt;p&gt;Not Vetted. I can&apos;t remember what the names mean. Ready for Rich. That&apos;s &quot;Test&quot; right?&lt;/p&gt;</comment>
                    <comment id="27747" author="stuart.sierra" created="Fri, 17 Feb 2012 13:59:22 -0600"  >&lt;p&gt;My mistake. The docstring is included in &apos;require&apos;, but not in &apos;refer&apos;, which also changed. But the &lt;b&gt;public API&lt;/b&gt; of &apos;refer&apos; did not change. So this patch is good.&lt;/p&gt;</comment>
                    <comment id="27748" author="stuart.sierra" created="Fri, 17 Feb 2012 14:08:55 -0600"  >&lt;p&gt;Not &quot;Test.&quot; Screened. The patch is Screened. I hate this.&lt;/p&gt;</comment>
                    <comment id="27751" author="stuart.sierra" created="Fri, 17 Feb 2012 14:18:28 -0600"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10716" name="0001-Allow-require-to-take-a-refer-option.patch" size="3422" author="technomancy" created="Fri, 25 Nov 2011 14:52:12 -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-876] #^:dynamic vars declared in a nested form are not immediately dynamic</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-876</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/890202da5db0fe1/e34819de71c6ea24?hl=en&amp;amp;lnk=gst&amp;amp;q=micah#e34819de71c6ea24&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/890202da5db0fe1/e34819de71c6ea24?hl=en&amp;amp;lnk=gst&amp;amp;q=micah#e34819de71c6ea24&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following snippet throws an error stating that p is unbound.&lt;/p&gt;

&lt;p&gt;(list&lt;br/&gt;
  (declare ^:dynamic p)&lt;br/&gt;
  (defn q [] @p))&lt;br/&gt;
(binding &lt;span class=&quot;error&quot;&gt;&amp;#91;p (atom 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (q))&lt;/p&gt;</description>
                <environment>All</environment>
            <key id="15007">CLJ-876</key>
            <summary>#^:dynamic vars declared in a nested form are not immediately dynamic</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="slagyr">Micah Martin</assignee>
                                <reporter username="slagyr">Micah Martin</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Nov 2011 09:55:19 -0600</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27293" author="slagyr" created="Mon, 14 Nov 2011 10:10:07 -0600"  >&lt;p&gt;Rich fixed: &lt;a href=&quot;https://github.com/clojure/clojure/commit/535907eb2be47eaee0c385ae16436f39d52ffa96&quot;&gt;https://github.com/clojure/clojure/commit/535907eb2be47eaee0c385ae16436f39d52ffa96&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27406" author="stu" created="Fri, 2 Dec 2011 14:01:18 -0600"  >&lt;p&gt;test for fix already made&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10704" name="micah_testing_876.diff" size="1351" author="slagyr" created="Mon, 14 Nov 2011 10:10:07 -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-874] defrecord factory inaccessibly from within type implementation</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-874</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Discovered this issue working through &lt;a href=&quot;https://github.com/relevance/labrepl&quot;&gt;https://github.com/relevance/labrepl&lt;/a&gt; when trying to use the new factory sytax for records:&lt;/p&gt;

&lt;p&gt;(defprotocol Player&lt;br/&gt;
  (choose &lt;span class=&quot;error&quot;&gt;&amp;#91;p&amp;#93;&lt;/span&gt;)&lt;br/&gt;
  (update-strategy &lt;span class=&quot;error&quot;&gt;&amp;#91;p me you&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;(defrecord Mean &lt;span class=&quot;error&quot;&gt;&amp;#91;last-winner&amp;#93;&lt;/span&gt;&lt;br/&gt;
&#160;&#160;Player&lt;br/&gt;
&#160;&#160;(choose &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; (if last-winner last-winner (random-choice)))&lt;br/&gt;
&#160;&#160;(update-strategy &lt;span class=&quot;error&quot;&gt;&amp;#91;_ me you&amp;#93;&lt;/span&gt; (-&amp;gt;Mean (when (iwon? me you) me))))&lt;/p&gt;

&lt;p&gt;Notice that Mean returns a new instance with a different strategy.  However, the factory methods are not defined until after the record has been created thus this results in a syntax error.  To fix this I updated the macro to declare the factory methods before the record is emitted.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15001">CLJ-874</key>
            <summary>defrecord factory inaccessibly from within type implementation</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="kurtharriger">Kurt Harriger</reporter>
                        <labels>
                        <label>Compiler</label>
                    </labels>
                <created>Fri, 11 Nov 2011 11:31:52 -0600</created>
                <updated>Fri, 2 Dec 2011 09:03:00 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:03:00 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>4</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27275" author="kurtharriger" created="Fri, 11 Nov 2011 11:33:20 -0600"  >&lt;p&gt;On github: &lt;a href=&quot;https://github.com/kurtharriger/clojure/tree/fix-defrecord&quot;&gt;https://github.com/kurtharriger/clojure/tree/fix-defrecord&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27336" author="hiredman" created="Mon, 21 Nov 2011 13:19:41 -0600"  >&lt;p&gt;looks good to me&lt;/p&gt;</comment>
                    <comment id="27348" author="aaron" created="Sat, 26 Nov 2011 11:58:45 -0600"  >&lt;p&gt;Screened against e58a87fac72ed4b84a1d92f1e455b92d7ed3ef39&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10693" name="defrecord-patch.diff" size="927" author="kurtharriger" created="Fri, 11 Nov 2011 11:31:52 -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-872] Add support for property lookup</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-872</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Add support for property lookups to match functionality introduced in ClojureScript with &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-89&quot; title=&quot;Simplify the dot access special form.&quot;&gt;&lt;del&gt;CLJS-89&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is a breaking change for Clojure with record/type fields that start with &quot;-&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14916">CLJ-872</key>
            <summary>Add support for property lookup</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="fogus">Fogus</assignee>
                                <reporter username="alan@thinkrelevance.com">Alan Dipert</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Nov 2011 15:27:30 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Fri, 16 Dec 2011 14:04:04 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27197" author="alan@thinkrelevance.com" created="Fri, 4 Nov 2011 16:17:04 -0500"  >&lt;p&gt;Attached &lt;tt&gt;872-add-prop-lookup.patch&lt;/tt&gt;.  It&apos;s a first cut that Fogus and I worked on.  It needs tests.&lt;/p&gt;</comment>
                    <comment id="27273" author="fogus" created="Wed, 9 Nov 2011 12:03:02 -0600"  >&lt;p&gt;Tests for prop lookup.&lt;/p&gt;</comment>
                    <comment id="27306" author="fogus" created="Wed, 16 Nov 2011 09:10:34 -0600"  >&lt;p&gt;Ready for screening.&lt;/p&gt;</comment>
                    <comment id="27441" author="stu" created="Fri, 9 Dec 2011 10:29:18 -0600"  >&lt;p&gt;Can you explain the compiler change? It appears to implement the desired functionality, but also to disable a code path that allows keywords for field lookup (the block at line 892 can no longer be reached by a keyword).&lt;/p&gt;</comment>
                    <comment id="27444" author="fogus" created="Fri, 9 Dec 2011 12:28:45 -0600"  >&lt;p&gt;Clojure has for a while secretly allowed kw lookup for field access.  However, in the discussions with Rich and Clojure/dev at &lt;a href=&quot;http://dev.clojure.org/display/design/Unified+ClojureScript+and+Clojure+field+access+syntax&quot;&gt;http://dev.clojure.org/display/design/Unified+ClojureScript+and+Clojure+field+access+syntax&lt;/a&gt; it was decided to use &lt;tt&gt;-prop&lt;/tt&gt; across CLJ and CLJS thus obviating the need for kw access.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10598" name="872-add-prop-lookup.patch" size="4022" author="alan@thinkrelevance.com" created="Fri, 4 Nov 2011 16:17:04 -0500" />
                    <attachment id="10691" name="CLJ-872-prop-lookup-tests.patch" size="960" author="fogus" created="Wed, 9 Nov 2011 12:03:02 -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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-871] instant literal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-871</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/pages/viewpage.action?pageId=950382&quot;&gt;http://dev.clojure.org/pages/viewpage.action?pageId=950382&lt;/a&gt; for design discussion.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14915">CLJ-871</key>
            <summary>instant literal</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>Fri, 4 Nov 2011 12:48:37 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:05:21 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27195" author="stu" created="Fri, 4 Nov 2011 12:59:21 -0500"  >&lt;p&gt;I have tested patch locally with no Joda, 1.6.2 Joda, and 2.0 Joda. All work as intended in simple invocations.&lt;/p&gt;

&lt;p&gt;Seeking feedback on &lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;UTC at the door. Goal is to stay out of localization business. Is that a good goal, and is that the right way to achieve it?&lt;/li&gt;
	&lt;li&gt;idiom for dynamically loading code based on whether Joda on classpath&lt;/li&gt;
	&lt;li&gt;idiom for conveying maven classpath into the ant part of the build. People using ant will have to configure path locally to include Joda.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27196" author="hiredman" created="Fri, 4 Nov 2011 13:37:31 -0500"  >&lt;p&gt;using a bindable var for a read time setting is kind of a drag stuff like:&lt;/p&gt;

&lt;p&gt;(binding &lt;span class=&quot;error&quot;&gt;&amp;#91;*instant-reader* some-other-instant-reader&amp;#93;&lt;/span&gt;&lt;br/&gt;
  #@2011-11-04T14:42Z)&lt;/p&gt;

&lt;p&gt;will not have the desired effect, so then what are the use cases for the bindable var? should the repl bind it? should the compiler?&lt;/p&gt;</comment>
                    <comment id="27198" author="hiredman" created="Fri, 4 Nov 2011 18:47:23 -0500"  >&lt;p&gt;dates should always be read and printed as UTC&lt;/p&gt;</comment>
                    <comment id="27199" author="abrooks" created="Sat, 5 Nov 2011 09:55:26 -0500"  >&lt;p&gt;It seems like it would be nice to have time-delta literals as well. My usage cases deal more often with time-deltas applied as intervals or offsets in time. I presume the current scheme doesn&apos;t allow for that but could be adjusted. Is that outside of the scope of this discussion?&lt;/p&gt;</comment>
                    <comment id="27200" author="richhickey" created="Sun, 6 Nov 2011 10:31:33 -0600"  >&lt;p&gt;&amp;gt; UTC at the door.&lt;/p&gt;

&lt;p&gt;No. Offsets are not localization, just arithmetic.&lt;/p&gt;

&lt;p&gt;&amp;gt;idiom for dynamically loading code based on whether Joda on classpath&lt;/p&gt;

&lt;p&gt;We&apos;ll need more explicit mechanisms for determining the programmatic representation. Dynamic Joda is just to avoid Joda as hard implementation dep.&lt;/p&gt;

&lt;p&gt;&amp;gt; People using ant will have to configure path locally to include Joda.&lt;/p&gt;

&lt;p&gt;People using ant = me.&lt;/p&gt;</comment>
                    <comment id="27281" author="bsmith.occs@gmail.com" created="Sat, 12 Nov 2011 15:10:30 -0600"  >&lt;p&gt;This patch implements instant literals of the form &lt;tt&gt;#@yyyy-mm-ddThh:mm:ss.fff+hh:mm&lt;/tt&gt; using only classes available in the JRE.&lt;/p&gt;

&lt;p&gt;clojure.instant provides instant-readers producing instances of three different JDK classes. These functions accept a string representing a timestamp See (doc clojure.instant/parse-timestamp) for details. &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;read-instant-date (java.util.Date)&lt;/li&gt;
	&lt;li&gt;read-instant-calendar (java.util.Calendar)&lt;/li&gt;
	&lt;li&gt;read-instant-timestamp (java.sql.Timestamp)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;By default &amp;#42;instant-reader&amp;#42; is bound to read-instant-date.&lt;/p&gt;

&lt;p&gt;print-method and print-dup are provided for all three types.&lt;/p&gt;

&lt;p&gt;Rough bits include:&lt;/p&gt;

&lt;p&gt;I&apos;m not yet certain about the exact public interface of clojure.instant. It&apos;s clear that read-instant-&amp;#42; need to be visible. It also seems likely that parse-timestamp and validated could usefully support alternate implementations for &amp;#42;instant-reader&amp;#42;.&lt;/p&gt;

&lt;p&gt;fixup-offset and fixup-nanos are ugly warts necessitated by Java&apos;s pathetic built-in support for dates and times (possibly exacerbated by my own misunderstandings of the same).&lt;/p&gt;

&lt;p&gt;Unit tests are very basic. For example, I&apos;m not testing validated except in the good case where everything is valid.&lt;/p&gt;

&lt;p&gt;See also &lt;a href=&quot;https://github.com/bpsm/clojure/commit/753f991151847df53d624f7c09b7113cd2321793&quot;&gt;https://github.com/bpsm/clojure/commit/753f991151847df53d624f7c09b7113cd2321793&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I&apos;ve made a few trivial fixes to doc strings, visible &lt;a href=&quot;https://github.com/bpsm/clojure/commits/CLJ-871.1&quot;&gt;on my github branch&lt;/a&gt;. Those changes will be included when  I re-roll the patch it to incorporate any feedback.&lt;/p&gt;</comment>
                    <comment id="27285" author="stuart.sierra" created="Sun, 13 Nov 2011 18:53:03 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-871&quot; title=&quot;instant literal&quot;&gt;&lt;del&gt;CLJ-871&lt;/del&gt;&lt;/a&gt;-data-readers-1.patch&lt;/p&gt;

&lt;p&gt;An alternative approach. The dynamic Var &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt; maps keywords to reader functions, triggered by reader syntax &lt;tt&gt;#:keyword&lt;/tt&gt;. Default &lt;tt&gt;#:instant&lt;/tt&gt; reader takes a vector like &lt;tt&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;year month day hrs min sec ms&amp;#93;&lt;/span&gt;&lt;/tt&gt;, all components optional.&lt;/p&gt;

&lt;p&gt;Pros: No string parsing. Extensible.&lt;/p&gt;

&lt;p&gt;Cons: Clojure 1.2 used the &lt;tt&gt;#:&lt;/tt&gt; syntax to print records.&lt;/p&gt;</comment>
                    <comment id="27596" author="fogus" created="Sat, 21 Jan 2012 09:11:54 -0600"  >&lt;p&gt;Oddly, I made another case for this.  My bad.  Attached is the updated patch based off of Ben&apos;s work.  This patch is merged into the tagged literal feature as implemented in v1.4-alpha4.  I also fixed a fence-post error and very minor doc problems.  The parser currently defaults to constructing j.u.Date instances of the following form:&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;date-year   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                         ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
                         ; rules
time-secfrac    = &apos;.&apos; 1*DIGIT
time-numoffset  = (&apos;+&apos; / &apos;-&apos;) time-hour &apos;:&apos; time-minute
time-offset     = &apos;Z&apos; / time-numoffset

time-part            = time-hour [ &apos;:&apos; time-minute [ &apos;:&apos; time-second [time-secfrac] [time-offset] ] ]

timestamp       = date-year [ &apos;-&apos; date-month [ &apos;-&apos; date-mday [ &apos;T&apos; time-part ] ] ]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or in other words, &lt;a href=&quot;http://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339 &lt;/a&gt;.&lt;/p&gt;
</comment>
                    <comment id="27624" author="stuart.sierra" created="Fri, 27 Jan 2012 08:46:46 -0600"  >&lt;p&gt;2 problems:&lt;/p&gt;

&lt;p&gt;1. You can&apos;t specify an alternate &lt;tt&gt;inst&lt;/tt&gt; reader in data_readers.clj. Doing so causes an opaque error when Clojure starts. This is a flaw in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-890&quot; title=&quot;Tagged literals in reader&quot;&gt;&lt;del&gt;CLJ-890&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt; is intended to be a map of symbols to Vars, not symbols to functions. This doesn&apos;t really matter.&lt;/p&gt;</comment>
                    <comment id="27625" author="stuart.sierra" created="Fri, 27 Jan 2012 09:24:03 -0600"  >&lt;p&gt;New patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-871&quot; title=&quot;instant literal&quot;&gt;&lt;del&gt;CLJ-871&lt;/del&gt;&lt;/a&gt;-with-defaults.patch.&lt;/p&gt;

&lt;p&gt;Fixes problems described in previous comment by adding &lt;tt&gt;default-data-readers&lt;/tt&gt; which can be overridden by &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt;. Also adds documentation for &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt;.&lt;/p&gt;</comment>
                    <comment id="27640" author="steveminer@gmail.com" created="Wed, 1 Feb 2012 14:25:26 -0600"  >&lt;p&gt;divisible? and indivisible? should be normal functions, not macros.  They&apos;re used only in leap-year? &amp;#8211; it would be pretty simple to use zero? and mod? directly there.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10597" name="0871-instant-reader.patch" size="9421" author="stu" created="Fri, 4 Nov 2011 12:59:21 -0500" />
                    <attachment id="10702" name="CLJ-871-data-readers-1.patch" size="8345" author="stuart.sierra" created="Sun, 13 Nov 2011 18:53:03 -0600" />
                    <attachment id="10698" name="CLJ-871-jre-only.diff" size="17481" author="bsmith.occs@gmail.com" created="Sat, 12 Nov 2011 15:10:30 -0600" />
                    <attachment id="10790" name="CLJ-871-with-defaults.patch" size="24472" author="stuart.sierra" created="Fri, 27 Jan 2012 09:24:03 -0600" />
                    <attachment id="10783" name="CLJ-915-instant-literals.diff" size="19377" author="fogus" created="Sat, 21 Jan 2012 09:11:54 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10013">Test</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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stuart.sierra</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-870] clojure.string/replace behaves unexpectedly when \ or $ are part of the result string</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-870</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.string/replace uses javas replace function to do it&apos;s work, the replace function has the tricky habit of &apos;double evaluating&apos; the replacement string (third argument). This means that every \ in the string (so i.e. &quot;&lt;br clear=&quot;all&quot; /&gt;&quot;) is evaluated by the java code behind replace.&lt;/p&gt;

&lt;p&gt;Since this behavior isn&apos;t documented it can lead to confusing errors, for example (made up semi real world example to explain the issue):&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;(clojure.string/replace &quot;c:/windows/&quot; #&quot;/&quot; &quot;\\&quot;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This should replace all unix folder separators with windows separators, this crashes with a index out of bound exemption since java tries to evaluate &quot;&lt;br clear=&quot;all&quot; /&gt;&quot; as a semi regexp.&lt;/p&gt;

&lt;p&gt;or&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;(println (str &quot;\&quot;&quot; (clojure.string/replace &quot;my string with \\ and \&quot; in it&quot; #&quot;[\&quot;\\]&quot; (fn [x] (str &quot;\\&quot; x))) &quot;\&quot;&quot;))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 

&lt;p&gt;The expected result would be:&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;&quot;my string with \\ and \&quot; in it&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 
&lt;p&gt;the actual result is:&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;&quot;my string with \ and &quot; in it&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This should return an &apos;escaped&apos; string, it does not since the &apos;double evaluation&apos; of the return string results in \\\\ being reduced to &lt;br clear=&quot;all&quot; /&gt; again.&lt;/p&gt;

</description>
                <environment>HW/OS/SW indipendant - issue is part of java interface</environment>
            <key id="14913">CLJ-870</key>
            <summary>clojure.string/replace behaves unexpectedly when \ or $ are part of the result string</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="licenser">Heinz N. Gies</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Nov 2011 05:28:31 -0500</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27192" author="licenser" created="Fri, 4 Nov 2011 05:31:57 -0500"  >&lt;p&gt;A working code for the replace example is: &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;(println (str &quot;\&quot;&quot; (clojure.string/replace &quot;my string with \\ and \&quot; in it&quot; #&quot;[\&quot;\\]&quot; (fn [x] (str  &quot;\\\\&quot;  (if (= x &quot;\\&quot;) &quot;\\&quot;) x))) &quot;\&quot;&quot;))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which is horribly ugly since you need to hand escape the backslash or it crashes.&lt;/p&gt;</comment>
                    <comment id="27448" author="stuart.sierra" created="Fri, 9 Dec 2011 15:31:41 -0600"  >&lt;p&gt;Vetted on 1.4.0 master. Needs patch.&lt;/p&gt;</comment>
                    <comment id="27511" author="amalloy" created="Thu, 5 Jan 2012 20:30:04 -0600"  >&lt;p&gt;No hand-escaping is necessary, just use #(java.util.regex.Matcher/quoteReplacement %).&lt;/p&gt;

&lt;p&gt;Edit: I see, we&apos;re talking about when you use a function as a replacement, not a replacement &lt;b&gt;string&lt;/b&gt; like &quot;&lt;br clear=&quot;all&quot; /&gt;x&quot; - the function&apos;s output should not be interpreted as regex replacement, I agree. Looks like it just needs a small patch in clojure.string/replace-by.&lt;/p&gt;</comment>
                    <comment id="27512" author="amalloy" created="Thu, 5 Jan 2012 20:53:14 -0600"  >&lt;p&gt;Patch and test for this issue.&lt;/p&gt;</comment>
                    <comment id="27513" author="jafingerhut" created="Fri, 6 Jan 2012 00:25:52 -0600"  >&lt;p&gt;&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;-also-fix-replace-first.patch combines Alan Malloy&apos;s two patches, and adds the same change for replace-first.  I like this change, too, and think replace and replace-first should be consistent with each other in this behavior.&lt;/p&gt;</comment>
                    <comment id="27514" author="jafingerhut" created="Fri, 6 Jan 2012 00:32:50 -0600"  >&lt;p&gt;If there is any interest in a combined patch for this issue, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-905&quot; title=&quot;clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace&quot;&gt;&lt;del&gt;CLJ-905&lt;/del&gt;&lt;/a&gt; all in one, I&apos;d be happy to merge them.&lt;/p&gt;</comment>
                    <comment id="27543" author="jafingerhut" created="Thu, 12 Jan 2012 00:05:43 -0600"  >&lt;p&gt;Proposed combined patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;, &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;, and &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-905&quot; title=&quot;clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace&quot;&gt;&lt;del&gt;CLJ-905&lt;/del&gt;&lt;/a&gt;, since they all affect the behavior of clojure.string/replace and replace-first.&lt;/p&gt;</comment>
                    <comment id="27643" author="stuart.sierra" created="Fri, 3 Feb 2012 09:15:43 -0600"  >&lt;p&gt;The 1/12/2012 combined patch is not in correct format. Please recreate, see &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt; for correct format.&lt;/p&gt;</comment>
                    <comment id="27652" author="jafingerhut" created="Sat, 4 Feb 2012 10:51:50 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;-870-905-combined-fix2.patch should have proper patch format.&lt;/p&gt;</comment>
                    <comment id="27884" author="jafingerhut" created="Tue, 28 Feb 2012 12:38:29 -0600"  >&lt;p&gt;Attaching slightly improved patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;-870-905-combined-fix3.patch, along with a README to explain in gory detail the behavior and performance changes to clojure.string/replace and clojure.string/replace-first, in case it would help anyone review the changes.  Deleting my older patches.&lt;/p&gt;</comment>
                    <comment id="29153" author="aaron" created="Tue, 14 Aug 2012 20:44:20 -0500"  >&lt;p&gt;This is a small nit pick, but re-qr is a pretty non-descriptive name. Perhaps we could change it to re-quote-replacement?&lt;/p&gt;</comment>
                    <comment id="29175" author="jafingerhut" created="Wed, 15 Aug 2012 11:19:59 -0500"  >&lt;p&gt;Patches clj-753-870-905-combined-fix4.patch dated Aug 15 2012 and the patch that Aaron reviewed, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;-870-905-combined-fix3.patch dated Feb 28 2012, are almost identical.&lt;/p&gt;

&lt;p&gt;fix3 uses the name re-qr for a function, where fix4 uses the name re-quote-replacement.  I have no strong preference for either of them.&lt;/p&gt;</comment>
                    <comment id="29177" author="jafingerhut" created="Wed, 15 Aug 2012 11:23:30 -0500"  >&lt;p&gt;Added patch addressing what I think is Aaron&apos;s reason for changing state to Incomplete, so as a result I am changing state back to its former Vetted state.  If there is something else a non-screener should be doing to bring Incomplete tickets to the attention of screeners, please let me know, and I will document it here: &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="29188" author="stuart.sierra" created="Wed, 15 Aug 2012 14:42:33 -0500"  >&lt;p&gt;I will be looking at this.&lt;/p&gt;</comment>
                    <comment id="29209" author="stuart.sierra" created="Fri, 17 Aug 2012 07:55:59 -0500"  >&lt;p&gt;Screened. This is an adequate fix for this particular problem, given the current API.&lt;/p&gt;

&lt;p&gt;However, the long and complicated docstring proves that &lt;tt&gt;replace&lt;/tt&gt; and &lt;tt&gt;replace-first&lt;/tt&gt; should each be four separate functions:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;code&lt;/tt&gt;&lt;br/&gt;
replace-char   &lt;span class=&quot;error&quot;&gt;&amp;#91;input char char&amp;#93;&lt;/span&gt;&lt;br/&gt;
replace-string &lt;span class=&quot;error&quot;&gt;&amp;#91;input string string&amp;#93;&lt;/span&gt;&lt;br/&gt;
replace-re     &lt;span class=&quot;error&quot;&gt;&amp;#91;input pattern string&amp;#93;&lt;/span&gt;&lt;br/&gt;
replace-re-by  &lt;span class=&quot;error&quot;&gt;&amp;#91;input pattern fn&amp;#93;&lt;/span&gt;&lt;br/&gt;
&lt;tt&gt;code&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;This is how these functions were originally written back in the days of clojure.contrib.str-utils. This would be a minor breaking change.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10760" name="0001-Add-tests-for-870.patch" size="964" author="amalloy" created="Thu, 5 Jan 2012 20:53:14 -0600" />
                    <attachment id="10761" name="0002-Fix-870-by-using-quoteReplacement.patch" size="1205" author="amalloy" created="Thu, 5 Jan 2012 20:53:14 -0600" />
                    <attachment id="10971" name="CLJ-753-870-905-combined-fix3.patch" size="8936" author="jafingerhut" created="Tue, 28 Feb 2012 12:38:29 -0600" />
                    <attachment id="10972" name="CLJ-753-870-905-combined-fix3.readme.txt" size="3571" author="jafingerhut" created="Tue, 28 Feb 2012 12:38:29 -0600" />
                    <attachment id="11434" name="clj-753-870-905-combined-fix4.patch" size="9071" author="jafingerhut" created="Wed, 15 Aug 2012 11:19:59 -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>
                                                                                    <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-868] core min and max should behave predictably when args include NaN</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-868</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;min&lt;/tt&gt; and &lt;tt&gt;max&lt;/tt&gt; functions in &lt;tt&gt;clojure.core&lt;/tt&gt; behave unpredictably when one or more of their arguments is &lt;tt&gt;Float/NaN&lt;/tt&gt; or &lt;tt&gt;Double/NaN&lt;/tt&gt;. This is because the current implementation assumes that &lt;tt&gt;&amp;gt;&lt;/tt&gt; provides a total ordering, but this is not the case when &lt;tt&gt;NaN&lt;/tt&gt; is added to the mix. This is an unfortunate fact of life when dealing with IEEE floating point numbers.&lt;/p&gt;

&lt;p&gt;See also the recent mailing list thread &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/31644dcf9ab643b9#&quot;&gt;&quot;clojure.core/max and NaN&quot;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;May be related to issue &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-738&quot; title=&quot;&amp;lt;= is incorrect when args include Double/NaN&quot;&gt;&lt;del&gt;CLJ-738&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14911">CLJ-868</key>
            <summary>core min and max should behave predictably when args include 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="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="bsmith.occs@gmail.com">Ben Smith-Mannschott</assignee>
                                <reporter username="bsmith.occs@gmail.com">Ben Smith-Mannschott</reporter>
                        <labels>
                    </labels>
                <created>Tue, 1 Nov 2011 09:44:04 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27187" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 10:05:35 -0500"  >&lt;p&gt;It seems to me that there are four approaches one might take to address this.&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Document the current undefined behavior of min and max in the presence of NaN.&lt;/li&gt;
	&lt;li&gt;Define that min and max will return NaN if any argument is NaN.&lt;/li&gt;
	&lt;li&gt;Define that min and max will ignore any NaN arguments.&lt;/li&gt;
	&lt;li&gt;Define that min and max will throw an exception if any argument is NaN.&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;&lt;a name=&quot;1Documentcurrentbehaviorasundefined&quot;&gt;&lt;/a&gt;1 Document current behavior as undefined&lt;/h3&gt;

&lt;p&gt;This requires no changes in the implementation, but it doesn&apos;t strike me as a desirable resolution. Why unnecessarily codify clearly confusing behavior?&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;2MakeNaNcontagious&quot;&gt;&lt;/a&gt;2 Make NaN contagious&lt;/h3&gt;

&lt;p&gt;Define &lt;tt&gt;min&lt;/tt&gt; and &lt;tt&gt;max&lt;/tt&gt; to return NaN if and only if at least one of their arguments is NaN. This seems most in keeping with the (admittedly perverse) behavior of NaN as specified.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.4&quot;&gt;JLS 4.2.4 Floating Point Operations&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An operation that overflows produces a signed infinity, an operation that underflows produces a denormalized value or a signed zero, and an operation that has no mathematically definite result produces NaN. All numeric operations with NaN as an operand produce NaN as a result. As has already been described, NaN is unordered, so a numeric comparison operation involving one or two NaNs returns false and any &amp;#33;= comparison involving NaN returns true, including x&amp;#33;=x when x is NaN.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h3&gt;&lt;a name=&quot;3LetminandmaxignoreNaNarguments&quot;&gt;&lt;/a&gt;3 Let min and max ignore NaN arguments&lt;/h3&gt;

&lt;p&gt;This means that &lt;tt&gt;(min a NaN b)&lt;/tt&gt; would be exactly equivalent to &lt;tt&gt;(min a b)&lt;/tt&gt;. It would further imply that &lt;tt&gt;(min NaN)&lt;/tt&gt; would be equivalent to &lt;tt&gt;(min)&lt;/tt&gt;, which currently throws an exception.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;4LetNaNcauseminandmaxtothrowanexception&quot;&gt;&lt;/a&gt;4 Let NaN cause min and max to throw an exception&lt;/h3&gt;

&lt;p&gt;Currently &lt;tt&gt;min&lt;/tt&gt; and &lt;tt&gt;max&lt;/tt&gt; throw an exception if given arguments that are not Numeric. One might plausibly argue that NaN is not numeric.&lt;/p&gt;
</comment>
                    <comment id="27188" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 11:05:15 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-868&quot; title=&quot;core min and max should behave predictably when args include NaN&quot;&gt;&lt;del&gt;CLJ-868&lt;/del&gt;&lt;/a&gt;-contagious-NaN.patch &lt;/p&gt;

&lt;p&gt;(Implementation corresponds to variant 2 from my earlier comment.)&lt;/p&gt;</comment>
                    <comment id="27189" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 13:12:04 -0500"  >&lt;p&gt;This implements the third variant described above with one difference:&lt;/p&gt;

&lt;p&gt;When when all arguments are NaN we don&apos;t throw a exception, but return NaN instead.&lt;/p&gt;

&lt;p&gt;(min) and (max) still throw an exception, however.&lt;/p&gt;

&lt;p&gt;This fell out of the implementation naturally and I couldn&apos;t see a good reason to prefer one behavior to another.&lt;/p&gt;</comment>
                    <comment id="27398" author="stu" created="Fri, 2 Dec 2011 12:38:01 -0600"  >&lt;p&gt;The contagious version of the patch seems to me the right approach, assuming fidelity to Java (e.g. Math/max and Math/min) is the standard.&lt;/p&gt;</comment>
                    <comment id="27435" author="richhickey" created="Fri, 9 Dec 2011 09:28:32 -0600"  >&lt;p&gt;contagious ok&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10594" name="CLJ-868-contagious-NaN.patch" size="8086" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 11:05:15 -0500" />
                    <attachment id="10596" name="CLJ-868-ignore-NaN.patch" size="8738" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 13:12:04 -0500" />
                    <attachment id="10595" name="CLJ-868-throw-exception-on-NaN.patch" size="8558" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 12:15: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-867] Records of different types with the same data have the same hashcodes, even though they are not considered to be equal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-867</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Records which contain the same field values are not considered to be equal, but the record type is not currently included in the hash.  This means that if an heterogenous map contains records of different types, where the fields aren&apos;t necessarily distinct, there is a high likelyhood of hash collisions.&lt;/p&gt;

&lt;p&gt;I propose that the record type should be included in the hash code algorithm for records.  There should be no expectation that unequal records of different types should have the same hash-code.&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (hash (-&amp;gt;A 1))&lt;br/&gt;
1013911913&lt;br/&gt;
user=&amp;gt; (hash (-&amp;gt;B 1))&lt;br/&gt;
1013911913&lt;br/&gt;
user=&amp;gt; (= (&lt;del&gt;&amp;gt;A 1) (&lt;/del&gt;&amp;gt;B 1))&lt;br/&gt;
false&lt;/p&gt;


&lt;p&gt;This issue also affects ClojureScript.  But see &lt;a href=&quot;#CLJS-97&quot;&gt;CLJS-97&lt;/a&gt;, as ClojureScript also has an issue with record equality.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14910">CLJ-867</key>
            <summary>Records of different types with the same data have the same hashcodes, even though they are not considered to be equal</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="djpowell">David Powell</reporter>
                        <labels>
                    </labels>
                <created>Sun, 30 Oct 2011 06:39:17 -0500</created>
                <updated>Fri, 18 May 2012 20:37:11 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:37:11 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27186" author="djpowell" created="Sun, 30 Oct 2011 07:27:32 -0500"  >&lt;p&gt;Potential patch to xor the hash of the record symbol name with the current hash obtained from the data&lt;/p&gt;</comment>
                    <comment id="28136" author="richhickey" created="Fri, 13 Apr 2012 09:43:38 -0500"  >&lt;p&gt;You can&apos;t change hashCode w/o breaking Map semantics. But you can implement IHashEq and do this in hasheq()&lt;/p&gt;</comment>
                    <comment id="28222" author="brentonashworth" created="Sat, 21 Apr 2012 17:23:21 -0500"  >&lt;p&gt;Added patch&lt;/p&gt;

&lt;p&gt;clj-867-incorporate-record-name-into-hash-code.txt&lt;/p&gt;

&lt;p&gt;which implements IHashEq for records, incorporating the record name into the hash code in the hasheq method.&lt;/p&gt;

&lt;p&gt;With this patch you will now see the following behavior:&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; (defrecord A [x])
user.A
user=&amp;gt; (defrecord B [x])
user.B
user=&amp;gt; (= (-&amp;gt;B 1) (-&amp;gt;A 1))
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (= (hash (-&amp;gt;B 1)) (hash (-&amp;gt;A 1)))
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10593" name="0001-CLJ-867-Incorporate-the-record-name-into-the-hash-co.patch" size="1478" author="djpowell" created="Sun, 30 Oct 2011 07:27:32 -0500" />
                    <attachment id="11085" name="clj-867-incorporate-record-name-into-hash-code.txt" size="1535" author="brentonashworth" created="Sat, 21 Apr 2012 17:17: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-861] PersistentHashMap uses a hashing function that is incongruent with the equality function it uses</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-861</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;PersistentHashMap hashes its keys with Util.hash which simply calls Object.hashCode, but it compares its keys for equality using Util.equiv.  This means:&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; (clojure.lang.Util/equiv (Integer. -1) (Long. -1))
true
user=&amp;gt; (= (clojure.lang.Util/hash (Integer. -1)) (clojure.lang.Util/hash (Long. -1)))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which breaks the contract of a hash table (keys that are equal should hash to values that are equal).&lt;/p&gt;

&lt;p&gt;The following bad behavior results:&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; (def bad-map (clojure.lang.PersistentHashMap/create {(Long. -1) :here}))
#&apos;user/bad-map
user=&amp;gt; (contains? bad-map (Integer. -1))
false
user=&amp;gt; (get bad-map (Integer. -1))
nil
user=&amp;gt; (= bad-map (clojure.lang.PersistentHashMap/create {(Integer. -1) :here}))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compared 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;user=&amp;gt; (def bad-map (clojure.lang.PersistentHashMap/create {(Long. 0) :here}))
#&apos;user/bad-map
user=&amp;gt; (contains? bad-map (Integer. 0))
true
user=&amp;gt; (get bad-map (Integer. 0))
:here
user=&amp;gt; (= bad-map (clojure.lang.PersistentHashMap/create {(Long. 0) :here}))
true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This bug also infects PersistentHashSet:&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; #{(Long. 0) (Integer. 0)}
IllegalArgumentException Duplicate key: 0  clojure.lang.PersistentHashSet.createWithCheck (PersistentHashSet.java:56)
user=&amp;gt; #{(Long. -1) (Integer. -1)}
#{-1 -1}
user=&amp;gt; (contains? #{(Long. 0)} (Integer. 0))
true
user=&amp;gt; (contains? #{(Long. -1)} (Integer. -1))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14804">CLJ-861</key>
            <summary>PersistentHashMap uses a hashing function that is incongruent with the equality function it uses</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="richhickey">Rich Hickey</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Sun, 23 Oct 2011 05:22:22 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Sun, 23 Oct 2011 19:28:28 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27083" author="pjstadig" created="Sun, 23 Oct 2011 05:24:19 -0500"  >&lt;p&gt;There may be a couple different ways to fix this.  I think what would work is adding a Util.hashEquiv method that has the same equality semantics as Util.equiv and using that to hash keys instead.&lt;/p&gt;

&lt;p&gt;I&apos;d be glad to create a patch for that.&lt;/p&gt;</comment>
                    <comment id="27085" author="pjstadig" created="Sun, 23 Oct 2011 19:28:27 -0500"  >&lt;p&gt;This ticket can be closed now.  It is fixed by &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;</comment>
                    <comment id="27086" author="richhickey" created="Sun, 23 Oct 2011 19:28:29 -0500"  >&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;</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-860] Add ability to disable locals clearing</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-860</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When using a debugger, it is useful to be able to see all variable values.  Locals clearing reduces the number of variabls that are non-nil, and makes uncertain whether nil values are real or an artifact of locals clearing.&lt;/p&gt;

&lt;p&gt;Please add a mechanism for disabling locals clearing.&lt;/p&gt;

&lt;p&gt;The attached patch does this by introducing the &lt;b&gt;disable-locals-clearing&lt;/b&gt; var, and using it to initialise the canBeCleared field of LocalBinding.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14802">CLJ-860</key>
            <summary>Add ability to disable locals clearing</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="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Oct 2011 13:20:11 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Tue, 13 Mar 2012 10:15:49 -0500</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>7</votes>
                        <watches>10</watches>
                        <comments>
                    <comment id="27183" author="abrooks" created="Sat, 29 Oct 2011 12:19:08 -0500"  >&lt;p&gt;+1&lt;/p&gt;

&lt;p&gt;The ability to debug is greatly degraded when locals on lower stack frames have already been cleared. I&apos;ll apply this patch and will test in the next few days.&lt;/p&gt;</comment>
                    <comment id="27399" author="stu" created="Fri, 2 Dec 2011 12:43:38 -0600"  >&lt;p&gt;It seems we might have a number of new debug settings ahead. Are there other approaches besides filling the core namespace? Names in a different namespace? A single name in core that points to a map?&lt;/p&gt;</comment>
                    <comment id="27400" author="technomancy" created="Fri, 2 Dec 2011 12:50:42 -0600"  >&lt;p&gt;We could have this triggered by system properties. We&apos;ve talked about having a clojure.debug system property; it would make sense to have this set a number of other properties including one specifically for locals clearing.&lt;/p&gt;</comment>
                    <comment id="27401" author="hugoduncan" created="Fri, 2 Dec 2011 13:07:25 -0600"  >&lt;p&gt;From a user perspective, I would like to be able to control locals clearing on a fine grained basis. In slime, for instance, C-u C-c C-c could be used to compile with locals disabled.  This would improve the possibilities for debugging code that required locals clearing to work properly.&lt;/p&gt;

&lt;p&gt;To me this would suggest the use of a var (though the var could be held in a map).&lt;/p&gt;</comment>
                    <comment id="27402" author="hiredman" created="Fri, 2 Dec 2011 13:21:14 -0600"  >&lt;p&gt;clojure.settings/&lt;b&gt;disable-locals-clearing&lt;/b&gt; sounds good to me&lt;/p&gt;</comment>
                    <comment id="27409" author="santiago" created="Fri, 2 Dec 2011 14:58:46 -0600"  >&lt;p&gt;I much prefer either the clojure.settings namespace (or similar), or the map of options. I think what Hugo is describing as an important use case to keep in mind, but also, if Clojure itself has the facilities to handle this functionality, I don&apos;t see any reason to tie it to Java&apos;s property system. If compilation options proliferate, it doesn&apos;t seem unlikely to me that multiple target Clojures (CLR, CLJS) might also use similar flags, and by keeping it in Clojure it could make that simpler to deal with. &lt;/p&gt;

&lt;p&gt;Hugo also pointed out to me privately that we could also make these vars be initialized from system properties, which seems to me like it would get a lot of the convenience you would get from having this based on system properties. &lt;/p&gt;

&lt;p&gt;Finally, I&apos;d just like to say that I think clojure.settings/locals-clearing, default: true sounds a little better to me. It would make code using that variable a little clearer because then the enable/disable matches the true/false value it holds. &lt;/p&gt;
</comment>
                    <comment id="27410" author="stuart.sierra" created="Fri, 2 Dec 2011 15:31:09 -0600"  >&lt;p&gt;The proliferation of dynamic Vars in core has concerned me too. Java System Properties are nice for Java interop, but they can only have String values and they lack thread-local binding semantics.&lt;/p&gt;

&lt;p&gt;A dynamic map would work, but binding it correctly is more complicated:&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;(binding [*settings* (merge *settings* {...})] ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This could be mitigated with a macro.&lt;/p&gt;

&lt;p&gt;A namespace for settings is convenient for documentation purposes, but what about the cost of dynamic Vars? If they&apos;re only used at compile-time, it doesn&apos;t really matter, but a single Var lookup is still cheaper than many.&lt;/p&gt;</comment>
                    <comment id="27462" author="technomancy" created="Tue, 13 Dec 2011 12:11:51 -0600"  >&lt;p&gt;Are we really concerned about thread-locality when dealing with compiler settings? Concurrent compilation already has issues with transactionality, so I got the impression that it&apos;s not encouraged. I don&apos;t see the string limitation being a problem here, but perhaps there are other use cases where it would be annoyingly limiting?&lt;/p&gt;</comment>
                    <comment id="27474" author="stuart.sierra" created="Fri, 16 Dec 2011 07:58:58 -0600"  >&lt;p&gt;Phil wrote: &lt;em&gt;Are we really concerned about thread-locality when dealing with compiler settings?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We aren&apos;t necessarily concerned with thread-locality, although the compiler itself a lot of dynamically-scoped Vars internally. For external use, all we really need is scoped, temporary settings, so Java system properties would work with some helper macrology like with-properties.&lt;/p&gt;

&lt;p&gt;The string limitation isn&apos;t a problem right now, but it could be annoying if we added something like CL feature-test expressions.&lt;/p&gt;</comment>
                    <comment id="27840" author="hugoduncan" created="Fri, 24 Feb 2012 12:34:35 -0600"  >&lt;p&gt;Inverts the logic of the previous patch and uses &lt;b&gt;enable-locals-clearing&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;I&apos;m unclear as to what the consensus is on how to avoid var proliferation.&lt;/p&gt;</comment>
                    <comment id="27855" author="hugoduncan" created="Fri, 24 Feb 2012 16:19:28 -0600"  >&lt;p&gt;This patch implements &lt;tt&gt;&lt;b&gt;compiler-options&lt;/b&gt;&lt;/tt&gt; as a map with the &lt;tt&gt;:locals-clearing&lt;/tt&gt; key.&lt;br/&gt;
The initialisation is via the value of the &lt;tt&gt;clojure.compile.locals-clearing&lt;/tt&gt; system property.&lt;/p&gt;</comment>
                    <comment id="27857" author="hugoduncan" created="Fri, 24 Feb 2012 16:22:25 -0600"  >&lt;p&gt;0001-add-compiler-options-map.diff&lt;/p&gt;

&lt;p&gt;Implements &lt;tt&gt;&lt;b&gt;compiler-options&lt;/b&gt;&lt;/tt&gt; as a map, with a :locals-clearing key, initialised from the &lt;tt&gt;clojure.compile.locals-clearing&lt;/tt&gt; system property.&lt;/p&gt;</comment>
                    <comment id="27926" author="jafingerhut" created="Fri, 9 Mar 2012 09:39:43 -0600"  >&lt;p&gt;Just a note that all 3 patches attached right now fail to apply cleanly using &apos;git --keep-cr -s &amp;lt; patchfile.txt&apos; to latest master as of March 9, 2012.  Any consensus on which of these approaches to take?  I can update that one if so.&lt;/p&gt;</comment>
                    <comment id="27937" author="richhickey" created="Tue, 13 Mar 2012 10:15:49 -0500"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/4036c7720949cb21ccf53c5c7c54ed1daaff2fda&quot;&gt;https://github.com/clojure/clojure/commit/4036c7720949cb21ccf53c5c7c54ed1daaff2fda&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27973" author="george" created="Wed, 21 Mar 2012 00:14:04 -0500"  >&lt;p&gt;Per RH&apos;s request, I tested this with CDT, and confirmed it works there.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10961" name="0001-add-compiler-options-map.diff" size="4592" author="hugoduncan" created="Fri, 24 Feb 2012 16:19:28 -0600" />
                    <attachment id="10494" name="add-disable-locals-clearing.diff" size="1677" author="hugoduncan" created="Fri, 21 Oct 2011 13:20:12 -0500" />
                    <attachment id="10960" name="add-enable-locals-clearing.diff" size="1655" author="hugoduncan" created="Fri, 24 Feb 2012 12:34:34 -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-857] CLJ-791 caused some compiler breakage</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-857</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Stuart Halloway reports:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here&apos;s a short example showing the problem (against master):&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;(require &apos;[clojure.java.jdbc :as jdbc])
(set! *warn-on-reflection* true)
(jdbc/resultset-seq
 (-&amp;gt; (jdbc/connection)
    (.getMetadata)
    (.getColumns nil nil &quot;foo&quot; nil)))

Reflection warning, NO_SOURCE_PATH:8 - reference to field getMetadata can&apos;t be resolved.

NullPointerException
       clojure.lang.Compiler.expandArrayClassname (Compiler.java:2265)
       clojure.lang.Compiler.signatureString (Compiler.java:2275)
       clojure.lang.Compiler$InstanceMethodExpr.&amp;lt;init&amp;gt; (Compiler.java:1366)
       clojure.lang.Compiler$HostExpr$Parser.parse (Compiler.java:912)
       clojure.lang.Compiler.analyzeSeq (Compiler.java:6437)
       clojure.lang.Compiler.analyze (Compiler.java:6244)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The NPE does not occur if the call the getMetadata is in a simpler expression.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;See also &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-791&quot; title=&quot;Include argument type info in reflection warnings and method signatures in dispatch compilation errors&quot;&gt;&lt;del&gt;CLJ-791&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14701">CLJ-857</key>
            <summary>CLJ-791 caused some compiler breakage</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="bsmith.occs@gmail.com">Ben Smith-Mannschott</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Oct 2011 03:45:46 -0500</created>
                <updated>Tue, 25 Oct 2011 17:32:26 -0500</updated>
                    <resolved>Tue, 25 Oct 2011 17:32:26 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26972" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 03:49:24 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-857&quot; title=&quot;CLJ-791 caused some compiler breakage&quot;&gt;&lt;del&gt;CLJ-857&lt;/del&gt;&lt;/a&gt;.patch&lt;br/&gt;
&quot;teach expandArrayClassname to handle null Classes&quot;&lt;/p&gt;</comment>
                    <comment id="26975" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 11:38:37 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-857&quot; title=&quot;CLJ-791 caused some compiler breakage&quot;&gt;&lt;del&gt;CLJ-857&lt;/del&gt;&lt;/a&gt;.patch&lt;br/&gt;
Now includes a test from Chas Emerick.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10392" name="CLJ-857.patch" size="2121" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 11:38: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-856] Building Clojure (git head) on JDK7 fails</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-856</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;lnostdal@blackbox:~/programming/clojure$ ant&lt;br/&gt;
Buildfile: /home/lnostdal/programming/clojure/build.xml&lt;/p&gt;

&lt;p&gt;clean:&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;delete&amp;#93;&lt;/span&gt; Deleting directory /home/lnostdal/programming/clojure/target&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;delete&amp;#93;&lt;/span&gt; Deleting /home/lnostdal/programming/clojure/clojure-1.4.0-master-SNAPSHOT.jar&lt;br/&gt;
   &lt;span class=&quot;error&quot;&gt;&amp;#91;delete&amp;#93;&lt;/span&gt; Deleting /home/lnostdal/programming/clojure/clojure.jar&lt;/p&gt;

&lt;p&gt;init:&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;mkdir&amp;#93;&lt;/span&gt; Created dir: /home/lnostdal/programming/clojure/target/classes&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;mkdir&amp;#93;&lt;/span&gt; Created dir: /home/lnostdal/programming/clojure/target/classes/clojure&lt;/p&gt;

&lt;p&gt;compile-java:&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;javac&amp;#93;&lt;/span&gt; /home/lnostdal/programming/clojure/build.xml:39: warning: &apos;includeantruntime&apos; was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;javac&amp;#93;&lt;/span&gt; Compiling 144 source files to /home/lnostdal/programming/clojure/target/classes&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;javac&amp;#93;&lt;/span&gt; javac: target release 1.5 conflicts with default source release 1.7&lt;/p&gt;

&lt;p&gt;BUILD FAILED&lt;br/&gt;
/home/lnostdal/programming/clojure/build.xml:39: Compile failed; see the compiler error output for details.&lt;/p&gt;

&lt;p&gt;Total time: 0 seconds&lt;/p&gt;



&lt;p&gt;lnostdal@blackbox:~/programming/clojure$ emacs -nw build.xml &lt;br/&gt;
lnostdal@blackbox:~/programming/clojure$ git diff&lt;br/&gt;
diff --git a/build.xml b/build.xml&lt;br/&gt;
index a693e6d..c05adf8 100644&lt;br/&gt;
&amp;#8212; a/build.xml&lt;br/&gt;
+++ b/build.xml&lt;br/&gt;
@@ -36,7 +36,7 @@&lt;br/&gt;
   &amp;lt;target name=&quot;compile-java&quot; depends=&quot;init&quot;&lt;br/&gt;
           description=&quot;Compile Java sources.&quot;&amp;gt;&lt;br/&gt;
     &amp;lt;javac srcdir=&quot;${jsrc}&quot; destdir=&quot;${build}&quot; includeJavaRuntime=&quot;yes&quot;&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;debug=&quot;true&quot; target=&quot;1.5&quot;/&amp;gt;&lt;br/&gt;
+           debug=&quot;true&quot;/&amp;gt;&lt;br/&gt;
   &amp;lt;/target&amp;gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;   &amp;lt;target name=&quot;compile-clojure&quot;&lt;/p&gt;



&lt;p&gt;lnostdal@blackbox:~/programming/clojure$ ant&lt;br/&gt;
...&lt;br/&gt;
...&lt;/p&gt;

&lt;p&gt;..and it builds OK. I don&apos;t understand the Java tools very well, but I decided to try removing &quot;target&quot; based on what I found here: &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6856165&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6856165&lt;/a&gt;&lt;/p&gt;</description>
                <environment>linux, &amp;quot;1.7.0_02-ea&amp;quot;, x86-64</environment>
            <key id="14693">CLJ-856</key>
            <summary>Building Clojure (git head) on JDK7 fails</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="lnostdal">Lars Rune N&#248;stdal</reporter>
                        <labels>
                    </labels>
                <created>Wed, 12 Oct 2011 00:31:14 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 27 Jan 2012 09:40:20 -0600</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27088" author="stu" created="Tue, 25 Oct 2011 18:03:06 -0500"  >&lt;p&gt;Based on the Sun bug link above, it seems to me we need to add the source=&quot;1.5&quot; flag if we want to be able to build on 1.7&lt;/p&gt;</comment>
                    <comment id="27489" author="tsdh" created="Fri, 23 Dec 2011 03:54:18 -0600"  >&lt;p&gt;Exactly, Stuart.  Here is a patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10752" name="0002-Set-source-level-explicitly-to-1.5-to-make-clojure-c.patch" size="1242" author="tsdh" created="Fri, 23 Dec 2011 03:54:18 -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-855] catch receives a RuntimeException rather than the expected checked exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-855</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Expressions passed to try that trigger the use of clojure.lang.Reflector result in their thrown checked exceptions being wrapped in RuntimeException.  As a result, the subsequent set of catches won&apos;t switch on the expected checked exception.&lt;/p&gt;


&lt;p&gt;Attached: patch for regression test that exposes the problem&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;(defn- get-exception [expression]
  (try (eval expression)
    nil
    (catch java.lang.Throwable t
      t)))

(deftest catch-receives-checked-exception
  (are [expression expected-exception] (= expected-exception
                                          (type (get-exception expression)))
    &quot;Eh, I&apos;m pretty safe&quot; nil
    &apos;(java.io.FileReader. &quot;CAFEBABEx0/idonotexist&quot;) java.io.FileNotFoundException)) ; fails&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Clojure ML Thread: &lt;a href=&quot;https://groups.google.com/forum/#!topic/clojure/I5l1YHVMgkI/discussion&quot;&gt;https://groups.google.com/forum/#!topic/clojure/I5l1YHVMgkI/discussion&lt;/a&gt;&lt;br/&gt;
Introduced: &lt;a href=&quot;https://github.com/clojure/clojure/commit/8fda34e4c77cac079b711da59d5fe49b74605553&quot;&gt;https://github.com/clojure/clojure/commit/8fda34e4c77cac079b711da59d5fe49b74605553&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14692">CLJ-855</key>
            <summary>catch receives a RuntimeException rather than the expected checked 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="bsmith.occs@gmail.com">Ben Smith-Mannschott</assignee>
                                <reporter username="pmbauer">Paul Michael Bauer</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Oct 2011 20:44:25 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Wed, 29 Feb 2012 15:07:14 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="26942" author="bsmith.occs@gmail.com" created="Wed, 12 Oct 2011 02:06:09 -0500"  >&lt;p&gt;(marked up code snippet in description to display as code.)&lt;/p&gt;</comment>
                    <comment id="26945" author="bsmith.occs@gmail.com" created="Wed, 12 Oct 2011 16:23:34 -0500"  >&lt;p&gt;(This incorporates a slightly modified version of Paul Michael Bauer&apos;s&lt;br/&gt;
checked-exception-regression-test patch.)&lt;/p&gt;

&lt;p&gt;ClojureException is an RTE. RTEs that originate from Clojure all are&lt;br/&gt;
of this type. This isn&apos;t strictly necessary for this proof of concept,&lt;br/&gt;
but it seemed prudent since it seems that the lack of specificity resulting&lt;br/&gt;
from using plain RTE everywhere got us into this mess in the first place.&lt;/p&gt;

&lt;p&gt;WrappedException is a ClojureException. It is used when Clojure is&lt;br/&gt;
wrapping the underlying cause to work around Java&apos;s obsession with&lt;br/&gt;
checked exceptions. It&apos;s &lt;b&gt;always&lt;/b&gt; the underlying cause of&lt;br/&gt;
WrappedException that is relevant to catchers.&lt;/p&gt;

&lt;p&gt;Util.runtimeException(s) now returns a ClojureException&lt;br/&gt;
This is not strictly necessary for this patch to work&lt;/p&gt;

&lt;p&gt;Util.runtimeException(s,e) now returns a WrappedException.&lt;/p&gt;

&lt;p&gt;Util.runtimeException(e) now retuns a WrappedException when e is not&lt;br/&gt;
already a RuntimeException.&lt;/p&gt;

&lt;p&gt;clojure.core/treye is a macro built on top of the compiler-provided&lt;br/&gt;
special form try. (A &lt;b&gt;real&lt;/b&gt; solution to this problem would involve&lt;br/&gt;
altering the try special form itself, but this ist just a trial balloon&lt;br/&gt;
to figure out if this is the right way to go.)&lt;/p&gt;

&lt;p&gt;Paul Michael Bauer&apos;s try_catch.clj uses treye in place of try and passes.&lt;/p&gt;</comment>
                    <comment id="26951" author="hiredman" created="Wed, 12 Oct 2011 17:34:35 -0500"  >&lt;p&gt;&amp;gt;  &lt;a href=&quot;http://james-iry.blogspot.com/2010/08/on-removing-java-checked-exceptions-by.html&quot;&gt;http://james-iry.blogspot.com/2010/08/on-removing-java-checked-exceptions-by.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;seems like refactoring Reflector.java to rethrow using this approach&lt;br/&gt;
is preferable to some wrapping/unwrapping scheme&lt;/p&gt;</comment>
                    <comment id="26952" author="pmbauer" created="Wed, 12 Oct 2011 17:42:48 -0500"  >&lt;p&gt;(edit: missed Kevin&apos;s post)&lt;br/&gt;
&lt;a href=&quot;http://james-iry.blogspot.com/2010/08/on-removing-java-checked-exceptions-by.html&quot;&gt;http://james-iry.blogspot.com/2010/08/on-removing-java-checked-exceptions-by.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;d rather see Reflector.java modified to use this &quot;chucking&quot; technique than have a special try form that specially unwraps an exception and re-throws.&lt;/p&gt;

&lt;p&gt;Maybe there&apos;s a need for WrappedException, but since it&apos;s not immediately necessary if we fix Reflector, then I&apos;d rather see it in a separate commit.&lt;/p&gt;

&lt;p&gt;(I&apos;m swamped at work today and don&apos;t have time to fix Reflector myself right now)&lt;/p&gt;</comment>
                    <comment id="26954" author="bendlas" created="Wed, 12 Oct 2011 21:27:02 -0500"  >&lt;p&gt;I added Util.throwUnchecked and Util.throwCause (also Util.declareThrows and Util.invokeThrowing) as justified in &lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/4QynV81W0Qk/rIN9fYUK-AkJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/4QynV81W0Qk/rIN9fYUK-AkJ&lt;/a&gt;&lt;br/&gt;
I&apos;ve used this to fix the invoke* methods in Reflector. Please review.&lt;/p&gt;

&lt;p&gt;There are a lot of other instances in the code, where checked exceptions are runtime-ified, but that&apos;s a separate issue.&lt;/p&gt;</comment>
                    <comment id="26956" author="bsmith.occs@gmail.com" created="Thu, 13 Oct 2011 01:07:55 -0500"  >&lt;p&gt;Applying the patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt;_throw_undeclared_checked.patch produces java that can not be compiled in four places:&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;catch&lt;/span&gt; (Exception e)
  {
  Util.throwCause(e);
  }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This leaves the compiler complaining about a missing &lt;tt&gt;return&lt;/tt&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;catch&lt;/span&gt; (Exception e) 
  {
  &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; Util.throwCause(e);
  }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;compiles.&lt;/p&gt;

&lt;p&gt;Also, the patch doesn&apos;t actually cause try_catch.clj to pass. I suspect the RuntimeException being caught by try_catch.clj is not, in fact, originating from one of the four points you have corrected. (Indeed, I discovered something similar when working on my patch, but it was late, and I ended up solving it in such a way that I didn&apos;t have to find the actual source of this particular wrapped exception.) I&apos;m still investigating...&lt;/p&gt;</comment>
                    <comment id="26957" author="pmbauer" created="Thu, 13 Oct 2011 01:11:32 -0500"  >&lt;p&gt;@Herwig thanks.&lt;br/&gt;
A few issues with the patch:&lt;br/&gt;
1. doesn&apos;t build. Use &quot;return Util.throwCause(...)&quot; instead of just &quot;Util.throwCause(...)&quot;  Otherwise the compiler complains about a missing return statement.&lt;br/&gt;
2. could you observe the whitespace conventions in the rest of the Java source files (tabs for indentation)?&lt;br/&gt;
3. The semantics of throwCause are different than before.  Previously, we threw the Throwable only if t wasnt 1) null 2) an instance of Exception or 3) instance of Error.  Subtle, and maybe it&apos;s a non-issue?&lt;/p&gt;</comment>
                    <comment id="26958" author="bsmith.occs@gmail.com" created="Thu, 13 Oct 2011 01:21:15 -0500"  >&lt;p&gt;The wrapping RuntimeException that causes try_catch.clj to fail is actually coming out of &lt;tt&gt;Compiler.eval(Object,boolean)&lt;/tt&gt; without involving Reflector at all. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt; appears to be about more than just oddness in Reflector.java. My guess is it requires a more general solution.&lt;/p&gt;</comment>
                    <comment id="26959" author="bendlas" created="Thu, 13 Oct 2011 10:06:22 -0500"  >&lt;p&gt;Oh, it seems I was too fast with the second commit. That&apos;s kind of embarrassing, sorry about that.&lt;br/&gt;
Please only consider the first commit of the patch, where I implemented the chucked exception helpers.&lt;/p&gt;

&lt;p&gt;I had considered the issue with only rethrowing causes that are instances of Exception or Error. I dismissed it, because I considered it an artifact of not having chucked exceptions before. The throwCause is for unwrapping InvokationTargetExceptions and such. The only case where it could unwrap differently than the original code, is when having causes other than Exception or Error. i.e. a third subclass of Throwable, which is mostly unheard of (but should probably be unwrapped too).&lt;/p&gt;

&lt;p&gt;Rich, do you remember, if there are any further implications to the catch idiom in Reflector?&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;catch&lt;/span&gt;(Exception e)
    {
    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;(e.getCause() &lt;span class=&quot;code-keyword&quot;&gt;instanceof&lt;/span&gt; Exception)
      &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; Util.runtimeException(e.getCause());
    &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;(e.getCause() &lt;span class=&quot;code-keyword&quot;&gt;instanceof&lt;/span&gt; Error)
      &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (Error) e.getCause();
    &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; Util.runtimeException(e);
    }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;

&lt;p&gt;Regarding the actual source of the wrapping (Compiler.eval): It showed up in my `rgrep catch(Exception`, but I considered it part of the &quot;other issue&quot; (of general refactoring). In fact, I think it won&apos;t show up, mostly, because people noticed this issue when having &lt;b&gt;reflective calls&lt;/b&gt; in clojure code, &lt;b&gt;which don&apos;t use eval&lt;/b&gt;. So the test case is probably testing another source of RuntimeException wrapping.&lt;/p&gt;

&lt;p&gt;This shows, IMO, that most occurrences of `throw Util.runtimeException` should be replaced by `return Util.throwUnchecked`, but probably not all. This will require some scrutiny and careful testing. We need to consider every `catch (Exception e)` in the clj code base. &lt;/p&gt;

&lt;p&gt;I&apos;ll take a stab at it, tonight (CEST), also testing properly this time (sorry again, had some troubles with my build system yesterday)&lt;/p&gt;</comment>
                    <comment id="26962" author="bsmith.occs@gmail.com" created="Thu, 13 Oct 2011 16:21:51 -0500"  >&lt;p&gt;I&apos;ve added a unit test which provokes this issue in the Reflector, as opposed to in the Compiler by way of eval. You can browse it here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/bpsm/clojure/commits/CLJ-855&quot;&gt;https://github.com/bpsm/clojure/commits/CLJ-855&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;ve refined my patch using the &quot;try unwraps&quot; strategy. The refined patch renames Clojure&apos;s &lt;tt&gt;try&lt;/tt&gt; special form to &lt;tt&gt;try*&lt;/tt&gt; and provides &lt;tt&gt;try&lt;/tt&gt; with transparent unwrapping as a macro on top of &lt;tt&gt;try*&lt;/tt&gt;. The curious may look here: &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/bpsm/clojure/commits/CLJ-855-try-unwraps&quot;&gt;https://github.com/bpsm/clojure/commits/CLJ-855-try-unwraps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;ll post new patches after I&apos;ve had some sleep.&lt;/p&gt;

&lt;p&gt;I intend to try my hand at the &quot;sneaky throws&quot; strategy that seems to be all the rage here. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/tongue.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; My experimentation with Herwig&apos;s patch showed that it will require investigating some failing unit tests. I believe it will prove a more invasive change than &quot;try unwraps&quot;, but may be worth it. A nice challenge.&lt;/p&gt;


</comment>
                    <comment id="26971" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 00:04:43 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt;-try-unwraps.patch:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Teaches the Java portion of Clojure core to use &lt;tt&gt;WrappedException&lt;/tt&gt; (a &lt;tt&gt;RuntimeException&lt;/tt&gt;) when wrapping checked exceptions for re-throwing.&lt;/li&gt;
	&lt;li&gt;Changes &lt;tt&gt;try&lt;/tt&gt; to transparently unwrap (only!) &lt;tt&gt;WrappedException&lt;/tt&gt;, passing the cause on to be handled by one of its catch clauses. This appears to solve &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;The original behavior of the try special form (no transparent unwrapping) is still available under the name &lt;tt&gt;try*&lt;/tt&gt;.&lt;/li&gt;
&lt;/ol&gt;


</comment>
                    <comment id="26981" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 14:34:30 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt;-sneaky-throw.patch&lt;/p&gt;

&lt;p&gt;Using &quot;sneaky throw&quot; allows us to effectively rethrow checked exceptions without needing to declare or catch them. In effect, we&apos;re back to where we were before wrapping them all up in RTEs (8fda34e4c77...), but without needing to pollute seemingly every method signature in the Java portion of Clojure core with &quot;throws Exception&quot;&lt;/p&gt;

&lt;p&gt;This patch was less work than I expected (thanks be to sed) but I&apos;m not as confident in its correctness as I am in that of the try-unwrap variant. I can&apos;t claim to have really groked Clojure&apos;s approach to exceptions.&lt;/p&gt;

&lt;p&gt;I don&apos;t understand why Reflector gives preference to rethrowing the cause of the exception it catches (especially now that we&apos;re no longer wrapping all over the place.)&lt;/p&gt;

&lt;p&gt;I also don&apos;t understand why Var.dissoc returns the exception it catches rather than throwing it. (I&apos;ve left a big fat TODO comment there, which should go from any final version of this patch, should it be accepted.)&lt;/p&gt;</comment>
                    <comment id="27705" author="pjstadig" created="Fri, 10 Feb 2012 09:08:01 -0600"  >&lt;p&gt;Another option, not to make things even more complicated, is to revert the original commit.  Perhaps I&apos;m missing the rationale, but...&lt;/p&gt;

&lt;p&gt;Checked exceptions are irrelevant to Clojure code, since they are a fabrication of the Java compiler.&lt;/p&gt;

&lt;p&gt;Using Clojure code from the Java side could be confusing if you call invoke on IFn and get a checked exception even though it is not declared with a throws clause.  It is also confusing to get checked exceptions wrapped in one or more layers of RTEs.  Was it not sufficient the way it was before having IFn declare &quot;throws Exception&quot;?&lt;/p&gt;</comment>
                    <comment id="27893" author="richhickey" created="Wed, 29 Feb 2012 15:06:50 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt;-sneaky-throw.patch applied. Thanks Ben!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10380" name="checked-exception-regression-test.diff" size="2174" author="pmbauer" created="Tue, 11 Oct 2011 20:44:26 -0500" />
                    <attachment id="10395" name="CLJ-855-sneaky-throw.patch" size="22772" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 14:34:30 -0500" />
                    <attachment id="10384" name="CLJ-855_throw_undeclared_checked.patch" size="4969" author="bendlas" created="Wed, 12 Oct 2011 21:27:02 -0500" />
                    <attachment id="10390" name="CLJ-855-try-unwraps.patch" size="17047" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 00:04:43 -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-854] flatten doc incorrect</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-854</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Usage: (flatten x)&lt;br/&gt;
Takes any nested combination of sequential things (lists, vectors,&lt;br/&gt;
etc.) and returns their contents as a single, flat sequence.&lt;br/&gt;
(flatten nil) returns nil.&lt;/p&gt;

&lt;p&gt;doc string for (flatten nil) should be removed / altered.&lt;/p&gt;

&lt;p&gt;(flatten nil) &lt;br/&gt;
;=&amp;gt; ()&lt;/p&gt;</description>
                <environment></environment>
            <key id="14685">CLJ-854</key>
            <summary>flatten doc incorrect</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="bsmith.occs@gmail.com">Ben Smith-Mannschott</assignee>
                                <reporter username="chris">Chris Rosengren</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Oct 2011 01:24:02 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27074" author="bsmith.occs@gmail.com" created="Wed, 19 Oct 2011 12:45:20 -0500"  >&lt;p&gt;attached patch to &quot;document that (flatten nil) returns an empty sequence&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10491" name="CLJ-854.patch" size="791" author="bsmith.occs@gmail.com" created="Wed, 19 Oct 2011 12:45:20 -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-853] Typo in the doc of get-in function</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-853</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In &quot; where ks is a sequence of ke(ys.&quot;, &quot;ke(ys&quot; should be &quot;keys&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14684">CLJ-853</key>
            <summary>Typo in the doc of get-in function</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="jingguo">Jingguo Yao</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Oct 2011 00:58:10 -0500</created>
                <updated>Tue, 25 Oct 2011 17:50:09 -0500</updated>
                    <resolved>Tue, 25 Oct 2011 17:50:09 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27084" author="steveminer@gmail.com" created="Sun, 23 Oct 2011 15:05:28 -0500"  >&lt;p&gt;The fix is not on the current master, and not in 1.4.0-alpha1.&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-852] IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-852</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Note the following stacktrace line numbers are from the latest 1.4-snapshot, though this happens on 1.3 as well.&lt;/p&gt;

&lt;p&gt;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;user=&amp;gt; (defn foo ^long [^long x] x)
#&apos;user/foo
user=&amp;gt; (def x (inc (foo 10)))
CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: long, compiling:(NO_SOURCE_PATH:2) 
user=&amp;gt; (pst)
CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: long, compiling:(NO_SOURCE_PATH:2)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6444)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
	clojure.lang.Compiler.analyze (Compiler.java:6205)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6432)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
	clojure.lang.Compiler.access$100 (Compiler.java:37)
	clojure.lang.Compiler$DefExpr$Parser.parse (Compiler.java:492)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6437)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
	clojure.lang.Compiler.analyze (Compiler.java:6205)
	clojure.lang.Compiler.eval (Compiler.java:6497)
	clojure.lang.Compiler.eval (Compiler.java:6459)
Caused by:
IllegalArgumentException Unable to resolve classname: long
	clojure.lang.Compiler$HostExpr.tagToClass (Compiler.java:1003)
	clojure.lang.Compiler$InvokeExpr.getJavaClass (Compiler.java:3474)
	clojure.lang.Compiler.getMatchingParams (Compiler.java:2304)
	clojure.lang.Compiler$StaticMethodExpr.&amp;lt;init&amp;gt; (Compiler.java:1510)
	clojure.lang.Compiler$HostExpr$Parser.parse (Compiler.java:910)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6437)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note though that the following works fine:&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; (def x (foo (inc 10)))
#&apos;user/x
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14682">CLJ-852</key>
            <summary>IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.</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="bsmith.occs@gmail.com">Ben Smith-Mannschott</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Oct 2011 15:24:07 -0500</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="26984" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 10:13:52 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-852&quot; title=&quot;IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.&quot;&gt;&lt;del&gt;CLJ-852&lt;/del&gt;&lt;/a&gt;-test.patch &lt;br/&gt;
reproduces this issue on master&lt;/p&gt;</comment>
                    <comment id="26986" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 10:41:04 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-852&quot; title=&quot;IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.&quot;&gt;&lt;del&gt;CLJ-852&lt;/del&gt;&lt;/a&gt;-test.patch initially failed to use (is ...) leading to ugly output on failure.&lt;/p&gt;</comment>
                    <comment id="26990" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 14:59:56 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-852&quot; title=&quot;IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.&quot;&gt;&lt;del&gt;CLJ-852&lt;/del&gt;&lt;/a&gt;-rfc-fix.patch &lt;/p&gt;

&lt;p&gt;add special cases for &quot;int&quot;&#8230;&quot;boolean&quot; to tagToClass()&lt;/p&gt;

&lt;p&gt;This causes the test to pass, however, there are still some open questions:&lt;/p&gt;

&lt;p&gt;Why does tagToClass first call maybeClass and then possibly overwrite the result it gets back without even looking at it? This strikes me as surprising. I would have expected a check for null, and then only running the if/else chain of special cases if maybeClass failed to return a non-null result.&lt;/p&gt;

&lt;p&gt;The suppressed exception in maybeClass commented with &quot;//aargh&quot; makes me wonder if maybeClass and tagToClass are factored correctly.&lt;/p&gt;</comment>
                    <comment id="27087" author="stu" created="Tue, 25 Oct 2011 18:00:50 -0500"  >&lt;p&gt;This looks reasonable to me, but given the number of places tagToClass gets called I would definitely want Rich to take a look.&lt;/p&gt;</comment>
                    <comment id="27190" author="bsmith.occs@gmail.com" created="Wed, 2 Nov 2011 06:12:38 -0500"  >&lt;p&gt;See also&lt;br/&gt;
&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/f1672a7e09c34721&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/f1672a7e09c34721&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27283" author="bsmith.occs@gmail.com" created="Sun, 13 Nov 2011 09:18:53 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-852&quot; title=&quot;IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.&quot;&gt;&lt;del&gt;CLJ-852&lt;/del&gt;&lt;/a&gt;-fix.patch removes the RFC comments&lt;/p&gt;

&lt;p&gt;This fixes the issue. It appears to me like the cases &quot;int&quot; .. &quot;boolean&quot; (i.e. the non-array primitive types) were simply forgotten in tagToClass(). &lt;/p&gt;

&lt;p&gt;It&apos;s not impossible that tagToClass is being misused somehow ant that&apos;s the cause of the problem, but I see no evidence for that. (I&apos;d need a better understanding of the code base to make that determination &amp;#8211; mind reading skills would help too.)&lt;/p&gt;

&lt;p&gt;It&apos;s also conceivable that maybeClass() should be doing the resolution from primitive type to Class object, but that doesn&apos;t seem likely to me.&lt;/p&gt;</comment>
                    <comment id="27806" author="jafingerhut" created="Wed, 22 Feb 2012 21:02:15 -0600"  >&lt;p&gt;clj-852-patch2.txt is exactly the same as Ben&apos;s &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-852&quot; title=&quot;IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.&quot;&gt;&lt;del&gt;CLJ-852&lt;/del&gt;&lt;/a&gt;-fix.patch (including keeping his name and dates on the commits), except:&lt;/p&gt;

&lt;p&gt;(1) I moved his new unit tests to an already-existing file metadata.clj, which seemed to have related tests with def and metadata, whereas Ben&apos;s patch adds a brand new test file.  Not sure whether keeping the number of files down is important or not.&lt;/p&gt;

&lt;p&gt;(2) I removed some non-ASCII characters from his commit notes.&lt;/p&gt;

&lt;p&gt;Both his patch and this newer one apply cleanly to latest master as of Feb 22, 2012.  Neither adds any new errors or warnings to compilation or tests (unless you apply the new test part of the patch without his proposed compiler fix, where the new test does fail as expected).  No docstrings need changing that I can think of.  Ben and I have both signed CAs.  Patch status is &quot;Code and Test&quot;.&lt;/p&gt;</comment>
                    <comment id="27845" author="stuart.sierra" created="Fri, 24 Feb 2012 13:32:36 -0600"  >&lt;p&gt;Screened. The addition seems harmless, merely recognizing more tags in tagToClass.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10701" name="CLJ-852-fix.patch" size="4697" author="bsmith.occs@gmail.com" created="Sun, 13 Nov 2011 09:18:53 -0600" />
                    <attachment id="10940" name="clj-852-patch2.txt" size="3595" author="jafingerhut" created="Wed, 22 Feb 2012 21:02:15 -0600" />
                    <attachment id="10401" name="CLJ-852-rfc-fix.patch" size="3639" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 14:59:56 -0500" />
                    <attachment id="10398" name="CLJ-852-test.patch" size="2200" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 10:41:04 -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>
                                                                                    <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-847] mapv, filterv</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-847</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Skip the intermediate sequence step when you know the result you want is a vector, i.e.&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 mapv
  ([f coll]
     (-&amp;gt; (reduce (fn [v o] (conj! v (f o))) (transient []) coll)
         persistent!)))

(defn filterv
  [pred coll]
  (when-let [s (seq coll)]
    (-&amp;gt; (reduce (fn [v o] (if (pred o) (conj! v o) v))
                (transient [])
                coll)
        persistent!)))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14667">CLJ-847</key>
            <summary>mapv, filterv</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="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Wed, 5 Oct 2011 02:06:28 -0500</created>
                <updated>Fri, 2 Dec 2011 10:23:25 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 10:23:25 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26895" author="richhickey" created="Wed, 5 Oct 2011 06:37:47 -0500"  >&lt;p&gt;There&apos;s no perf benefit for other arities of map, so for those just define in terms of (into [] (map ...))&lt;/p&gt;

&lt;p&gt;Why when-let in filterv? Not returning a vector then. You don&apos;t even use s.&lt;/p&gt;</comment>
                    <comment id="26897" author="alan@thinkrelevance.com" created="Wed, 5 Oct 2011 21:39:28 -0500"  >&lt;p&gt;What was the problem with defining &lt;tt&gt;mapv&lt;/tt&gt; and &lt;tt&gt;filterv&lt;/tt&gt; in terms of &lt;tt&gt;reducev&lt;/tt&gt;?  This is what I had in mind:&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 reducev
  [f coll]
  (persistent! (reduce f (&lt;span class=&quot;code-keyword&quot;&gt;transient&lt;/span&gt; []) coll)))

(defn mapv
  ([f coll]
     (reducev #(conj! % (f %2)) coll))
  ([f coll &amp;amp; colls]
     (into [] (apply map f coll colls))))

(defn filterv
  [pred coll]
  (reducev #(&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (pred %2) (conj! % %2) %) coll))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26898" author="stu" created="Thu, 6 Oct 2011 06:18:19 -0500"  >&lt;p&gt;Alan: My original thought was that map and filter are boths fns from collection to collection. reduce is not, so making a reducev that pretends reduce is like map and filter is a little confusing.&lt;/p&gt;

&lt;p&gt;But looking at the code I like it.&lt;/p&gt;

&lt;p&gt;Rich: ok on both points, thanks.&lt;/p&gt;</comment>
                    <comment id="26904" author="richhickey" created="Fri, 7 Oct 2011 07:22:24 -0500"  >&lt;p&gt;The problem is - what are the semantics of reducev? Is this for the public or an implementation detail? mapv and filterv take the same f and pred as map and filter, but reducev doesn&apos;t take the same f as reduce, it requires a very special, implementation-dependent f.&lt;/p&gt;</comment>
                    <comment id="27170" author="hiredman" created="Wed, 26 Oct 2011 03:28:14 -0500"  >&lt;p&gt;why not implement in terms of reduce (inline reducev)?&lt;/p&gt;</comment>
                    <comment id="27300" author="stu" created="Tue, 15 Nov 2011 19:14:15 -0600"  >&lt;p&gt;I see no benefit in separate reducev&lt;/p&gt;</comment>
                    <comment id="27386" author="richhickey" created="Fri, 2 Dec 2011 08:12:45 -0600"  >&lt;p&gt;someone other than Stu should screen this&lt;/p&gt;</comment>
                    <comment id="27388" author="stuart.sierra" created="Fri, 2 Dec 2011 09:05:33 -0600"  >&lt;p&gt;Microbenchmark shows performance improvement:&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 [i 5] (time (dotimes [j 10000] (vec (map inc (range 100))))))
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 119.799 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 80.959 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 75.242 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 75.622 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 73.646 msecs&quot;&lt;/span&gt;
nil
user=&amp;gt; (dotimes [i 5] (time (dotimes [j 10000] (mapv inc (range 100)))))
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 199.096 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 61.737 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 49.911 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 50.421 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 48.437 msecs&quot;&lt;/span&gt;
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27389" author="stuart.sierra" created="Fri, 2 Dec 2011 09:06:09 -0600"  >&lt;p&gt;Screened by the other Stuart.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10705" name="0847-mapv-filterv.patch" size="2585" author="stu" created="Tue, 15 Nov 2011 19:13:36 -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-846] Javadoc does not detect 1.7 when setting *core-java-api*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-846</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When initializing &lt;b&gt;core-java-api&lt;/b&gt;, javadoc.clj checks whether the java specification version is 1.5; if not, it uses a url for the 1.6 docs. Unfortunately, this won&apos;t find documentation for new in 1.7 classes (such as those in the java.nio.file package).&lt;/p&gt;</description>
                <environment>Windows 7; Java 1.7</environment>
            <key id="14666">CLJ-846</key>
            <summary>Javadoc does not detect 1.7 when setting *core-java-api*</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="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Oct 2011 13:06:26 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Tue, 25 Oct 2011 17:32:18 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10376" name="CLJ-846.patch" size="1041" author="stu" created="Fri, 7 Oct 2011 12:09: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-845] Unexpected interaction between protocol extension and namespaced method keyword/symbols</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-845</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If the keywords of a protocol&apos;s method map are namespaced, the map is accepted, but lookup fails since lookup uses non-namespaced keywords.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/jira/browse/TLOG-4&quot; title=&quot;Provided implementations of logging protocols fail.&quot;&gt;&lt;del&gt;TLOG-4&lt;/del&gt;&lt;/a&gt; for an actual case of this being an issue.&lt;/p&gt;

&lt;p&gt;Work-around for namespaced keywords with &lt;tt&gt;extend&lt;/tt&gt;:&lt;br/&gt;
don&apos;t use namespaced keywords&lt;/p&gt;

&lt;p&gt;Work-around for syntax-quoting with &lt;tt&gt;extend-type&lt;/tt&gt; or &lt;tt&gt;extend-protocol&lt;/tt&gt;:&lt;br/&gt;
use &lt;tt&gt;extend&lt;/tt&gt; with non-namespaced keywords&lt;/p&gt;

&lt;p&gt;Possible solutions:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Inside &lt;tt&gt;extend&lt;/tt&gt;, remove namespace of keywords&lt;/li&gt;
	&lt;li&gt;or
	&lt;ul&gt;
		&lt;li&gt;Inside &lt;tt&gt;extend&lt;/tt&gt;, error on namespaced keywords.&lt;/li&gt;
		&lt;li&gt;Inside &lt;tt&gt;emit-hinted-impl&lt;/tt&gt;, only grab name portion of symbols before converting to keyword.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ol&gt;

</description>
                <environment></environment>
            <key id="14653">CLJ-845</key>
            <summary>Unexpected interaction between protocol extension and namespaced method keyword/symbols</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Sep 2011 19:46:43 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 16 Dec 2011 14:07:06 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26878" author="ataggart" created="Thu, 29 Sep 2011 20:01:39 -0500"  >&lt;p&gt;Simple test case to see the issue.&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; (defprotocol P
     (self [p]))
P
=&amp;gt; (extend String
     P
     {::self identity})
nil
=&amp;gt; (self &quot;foo&quot;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: No implementation of method: :self of protocol: #&apos;user/P found for class: java.lang.String&amp;gt;
=&amp;gt; (defmacro try-extend-type [c]
     `(extend-type String
        P
        (self [p#] p#)))
#&apos;user/try-extend-type
=&amp;gt; (try-extend-type String)
nil
=&amp;gt; (self &quot;foo&quot;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: No implementation of method: :self of protocol: #&apos;user/P found for class: java.lang.String&amp;gt;
=&amp;gt; (keys (get-in P [:impls String]))
(:user/self)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26905" author="richhickey" created="Fri, 7 Oct 2011 07:28:50 -0500"  >&lt;p&gt;Most of this is a non-issue. :self and :foo/self are not the same.&lt;/p&gt;

&lt;p&gt;This:&lt;/p&gt;

&lt;p&gt;&quot;Inside emit-hinted-impl, only grab name portion of symbols before converting to keyword.&quot;&lt;/p&gt;

&lt;p&gt;is the only needed change.&lt;/p&gt;</comment>
                    <comment id="27447" author="stuart.sierra" created="Fri, 9 Dec 2011 15:26:55 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10377" name="clj-845-1.patch" size="1814" author="ataggart" created="Sat, 8 Oct 2011 02:31: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-844] NPE calling keyword on map from bean</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-844</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Calling a keyword on a map returned from clojure.core/bean causes a null pointer exception if the keyword is not a key in the map:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (:a (bean {}))&lt;br/&gt;
java.lang.NullPointerException (NO_SOURCE_FILE:0)&lt;br/&gt;
user=&amp;gt; (.printStackTrace *e)&lt;br/&gt;
Caused by: java.lang.NullPointerException&lt;br/&gt;
	at clojure.core$bean$v__4765.invoke(core_proxy.clj:385)&lt;br/&gt;
	at clojure.core$bean$fn__4786.invoke(core_proxy.clj:394)&lt;br/&gt;
	at clojure.core.proxy$clojure.lang.APersistentMap$0.valAt(Unknown Source)&lt;br/&gt;
	at clojure.lang.KeywordLookupSite.fault(KeywordLookupSite.java:33)&lt;br/&gt;
	at user$eval1062.invoke(NO_SOURCE_FILE:7)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:5424)&lt;br/&gt;
	... 9 more&lt;/p&gt;

&lt;p&gt;The object returned by bean claims to be an APersistentMap FWIW:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (class (bean {}))&lt;br/&gt;
clojure.core.proxy$clojure.lang.APersistentMap$0&lt;/p&gt;</description>
                <environment></environment>
            <key id="14648">CLJ-844</key>
            <summary>NPE calling keyword on map from bean</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="steveminer@gmail.com">Steve Miner</assignee>
                                <reporter username="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Tue, 27 Sep 2011 19:00:37 -0500</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="26909" author="stu" created="Fri, 7 Oct 2011 09:41:57 -0500"  >&lt;p&gt;Bean needs a full overhaul. In my ideal world it would be deprecated out of core into some other namespace.&lt;/p&gt;</comment>
                    <comment id="26914" author="lprefontaine" created="Fri, 7 Oct 2011 23:59:14 -0500"  >&lt;p&gt;If you can sketch a bit what you have in mind, I might give it a try.&lt;br/&gt;
I have some time available and went through the pending issues, this one seems within&lt;br/&gt;
my reach.&lt;/p&gt;</comment>
                    <comment id="28189" author="steveminer@gmail.com" created="Fri, 20 Apr 2012 13:09:05 -0500"  >&lt;p&gt;The current work-around is to use a default arg like this:&lt;/p&gt;

&lt;p&gt;(:a my-bean nil)&lt;/p&gt;

&lt;p&gt;It works, but it&apos;s inconvenient and adds complexity to the handling of bean maps.&lt;/p&gt;

&lt;p&gt;Normal maps of course already return nil as the default value for a missing key.  The current bean proxy does the contains? check on the key only if there&apos;s a default value.  The patch uses the same contains? check for the single-arg version of valAt.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11069" name="0001-CLJ-844-NPE-calling-keyword-on-map-from-bean.patch" size="1432" author="steveminer@gmail.com" created="Fri, 20 Apr 2012 13:09: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-843] clojure.lang.RT should provide a loadLibrary static method</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-843</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Right now, loading native libraries in Clojure doesn&apos;t work as expected because those libraries are loaded into the classloader of the invoking class (that is, Clojure&apos;s own classloader).&lt;/p&gt;

&lt;p&gt;This problem has been discussed on the mailing list and a patch has been welcomed by Rich -&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/group/clojure/browse_thread/thread/aa72e43091ec3228?pli=1&quot;&gt;https://groups.google.com/group/clojure/browse_thread/thread/aa72e43091ec3228?pli=1&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/forum/#!topic/clojure-dev/awe7-yeieIM&quot;&gt;https://groups.google.com/forum/#!topic/clojure-dev/awe7-yeieIM&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/forum/?hl=en#!topic/clojure-dev/OFQhDKHTyrw&quot;&gt;https://groups.google.com/forum/?hl=en#!topic/clojure-dev/OFQhDKHTyrw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To fix this, I am attaching a trivial patch that implements loadLibrary in RT.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14647">CLJ-843</key>
            <summary>clojure.lang.RT should provide a loadLibrary static method</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="ghoseb">Baishampayan Ghose</reporter>
                        <labels>
                    </labels>
                <created>Mon, 26 Sep 2011 08:00:21 -0500</created>
                <updated>Fri, 2 Dec 2011 09:03:00 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:03:00 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27327" author="chouser@n01se.net" created="Sun, 20 Nov 2011 16:02:13 -0600"  >&lt;p&gt;Tests would be nice, though I can see how getting such a test to work without 3rd party deps might be difficult.&lt;/p&gt;

&lt;p&gt;My naive attempts to reproduce the problem failed.  For example, this works fine for me:&lt;br/&gt;
(System/loadLibrary &quot;hprof&quot;)&lt;/p&gt;

&lt;p&gt;Nevertheless, the patch applies cleanly and appears to be what Rich asked for, so I&apos;m setting this to &quot;screened&quot;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10373" name="0001-Add-a-static-method-loadLibrary-to-clojure.lang.RT-t.patch" size="871" author="ghoseb" created="Mon, 26 Sep 2011 08:00:22 -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-839] contains? does not work with java.util.Set</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-839</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;contains?&lt;/tt&gt; does support &lt;tt&gt;j.u.Map&lt;/tt&gt;, but not &lt;tt&gt;j.u.Set&lt;/tt&gt;. However it works with Clojure sets.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14631">CLJ-839</key>
            <summary>contains? does not work with java.util.Set</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="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Sep 2011 15:02:12 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27371" author="hiredman" created="Wed, 30 Nov 2011 05:25:35 -0600"  >&lt;p&gt;looks good&lt;/p&gt;

&lt;p&gt;patch applies cleanly, tests pass&lt;/p&gt;

&lt;p&gt;contains? working with java.util.Sets seems like a good idea&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10360" name="0001-Make-contains-work-with-java.util.Set.patch" size="2607" author="mbrandmeyer" created="Wed, 14 Sep 2011 15:02:12 -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-838] dev.clojure.org/display/doc/1. 3 renders badly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-838</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The page &lt;a href=&quot;http://dev.clojure.org/display/doc/1.3&quot;&gt;http://dev.clojure.org/display/doc/1.3&lt;/a&gt; has markup issues: &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;&lt;tt&gt;&amp;#42;earmuffs&amp;#42;&lt;/tt&gt; become &lt;b&gt;bold&lt;/b&gt;&lt;/li&gt;
	&lt;li&gt;clearly [ ] must mean something special, &apos;cause they all turn pink.&lt;/li&gt;
	&lt;li&gt;presumably there&apos;s some way to make confluence use monospace for code snippets.&lt;/li&gt;
	&lt;li&gt;I&apos;m sure confluence has some way to mark headings, but It doesn&apos;t look like &quot;==&quot; is it.&lt;/li&gt;
	&lt;li&gt;I&apos;d like to evict the &quot;frowning face&quot; from &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-751&quot; title=&quot;cl-format: ~( thows an exception with an empty string&quot;&gt;&lt;del&gt;CLJ-751&lt;/del&gt;&lt;/a&gt;&apos;s clj-format example.&lt;/li&gt;
	&lt;li&gt;2.29 seems to have suffered some encoding debacle, though I&apos;m not quite sure what happened.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Further discussion revealed that this was just a copy/paste of changes.txt in the source repository. Discussions on clojure-dev suggested the idea of recoding changes.txt to changes.md and recoding it as proper markdown so that it will be rendered nicely by github.&lt;/p&gt;

&lt;p&gt;This would make &lt;a href=&quot;http://dev.clojure.org/display/doc/1.3&quot;&gt;http://dev.clojure.org/display/doc/1.3&lt;/a&gt; obsolete, its contents could be replaced by a link to &apos;changes.md&apos; on github. That makes more sense than maintaining two copies of the document in mutually incompatible markups (markdown and whatever confluence uses).&lt;/p&gt;

&lt;p&gt;See also the following clojure-dev thread:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/ecf65c4e50d3fd76&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/ecf65c4e50d3fd76&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14630">CLJ-838</key>
            <summary>dev.clojure.org/display/doc/1. 3 renders badly</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="bsmith.occs@gmail.com">Ben Smith-Mannschott</assignee>
                                <reporter username="bsmith.occs@gmail.com">Ben Smith-Mannschott</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Sep 2011 14:11:17 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 7 Oct 2011 09:12:22 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26812" author="bsmith.occs@gmail.com" created="Wed, 14 Sep 2011 14:23:40 -0500"  >&lt;p&gt;0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-838&quot; title=&quot;dev.clojure.org/display/doc/1. 3 renders badly&quot;&gt;&lt;del&gt;CLJ-838&lt;/del&gt;&lt;/a&gt;-changes.txt-recoded-as-markdown.patch&lt;/p&gt;

&lt;p&gt;This recodes changes.txt as proper Markdown.  Text is not hard-wrapped because github&apos;s Markdown dialect handles hard line breaks differently than standard Markdown. Also, the original wasn&apos;t hard-wrapped either.&lt;/p&gt;

&lt;p&gt;0002-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-838&quot; title=&quot;dev.clojure.org/display/doc/1. 3 renders badly&quot;&gt;&lt;del&gt;CLJ-838&lt;/del&gt;&lt;/a&gt;-rename-changes.txt-changes.md.patch&lt;/p&gt;

&lt;p&gt;This patch just renames changes.txt to changes.md. I didn&apos;t want to rename and edit changes.txt in a single patch, not knowing how well git would handle that when it came time to apply the changes.&lt;/p&gt;

&lt;p&gt;0003-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-838&quot; title=&quot;dev.clojure.org/display/doc/1. 3 renders badly&quot;&gt;&lt;del&gt;CLJ-838&lt;/del&gt;&lt;/a&gt;-add-example-for-Add-docstring-support-to-def.patch&lt;/p&gt;

&lt;p&gt;Meikel Brandmeyer provided an example of docstring support in def in response to my query, so I&apos;ve included a patch to integrate that.&lt;/p&gt;</comment>
                    <comment id="26813" author="bsmith.occs@gmail.com" created="Wed, 14 Sep 2011 14:28:16 -0500"  >&lt;p&gt;I don&apos;t believe Markdown provides a good way of handling the contents section at the start of the document. I&apos;ve improvised it by just formatting the thing as if it were a code sample. &lt;/p&gt;

&lt;p&gt;Is the TOC really necessary? It&apos;s not ideal from a Don&apos;t Repeat Yourself standpoint. Also, manually maintaining the section numbers also strikes me as busy work? Can we do without?&lt;/p&gt;</comment>
                    <comment id="26814" author="bsmith.occs@gmail.com" created="Wed, 14 Sep 2011 14:28:55 -0500"  >&lt;p&gt;You can view a rendered version of &lt;tt&gt;changes.md&lt;/tt&gt; here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/bpsm/clojure/blob/CLJ-838/changes.md&quot;&gt;https://github.com/bpsm/clojure/blob/CLJ-838/changes.md&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26853" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:17 -0500"  >&lt;p&gt;patches updated for f0b092b66 &quot;more changes.txt tweaks&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10369" name="0001-changes.txt-recoded-as-markdown.patch" size="23465" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:16 -0500" />
                    <attachment id="10370" name="0002-rename-changes.txt-changes.md.patch" size="534" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:16 -0500" />
                    <attachment id="10371" name="0003-add-example-for-Add-docstring-support-to-def.patch" size="705" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:17 -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-837] java.lang.VerifyError when compiling deftype or defrecord with argument name starting with double underscore characters.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-837</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The minimal test to trigger the verification error is :&lt;/p&gt;

&lt;p&gt;(deftype t &lt;span class=&quot;error&quot;&gt;&amp;#91;__&amp;#93;&lt;/span&gt;) &lt;br/&gt;
or&lt;br/&gt;
(defrecord r &lt;span class=&quot;error&quot;&gt;&amp;#91;__&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;It works fine in clojure 1.2, 1.2.1&lt;/p&gt;

&lt;p&gt;Works fine with one underscore.&lt;/p&gt;

&lt;p&gt;Output from REPL:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defrecord r &lt;span class=&quot;error&quot;&gt;&amp;#91;__&amp;#93;&lt;/span&gt;)&lt;br/&gt;
CompilerException java.lang.VerifyError: (class: user/r, method: create signature: (Lclojure/lang/IPersistentMap;)Luser/r&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; Expecting to find object/array on stack, compiling:(NO_SOURCE_PATH:2) &lt;/p&gt;

&lt;p&gt;Stack trace from slime session:&lt;/p&gt;

&lt;p&gt;(class: clojure/data/priority_map/r, method: create signature: (Lclojure/lang/IPersistentMap;)Lclojure/data/priority_map/r&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; Expecting to find object/array on stack&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;Thrown class java.lang.VerifyError&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Restarts:&lt;br/&gt;
 0: &lt;span class=&quot;error&quot;&gt;&amp;#91;QUIT&amp;#93;&lt;/span&gt; Quit to the SLIME top level&lt;/p&gt;

&lt;p&gt;Backtrace:&lt;br/&gt;
  0: java.lang.Class.forName0(Native Method)&lt;br/&gt;
  1: java.lang.Class.forName(Class.java:247)&lt;br/&gt;
  2: clojure.lang.RT.classForName(RT.java:2013)&lt;br/&gt;
  3: clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:929)&lt;br/&gt;
  4: clojure.lang.Compiler$HostExpr.access$400(Compiler.java:710)&lt;br/&gt;
  5: clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2391)&lt;br/&gt;
  6: clojure.lang.Compiler.analyzeSeq(Compiler.java:6368)&lt;br/&gt;
  7: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
  8: clojure.lang.Compiler.analyze(Compiler.java:6136)&lt;br/&gt;
  9: clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5531)&lt;br/&gt;
 10: clojure.lang.Compiler$FnMethod.parse(Compiler.java:4967)&lt;br/&gt;
      &lt;span class=&quot;error&quot;&gt;&amp;#91;No Locals&amp;#93;&lt;/span&gt;&lt;br/&gt;
 11: clojure.lang.Compiler$FnExpr.parse(Compiler.java:3588)&lt;br/&gt;
 12: clojure.lang.Compiler.analyzeSeq(Compiler.java:6366)&lt;br/&gt;
 13: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
 14: clojure.lang.Compiler.analyzeSeq(Compiler.java:6356)&lt;br/&gt;
 15: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
 16: clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
 17: clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:492)&lt;br/&gt;
 18: clojure.lang.Compiler.analyzeSeq(Compiler.java:6368)&lt;br/&gt;
 19: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
 20: clojure.lang.Compiler.analyzeSeq(Compiler.java:6356)&lt;br/&gt;
 21: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
 22: clojure.lang.Compiler.analyze(Compiler.java:6136)&lt;br/&gt;
 23: clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5531)&lt;br/&gt;
 24: clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:5832)&lt;br/&gt;
 25: clojure.lang.Compiler.analyzeSeq(Compiler.java:6368)&lt;br/&gt;
 26: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
 27: clojure.lang.Compiler.analyze(Compiler.java:6136)&lt;br/&gt;
 28: clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5531)&lt;br/&gt;
 29: clojure.lang.Compiler$FnMethod.parse(Compiler.java:4967)&lt;br/&gt;
 30: clojure.lang.Compiler$FnExpr.parse(Compiler.java:3588)&lt;br/&gt;
 31: clojure.lang.Compiler.analyzeSeq(Compiler.java:6366)&lt;br/&gt;
 32: clojure.lang.Compiler.analyze(Compiler.java:6175)&lt;br/&gt;
 33: clojure.lang.Compiler.eval(Compiler.java:6421)&lt;br/&gt;
 34: clojure.lang.Compiler.eval(Compiler.java:6390)&lt;br/&gt;
 35: clojure.core$eval.invoke(core.clj:2795)&lt;br/&gt;
 36: swank.commands.basic$eval_region.invoke(basic.clj:47)&lt;br/&gt;
 37: swank.commands.basic$eval_region.invoke(basic.clj:37)&lt;br/&gt;
 38: swank.commands.basic$eval764$listener_eval__765.invoke(basic.clj:71)&lt;br/&gt;
 39: clojure.lang.Var.invoke(Var.java:401)&lt;br/&gt;
 40: clojure.data.priority_map$eval2759.invoke(NO_SOURCE_FILE)&lt;br/&gt;
 41: clojure.lang.Compiler.eval(Compiler.java:6424)&lt;br/&gt;
 42: clojure.lang.Compiler.eval(Compiler.java:6390)&lt;br/&gt;
 43: clojure.core$eval.invoke(core.clj:2795)&lt;br/&gt;
 44: swank.core$eval_in_emacs_package.invoke(core.clj:92)&lt;br/&gt;
 45: swank.core$eval_for_emacs.invoke(core.clj:239)&lt;br/&gt;
 46: clojure.lang.Var.invoke(Var.java:409)&lt;br/&gt;
 47: clojure.lang.AFn.applyToHelper(AFn.java:167)&lt;br/&gt;
 48: clojure.lang.Var.applyTo(Var.java:518)&lt;br/&gt;
 49: clojure.core$apply.invoke(core.clj:600)&lt;br/&gt;
 50: swank.core$eval_from_control.invoke(core.clj:99)&lt;br/&gt;
      &lt;span class=&quot;error&quot;&gt;&amp;#91;No Locals&amp;#93;&lt;/span&gt;&lt;br/&gt;
 51: swank.core$eval_loop.invoke(core.clj:104)&lt;br/&gt;
 52: swank.core$spawn_repl_thread$fn_&lt;em&gt;529$fn&lt;/em&gt;_530.invoke(core.clj:309)&lt;br/&gt;
 53: clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
 54: clojure.lang.AFn.applyTo(AFn.java:151)&lt;br/&gt;
 55: clojure.core$apply.invoke(core.clj:600)&lt;br/&gt;
 56: swank.core$spawn_repl_thread$fn__529.doInvoke(core.clj:306)&lt;br/&gt;
 57: clojure.lang.RestFn.invoke(RestFn.java:397)&lt;br/&gt;
 58: clojure.lang.AFn.run(AFn.java:24)&lt;br/&gt;
 59: java.lang.Thread.run(Thread.java:680)&lt;/p&gt;
</description>
                <environment>clojure-1.3.0-beta3 and git master, JDK 1.6.0_26, OS X 1.7.1</environment>
            <key id="14622">CLJ-837</key>
            <summary>java.lang.VerifyError when compiling deftype or defrecord with argument name starting with double underscore characters.</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="fogus">Fogus</assignee>
                                <reporter username="troussan">Tchavdar Roussanov</reporter>
                        <labels>
                    </labels>
                <created>Sun, 11 Sep 2011 19:05:10 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26785" author="fogus" created="Sun, 11 Sep 2011 21:18:14 -0500"  >&lt;p&gt;The privileged names __meta and __extmap are implementation details of  types and records and should probably not be viewed as real.  In other  words, since they are not published as part of the type/record docs,  then they may not exist in the future.  Having said that, the current Clojure implementation treats any name starting with __ as a special  field and doesn&apos;t count them toward the field count.  As a result,  when emitting the MyType.create method (another implementation  detail), the fields marked as __ throw off the field count and as a result the bytecode is not emitted properly.  I know how to change the  code to allow names prefixed with __ and fixing the validation error (not called by those two special names listed above), but I hesitate to say that is the solution &lt;br/&gt;
without further reflection.&lt;/p&gt;</comment>
                    <comment id="26788" author="fogus" created="Mon, 12 Sep 2011 08:32:16 -0500"  >&lt;p&gt;I think the prudent fix is as follows:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Allow any legal name &lt;b&gt;except&lt;/b&gt; those in the set #{__meta __extmap}&lt;/li&gt;
	&lt;li&gt;Fix the #create emission&lt;/li&gt;
	&lt;li&gt;Documentation should be changed to reflect that the aforementioned set is disallowed&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Thankfully this is an easy fix.  However, the &quot;magic&quot; of __ prefixed names will go away.  That is, the following behavior will differ from v1.2:&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;(defrecord R [__a ___b])
(:__a (R. 42 9))
;=&amp;gt; 42

(deftype T [__a])
(.__a (T. 36))
;=&amp;gt; 36

(deftype T2 [a b __meta])
;; AssertionError
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Any thoughts?&lt;/p&gt;</comment>
                    <comment id="26789" author="fogus" created="Mon, 12 Sep 2011 09:44:09 -0500"  >&lt;p&gt;If anyone is interested, the changes reflected in the previous comment can be found on my own branch: &lt;a href=&quot;https://github.com/fogus/clojure/tree/CLJ-837&quot;&gt;https://github.com/fogus/clojure/tree/CLJ-837&lt;/a&gt;  Code-review would be nice.&lt;/p&gt;</comment>
                    <comment id="26790" author="richhickey" created="Mon, 12 Sep 2011 10:09:23 -0500"  >&lt;p&gt;differing behavior of undocumented features is a non-problem&lt;/p&gt;</comment>
                    <comment id="26791" author="fogus" created="Mon, 12 Sep 2011 12:05:52 -0500"  >&lt;p&gt;Got it.  Thanks Rich.&lt;/p&gt;</comment>
                    <comment id="26792" author="fogus" created="Mon, 12 Sep 2011 12:25:11 -0500"  >&lt;p&gt;Added patch file.&lt;/p&gt;</comment>
                    <comment id="26793" author="steveminer@gmail.com" created="Mon, 12 Sep 2011 14:11:41 -0500"  >&lt;p&gt;I suggest that the documentation should simply say that all fields beginning with double-underscore (__) are reserved.  You don&apos;t have to enforce that (as the patch allows any field name except __meta and __extmap), but it&apos;s better to be conservative with the documentation so that you have some room to innovate.&lt;/p&gt;</comment>
                    <comment id="26794" author="steveminer@gmail.com" created="Mon, 12 Sep 2011 14:13:57 -0500"  >&lt;p&gt;Just by inspection, it looks like patch has an extra space before the &apos;b&apos; in the line near the end:&lt;/p&gt;

&lt;p&gt;+           2 (:___ b r)&lt;/p&gt;</comment>
                    <comment id="27405" author="stu" created="Fri, 2 Dec 2011 13:53:02 -0600"  >&lt;p&gt;0837-fixed is same as original patch, but with fixed unit test.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10730" name="0837-fixed.patch" size="5202" author="stu" created="Fri, 2 Dec 2011 13:53:02 -0600" />
                    <attachment id="10346" name="CLJ-837-double-underscore-type-records.diff" size="4278" author="fogus" created="Mon, 12 Sep 2011 12:33: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>
                                                                                    <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-836] BigInt optimization breaks &quot;obvious&quot; math</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-836</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;BigInt optimization seems seriously broken:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (def a 1N)&lt;br/&gt;
#&apos;user/a&lt;br/&gt;
user=&amp;gt; (* (+ a 10000000000000000) (+ a 10000000000000000))&lt;br/&gt;
ArithmeticException integer overflow&lt;br/&gt;
clojure.lang.Numbers.throwIntOverflow (Numbers.java:1374)&lt;/p&gt;

&lt;p&gt;A BigInt is optimized back to a long and then overflows which is not&lt;br/&gt;
what happened in Beta1 and earlier. &lt;/p&gt;</description>
                <environment></environment>
            <key id="14614">CLJ-836</key>
            <summary>BigInt optimization breaks &quot;obvious&quot; math</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="seancorfield">Sean Corfield</reporter>
                        <labels>
                    </labels>
                <created>Tue, 6 Sep 2011 02:43:11 -0500</created>
                <updated>Fri, 23 Sep 2011 16:00:06 -0500</updated>
                    <resolved>Fri, 23 Sep 2011 16:00:06 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26771" author="stu" created="Tue, 6 Sep 2011 18:10:12 -0500"  >&lt;p&gt;Please see &lt;a href=&quot;https://github.com/clojure/test.generative/commit/9a23bc4c8a713c690e5ac7d5377f7bad861e7489&quot;&gt;https://github.com/clojure/test.generative/commit/9a23bc4c8a713c690e5ac7d5377f7bad861e7489&lt;/a&gt; for a partial regression test. I am going to continue to expand the test but wanted to get this patch in asap.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10332" name="0836.patch" size="1976" author="stu" created="Tue, 6 Sep 2011 18:10:12 -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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-833] Add boilerplate documentation to -&gt;Foo and map-&gt;Foo functions produced by defrecord and deftype</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-833</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The functions implicitly defined by &lt;tt&gt;defrecord&lt;/tt&gt; and &lt;tt&gt;deftype&lt;/tt&gt; (&lt;tt&gt;&amp;#45;&amp;gt;Foo&lt;/tt&gt; and &lt;tt&gt;map&amp;#45;&amp;gt;Foo&lt;/tt&gt;, discussed &lt;a href=&quot;http://dev.clojure.org/display/design/defrecord+improvements&quot;&gt;here&lt;/a&gt; and implemented via &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-374&quot; title=&quot;print/read syntax for defrecords&quot;&gt;&lt;del&gt;CLJ-374&lt;/del&gt;&lt;/a&gt;) have no documentation.&lt;/p&gt;

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

&lt;p&gt;1. Adds docstrings to the generated constructor functions&lt;br/&gt;
2. Adds a paragraph to deftype/defrecord docstrings&lt;br/&gt;
3. Adds tests to assert that the docstrings exist&lt;/p&gt;</description>
                <environment></environment>
            <key id="14584">CLJ-833</key>
            <summary>Add boilerplate documentation to -&gt;Foo and map-&gt;Foo functions produced by defrecord and 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="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Fri, 26 Aug 2011 12:20:43 -0500</created>
                <updated>Fri, 30 Mar 2012 09:16:31 -0500</updated>
                    <resolved>Fri, 30 Mar 2012 09:16:31 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>6</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="26737" author="fogus" created="Fri, 26 Aug 2011 13:22:05 -0500"  >&lt;p&gt;Hmmm.  Maybe it was an oversight on my part.  What kind of documentation did you have in mind?  Isn&apos;t -&amp;gt;Blah simply self-documenting?  &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="26738" author="cemerick" created="Fri, 26 Aug 2011 13:50:57 -0500"  >&lt;p&gt;Yes and no.  &lt;tt&gt;map&amp;#45;&amp;gt;Blah&lt;/tt&gt; &lt;em&gt;is&lt;/em&gt; pretty clear. &lt;tt&gt;&amp;#45;&amp;gt;Blah&lt;/tt&gt; isn&apos;t obvious; even now, that looks like a threading operator to me.&lt;/p&gt;

&lt;p&gt;In any case, surely you tempt the gods by uttering the notion that something is &lt;em&gt;self-documenting&lt;/em&gt;&#8230; &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;

&lt;p&gt;Something like this for &lt;tt&gt;&amp;#45;&amp;gt;Blah&lt;/tt&gt; seems sufficient:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&quot;Generated by `(deftype Blah ...)`.&lt;/p&gt;

&lt;p&gt; Returns an instance of Blah given positional arguments corresponding to its constructor.&quot;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Something similar for &lt;tt&gt;map&amp;#45;&amp;gt;Blah&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;At the same time, I&apos;d also add 2 sentences to &lt;tt&gt;deftype&lt;/tt&gt; and &lt;tt&gt;defrecord&lt;/tt&gt; alerting people to the existence of these functions.  People have long wanted factory functions, especially for records, but not talking about them in the places where people are likely to look (pray that they look at all!) is just going to prolong that topic&apos;s FAQ status.&lt;/p&gt;</comment>
                    <comment id="26739" author="cemerick" created="Fri, 26 Aug 2011 13:56:45 -0500"  >&lt;p&gt;BTW, I&apos;d be happy to produce a patch.&lt;/p&gt;

&lt;p&gt;Is this even on the table for 1.3.0?  I hope so; seems like clarifying documentation and error message tweaks are exactly what a beta cycle is for.  If so, I&apos;ll prioritize it.&lt;/p&gt;</comment>
                    <comment id="26755" author="cemerick" created="Fri, 2 Sep 2011 20:08:21 -0500"  >&lt;p&gt;FWIW, just &lt;a href=&quot;http://clojure-log.n01se.net/date/2011-08-26.html#16:52&quot;&gt;one data point&lt;/a&gt; re: potential user confusion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;scottj: cemerick: both your theories apply to me, I had no clue about &amp;#45;&amp;gt;Blah and it definitely didn&apos;t look like a constructor to me, I thought of threading too. &lt;/p&gt;&lt;/blockquote&gt;</comment>
                    <comment id="26900" author="cperkins" created="Thu, 6 Oct 2011 17:46:21 -0500"  >&lt;p&gt;On a related note, the docstring for defrecord doesn&apos;t even mention that these functions will be defined. Is this intentional?&lt;/p&gt;</comment>
                    <comment id="27364" author="cperkins" created="Tue, 29 Nov 2011 10:04:39 -0600"  >&lt;p&gt;Patch with docstrings. Need feedback on the wording.&lt;/p&gt;

&lt;p&gt;Here&apos;s how it looks with the patch:&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;/p&gt;

&lt;p&gt;user&amp;gt; (doc -&amp;gt;Foo)&lt;br/&gt;
-------------------------&lt;br/&gt;
user/-&amp;gt;Foo&lt;br/&gt;
(&lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt;)&lt;br/&gt;
  Positional factory function for user.Foo&lt;br/&gt;
  eg: (-&amp;gt;Foo a b) =&amp;gt; &amp;lt;instance of user.Foo&amp;gt;&lt;/p&gt;

&lt;p&gt;user&amp;gt; (doc map-&amp;gt;Foo)&lt;br/&gt;
-------------------------&lt;br/&gt;
user/map-&amp;gt;Foo&lt;br/&gt;
(&lt;span class=&quot;error&quot;&gt;&amp;#91;m__3299__auto__&amp;#93;&lt;/span&gt;)&lt;br/&gt;
  Factory function for user.Foo. Takes one parameter, a map.&lt;/p&gt;


&lt;p&gt;And here are the additions to the docstrings of deftype and defrecord - each has an additional paragraph at the end:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (doc deftype)&lt;br/&gt;
...omitted...&lt;/p&gt;

&lt;p&gt;  A factory function will be defined, called -&amp;gt;TypeName, taking the&lt;br/&gt;
  same parameters as the constructor.&lt;/p&gt;


&lt;p&gt;user&amp;gt; (doc defrecord)&lt;br/&gt;
...omitted...&lt;/p&gt;

&lt;p&gt;  Two factory functions will be defined, one called -&amp;gt;TypeName that&lt;br/&gt;
  takes positional parameters for the fields, and one called&lt;br/&gt;
  map-&amp;gt;TypeName that takes a map of keywords to field values.&lt;/p&gt;


&lt;p&gt;One thing I&apos;m wondering is: will people try to use &quot;-&amp;gt;TypeName&quot; literally, or is it clear from context that you need to replace that with the actual name?&lt;/p&gt;

</comment>
                    <comment id="27365" author="cemerick" created="Tue, 29 Nov 2011 10:31:30 -0600"  >&lt;p&gt;That&apos;s essentially what I had in mind, thanks.  I think what you&apos;ve described is clear enough, but if there&apos;s any concern about ambiguity w.r.t. the names of the factory functions, you could prefix the additional paragraphs; 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;Given (defrecord TypeName ...), two factory functions will be defined, one called -&amp;gt;TypeName&#8230;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27372" author="cperkins" created="Wed, 30 Nov 2011 10:40:55 -0600"  >&lt;p&gt;Updated the wording with Chas&apos;s suggestion. Also made the wording more consistent between deftype and defrecord.&lt;/p&gt;

&lt;p&gt;Fixed a test that was assuming all public vars with docstrings have :added metadata - the generated factories do not have :added.&lt;/p&gt;</comment>
                    <comment id="27736" author="jafingerhut" created="Fri, 17 Feb 2012 04:03:37 -0600"  >&lt;p&gt;Only change in -3.patch vs. the previous one is that it patches cleanly against current latest Clojure head (some other doc string changes have been committed since the -2.patch was created).&lt;/p&gt;</comment>
                    <comment id="27993" author="stuart.sierra" created="Fri, 23 Mar 2012 08:51:21 -0500"  >&lt;p&gt;Screened. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10918" name="clj-833-defrecord-factory-docstrings-3.patch" size="5028" author="jafingerhut" created="Fri, 17 Feb 2012 04:03:37 -0600" />
                    <attachment id="10724" name="defrecord-factory-docstrings-2.patch" size="5060" author="cperkins" created="Wed, 30 Nov 2011 10:40:55 -0600" />
                    <attachment id="10722" name="defrecord-factory-docstrings.patch" size="4223" author="cperkins" created="Tue, 29 Nov 2011 10:04:39 -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-832] reify implements IObj but nowhere states so</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-832</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;reify&lt;/tt&gt; does implement &lt;tt&gt;clojure.lang.IObj&lt;/tt&gt; but nowhere states so. The attached patch fixes the docstring and adds an example how metadata is transferred from the &lt;tt&gt;reify&lt;/tt&gt; form to the object.&lt;/p&gt;</description>
                <environment>1.3.0-beta1</environment>
            <key id="14583">CLJ-832</key>
            <summary>reify implements IObj but nowhere states so</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="-1">Unassigned</assignee>
                                <reporter username="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Aug 2011 16:17:13 -0500</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10320" name="0001-Fix-docstring-of-reify.patch" size="1063" author="mbrandmeyer" created="Thu, 25 Aug 2011 16:17:15 -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-831] await-for return value - doc fix</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-831</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;From using await-for and from inspecting the code, I believe the docstring is incorrect. The function does not return either nil or not-nil, but rather it returns a boolean indicator of whether the call was successful. The result comes straight from the java.util.concurrent.CountDownLatch/await call which returns: &quot;true if the count reached zero and false if the waiting time elapsed before the count reached zero&quot;&lt;/p&gt;

&lt;p&gt;Latest patch changes docstring to specify &lt;tt&gt;await-for&lt;/tt&gt; returns logical true or logical false.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14582">CLJ-831</key>
            <summary>await-for return value - doc fix</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="david-mcneil">David McNeil</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Aug 2011 08:05:27 -0500</created>
                <updated>Fri, 30 Mar 2012 09:16:31 -0500</updated>
                    <resolved>Fri, 30 Mar 2012 09:16:31 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26732" author="david-mcneil" created="Thu, 25 Aug 2011 08:21:33 -0500"  >&lt;p&gt;Code to see what await-for returns:&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 [a (agent 100)]
  (send-off a (fn [x]
                (Thread/sleep 10)
                (inc x)))
  [(await-for 0 a) @a
   (await-for 20 a) @a])

;; [false 100 true 101]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27091" author="stu" created="Tue, 25 Oct 2011 18:19:47 -0500"  >&lt;p&gt;patch is not standard format, but the docfix is trivial. Only question is: breaking change to code to match docs, or just change docs. My vote is for the latter.&lt;/p&gt;</comment>
                    <comment id="27387" author="richhickey" created="Fri, 2 Dec 2011 08:28:46 -0600"  >&lt;p&gt;Probably should say logical false rather than promise a boolean&lt;/p&gt;</comment>
                    <comment id="27838" author="jafingerhut" created="Fri, 24 Feb 2012 11:33:31 -0600"  >&lt;p&gt;clj-831-await-for-doc-string-patch.txt is in proper format, applies cleanly to latest master as of Feb 24, 2012, and includes Rich&apos;s suggestion of describing return values as logic true or logical false.  Contributor David McNeil has signed CA and is marked as committer in the patch.&lt;/p&gt;</comment>
                    <comment id="27992" author="stuart.sierra" created="Fri, 23 Mar 2012 08:44:18 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10957" name="clj-831-await-for-doc-string-patch.txt" size="925" author="jafingerhut" created="Fri, 24 Feb 2012 11:33:31 -0600" />
                    <attachment id="10318" name="patch.diff" size="861" author="david-mcneil" created="Thu, 25 Aug 2011 08:05:27 -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-830] Report source file and line number when throwing syntax-related error from core macros</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-830</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you botch or misunderstand certain macros in core, they throw exceptions with very unhelpful error messages:&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; (let [a])
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException:
  let requires an even number of forms in binding vector&amp;gt;

=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;-let [a 5
            b 6]
     &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException:
  &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;-let requires exactly 2 forms in binding vector&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;No mention of userland file/namespace or line number is in the stack trace.  If this code happens to be in code being loaded via some chain of :requires, tracking it down can be way more painful than it reasonably should be.&lt;/p&gt;

&lt;p&gt;Something like this would be much better:&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;lt;IllegalArgumentException java.lang.IllegalArgumentException:
  let requires an even number of forms in binding vector in com.foo.namespace:80&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These errors are all thrown via the same &lt;tt&gt;assert-args&lt;/tt&gt; function used by a variety of macros in &lt;tt&gt;clojure.core&lt;/tt&gt;; modifying it so it emits a reasonable error message should be straightforward.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14580">CLJ-830</key>
            <summary>Report source file and line number when throwing syntax-related error from core macros</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="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Aug 2011 08:09:12 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 7 Oct 2011 09:12:37 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26740" author="stuart.sierra" created="Sat, 27 Aug 2011 15:25:46 -0500"  >&lt;p&gt;Only affects the &lt;tt&gt;assert-args&lt;/tt&gt; macro, which is private in &lt;tt&gt;clojure.core&lt;/tt&gt;. Patch works as advertised.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10317" name="CLJ-830.diff" size="6038" author="cemerick" created="Wed, 24 Aug 2011 13:04:46 -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-829] Transient hashmaps mishandle hash collisions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-829</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Clojure 1.2.1 and 1.3.0-beta1 both exhibit the following behavior:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (let [m (into {} (for [x (range 100000)] &lt;span class=&quot;error&quot;&gt;&amp;#91;(rand) (rand)&amp;#93;&lt;/span&gt;))]&lt;br/&gt;
        (println (count (distinct (map hash (keys m)))))&lt;br/&gt;
        ((juxt count identity) (persistent!&lt;br/&gt;
                (reduce dissoc! (transient m) (keys m)))))&lt;br/&gt;
99999&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;2 {0.42548900739367024 0.8725039567983159}&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;We create a large transient map with random keys and values, and check to see how many unique hashcodes we get. Then, we iterate over all the keys, dissoc&apos;ing each out of the transient map. The resulting map has one element in it (wrong - it should be empty, since we dissoc&apos;ed all the keys), and reports its count as being two (wrong - not sure whether it should be zero or one given the other breakage). As far as I can tell, each duplicated hash value is represented once in the output map, and the map&apos;s count is the number of keys that hashed to something duplicated.&lt;/p&gt;

&lt;p&gt;The problem seems to be restricted to transients, as if we remove the transient/persistent! pair and use dissoc instead of dissoc!, the map is always empty.&lt;/p&gt;

&lt;p&gt;Inspired by discussion at &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/313ac122667bb4b5/c3e7faa8635403f1&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/313ac122667bb4b5/c3e7faa8635403f1&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14579">CLJ-829</key>
            <summary>Transient hashmaps mishandle hash collisions</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="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Aug 2011 03:30:21 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:05 -0600</updated>
                    <resolved>Fri, 7 Oct 2011 09:12:36 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="26733" author="amalloy" created="Thu, 25 Aug 2011 12:26:12 -0500"  >&lt;p&gt;By the way, since this involves randomness, on occasion it doesn&apos;t fail. With the input as given it seems to fail around 80% of the time, but if you want to be sure to reproduce you can add another 0 to the input size.&lt;/p&gt;</comment>
                    <comment id="26735" author="aaron" created="Fri, 26 Aug 2011 09:20:43 -0500"  >&lt;p&gt;Thanks for the update.  I was able to reproduce with the extra zero. Moving this ticket to Release.Next so that it will ship with 1.3.&lt;/p&gt;</comment>
                    <comment id="26777" author="cgrand" created="Thu, 8 Sep 2011 13:15:20 -0500"  >&lt;p&gt;Sorry for the delay. Here is a fix and a reduced test case.&lt;/p&gt;</comment>
                    <comment id="26780" author="stu" created="Fri, 9 Sep 2011 15:50:56 -0500"  >&lt;p&gt;I have checked behavior with an independent test&lt;/p&gt;

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

&lt;p&gt;which looks good, but don&apos;t have context to evaluate the code (particularly the array allocation) in the time I have available today.&lt;/p&gt;</comment>
                    <comment id="26781" author="richhickey" created="Fri, 9 Sep 2011 16:14:01 -0500"  >&lt;p&gt;The array alloc looks suspicious:&lt;/p&gt;

&lt;p&gt;+		Object[] newArray = new Object&lt;span class=&quot;error&quot;&gt;&amp;#91;2*(array.length+1)&amp;#93;&lt;/span&gt;; // make room for next assoc&lt;br/&gt;
+		System.arraycopy(array, 0, newArray, 0, 2*count);&lt;/p&gt;

&lt;p&gt;should it not be array.length + 2, (or 2*(count + 1), whichever?&lt;/p&gt;</comment>
                    <comment id="26783" author="cgrand" created="Sat, 10 Sep 2011 03:48:51 -0500"  >&lt;p&gt;Thanks Rich for spotting this copy&amp;amp;paste error.&lt;/p&gt;

&lt;p&gt;I attached an updated patch.&lt;/p&gt;

&lt;p&gt;The problem reported by Alan was double:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the misplaced removedLeaf.val = removedLeaf was causing the global count to be incorrect&lt;/li&gt;
	&lt;li&gt;the missing array copy in ensureEditable was causing the seq returned by (keys m) to be mutated (shortened) and this is why all values were not dissoced.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Mutable code is hard, one should invent a cool language with sane state management &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="26784" author="stu" created="Sat, 10 Sep 2011 14:54:57 -0500"  >&lt;p&gt;New tests continue to pass.&lt;/p&gt;

&lt;p&gt;It seems to me that the allocation in the second path is too big by two in some cases (e.g. it gets called in the dissoc! path when the array needs to be copied, but not get bigger). But this might be considered innocuous. The same method is called in the assoc! path where the +2 is needed, so avoiding two objects worth of allocation would require a more substantial patch.&lt;/p&gt;</comment>
                    <comment id="26787" author="cgrand" created="Mon, 12 Sep 2011 03:39:27 -0500"  >&lt;p&gt;The larger array allocation is similar to the one performed in BitmapIndexedNode.ensureEditable. My line of thought behind this heuristic is that the copying dominates the allocation and that I prefer one slightly larger array than having to allocates two arrays in case of growth.&lt;/p&gt;

&lt;p&gt;Anyway it&apos;s on collision nodes so it&apos;s a rare occurence: I won&apos;t bother arguing further if switching to a more conservative allocation helps the patch landing in 1.3.  &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10340" name="clj-829-2.diff" size="2531" author="cgrand" created="Sat, 10 Sep 2011 03:48:51 -0500" />
                    <attachment id="10333" name="clj-829.diff" size="2537" author="cgrand" created="Thu, 8 Sep 2011 13:15:20 -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-828] clojure.core/bases returns a cons when passed a class and a Java array when passed an interface</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-828</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.core/bases returns a clojure.lang.Cons when called with a class as parameter, but a Java array ( [Ljava.lang.Class; &amp;#41; when called with an interface. Both should return values of the same type, which I guess should be a seq.&lt;/p&gt;

&lt;p&gt;Showing the problem at the REPL:&lt;br/&gt;
user=&amp;gt; (bases java.util.List)&lt;br/&gt;
#&amp;lt;Class[] [Ljava.lang.Class;@315b0333&amp;gt;&lt;br/&gt;
user=&amp;gt; (bases java.util.ArrayList)&lt;br/&gt;
(java.util.AbstractList java.util.List java.util.RandomAccess&lt;br/&gt;
java.lang.Cloneable java.io.Serializable) &lt;/p&gt;

&lt;p&gt;I have attached a patch which calls the seq function on the else part of clojure.core/bases. Also updated the clojure.test-clojure.java-interop/test-bases test. However these test do not currently seem to run as part of the maven build. I have however run the test manually and verified that it works.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14575">CLJ-828</key>
            <summary>clojure.core/bases returns a cons when passed a class and a Java array when passed an interface</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="stoyle">Alf Kristian St&#248;yle</reporter>
                        <labels>
                    </labels>
                <created>Mon, 15 Aug 2011 11:20:02 -0500</created>
                <updated>Sat, 18 Aug 2012 09:19:35 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27862" author="jafingerhut" created="Fri, 24 Feb 2012 19:29:50 -0600"  >&lt;p&gt;Behavior where bases returns Java array in some cases still exists on latest master, and this patch still applies cleanly and changes that behavior as described.&lt;/p&gt;

&lt;p&gt;The patch writer Alf is not on the list of people who have signed a CA.  If he isn&apos;t in the process of doing so, what should be done with the patch?  If I described the behavior to a committer without showing them the patch, they would likely come up with a similar one-line fix. &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="27867" author="stoyle" created="Sat, 25 Feb 2012 01:09:33 -0600"  >&lt;p&gt;I was not aware that contributors had to sign the CA to get a patch in when I wrote this, so my apologies for adding the patch. I just wanted to make the contribution an &quot;easy add&quot;. I guess you guys would have figured out a similar fix really easy.&lt;/p&gt;

&lt;p&gt;I am not in the process of signing the CA. I would not have any problems signing it, but then I guess for such a small contribution it would be too much of a hassle. And besides, I don&apos;t think this small contribution makes me a worthy contributor.&lt;/p&gt;

&lt;p&gt;I would certainly not mind you guys fixing this in anyway you can, with or without my patch.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Alf&lt;/p&gt;</comment>
                    <comment id="27873" author="jafingerhut" created="Sat, 25 Feb 2012 11:58:53 -0600"  >&lt;p&gt;No apologies necessary for trying to improve the code, Alf.  We appreciate it.&lt;/p&gt;

&lt;p&gt;I agree it might be a bit of a hassle to sign a CA just for this fix.  Legally, a Clojure contributor is one whether anyone considers them &quot;worthy&quot; or not.&lt;/p&gt;

&lt;p&gt;We&apos;ll figure something out.&lt;/p&gt;</comment>
                    <comment id="28525" author="steveminer@gmail.com" created="Fri, 18 May 2012 15:38:55 -0500"  >&lt;p&gt;Independently written patch that fixes bases so that it always returns a seq.  Added additional tests to verify that it returns nil (rather than an empty seq) when there are no bases to maintain compatibility with the original code.&lt;/p&gt;</comment>
                    <comment id="29194" author="fogus" created="Thu, 16 Aug 2012 14:27:44 -0500"  >&lt;p&gt;Patch 0001-bases-should-return-a-seq-not-a-Java-array.patch from Steve Miner works as expected and is of acceptable quality.&lt;/p&gt;</comment>
                    <comment id="29220" author="steveminer@gmail.com" created="Sat, 18 Aug 2012 08:54:23 -0500"  >&lt;p&gt;I think commit 73f94cb8c7f60a131759b4488a3fefd6599d0328 took the wrong patch.  Stoyle said he did not have a CA. I wrote an independent patch which Fogus vetted.&lt;/p&gt;</comment>
                    <comment id="29221" author="stu" created="Sat, 18 Aug 2012 09:19:35 -0500"  >&lt;p&gt;Reverted wrong patch, applied correct patch. Thanks for watching my back, Steve.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11230" name="0001-bases-should-return-a-seq-not-a-Java-array.patch" size="1490" author="steveminer@gmail.com" created="Fri, 18 May 2012 15:38:55 -0500" />
                    <attachment id="10313" name="0001-Make-sure-the-clojure.core-bases-function-always-ret.patch" size="1601" author="stoyle" created="Mon, 15 Aug 2011 11:20:03 -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-824] BigInt math is slow when values of a BigInt are small enough to actually be treated as Longs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-824</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When doing math ops on a BigInt, It should default to treating smaller values of BigInts as Longs when possible to improve performance, and fall through to the actual BigInteger math when necessary.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14562">CLJ-824</key>
            <summary>BigInt math is slow when values of a BigInt are small enough to actually be treated as Longs</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="aaron">Aaron Bedra</reporter>
                        <labels>
                    </labels>
                <created>Sat, 6 Aug 2011 09:32:53 -0500</created>
                <updated>Fri, 26 Aug 2011 14:45:33 -0500</updated>
                    <resolved>Fri, 26 Aug 2011 14:45:33 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26698" author="aaron" created="Sat, 6 Aug 2011 09:34:19 -0500"  >&lt;p&gt;This is a first attempt at this.  I noticed some nice performance improvements. My question is around what and how much to test this.  There are no tests in this patch but I would be happy to add some if they are necessary.&lt;/p&gt;</comment>
                    <comment id="26721" author="aaron" created="Fri, 12 Aug 2011 13:15:37 -0500"  >&lt;p&gt;Ok, new patch. This one now passes all of the math tests in the test.generative examples&lt;/p&gt;</comment>
                    <comment id="26728" author="stu" created="Tue, 23 Aug 2011 18:12:30 -0500"  >&lt;p&gt;0824-sans-inc-dec is good. Same as Aaron&apos;s second patch, but removes BigInt inc and dec. They were left over from code that had them wired to Numbers.java, where they weren&apos;t any faster.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10312" name="0824_faster_bigint_ops.patch" size="3697" author="aaron" created="Fri, 12 Aug 2011 12:40:52 -0500" />
                    <attachment id="10314" name="0824-sans-inc-dec.patch" size="4781" author="stu" created="Tue, 23 Aug 2011 18:12:30 -0500" />
                    <attachment id="10304" name="bigint.patch" size="4153" author="aaron" created="Sat, 6 Aug 2011 09:34:19 -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>
                                                                                    <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-822] Reporting methods in clojure.test/*/*-report should be marked dynamic</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-822</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Background:&lt;br/&gt;
The latest Clojure 1.3 beta defaults all vars to static binding.&lt;br/&gt;
The clojure-maven-plugin depends on clojure.test/junit-report being dynamically bound.&lt;/p&gt;

&lt;p&gt;Problem:&lt;br/&gt;
The clojure-maven-plugin cannot be used with Clojure 1.3&lt;/p&gt;

&lt;p&gt;Solution:&lt;br/&gt;
Explicitly make junit-report dynamic. (see attached patch)&lt;/p&gt;

&lt;p&gt;Rational&lt;br/&gt;
The design of this library assumes the reporting functions are dynamically rebind-able. See clojure.test/report, also dynamic.&lt;/p&gt;</description>
                <environment>all</environment>
            <key id="14536">CLJ-822</key>
            <summary>Reporting methods in clojure.test/*/*-report should be marked dynamic</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="pmbauer">Paul Michael Bauer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 27 Jul 2011 10:35:50 -0500</created>
                <updated>Fri, 26 Aug 2011 15:03:02 -0500</updated>
                    <resolved>Fri, 26 Aug 2011 15:03:02 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26703" author="pmbauer" created="Mon, 8 Aug 2011 02:05:51 -0500"  >&lt;p&gt;Could this be patched before the 1.3 release?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10295" name="0001-Make-clojure.test-report-vars-dynamic-for-use-with-e.patch" size="1262" author="pmbauer" created="Wed, 27 Jul 2011 10:35: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-817] print-deftype breaks when fields have dashes</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-817</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; (deftype Foo [bar-quux])
user.Foo
user=&amp;gt; (def x (Foo. 1))
#&apos;user/x 
user=&amp;gt; x
IllegalArgumentException No matching field found: bar-quux &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; class user.Foo  clojure.lang.Reflector.getInstanceField (Reflector.java:289)
#user.Foo[user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Printing records works fine.  See &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/739e43d7f0cfc4d0/d30314dc45c6cc09?lnk=gst&amp;amp;q=deftype+issue#d30314dc45c6cc09&quot;&gt;this mailing list message&lt;/a&gt; for original report.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14478">CLJ-817</key>
            <summary>print-deftype breaks when fields have dashes</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="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="alan@thinkrelevance.com">Alan Dipert</reporter>
                        <labels>
                    </labels>
                <created>Mon, 27 Jun 2011 21:04:52 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Thu, 22 Mar 2012 20:21:07 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26534" author="aaron" created="Tue, 28 Jun 2011 12:59:04 -0500"  >&lt;p&gt;This patch breaks tests.&lt;/p&gt;</comment>
                    <comment id="26535" author="alan@thinkrelevance.com" created="Tue, 28 Jun 2011 14:18:46 -0500"  >&lt;p&gt;Could you please attach your test output?  I&apos;m not able to reproduce.&lt;/p&gt;</comment>
                    <comment id="26545" author="aaron" created="Wed, 29 Jun 2011 07:37:51 -0500"  >&lt;p&gt;I attached the full test run.  This is &lt;/p&gt;


&lt;p&gt;java version &quot;1.6.0_24&quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)&lt;/p&gt;

&lt;p&gt;on Ubuntu 11.04 64&lt;/p&gt;</comment>
                    <comment id="26554" author="alan@thinkrelevance.com" created="Wed, 6 Jul 2011 22:39:05 -0500"  >&lt;p&gt;I haven&apos;t been able to reproduce your error.  Could you try &lt;tt&gt;ant clean&lt;/tt&gt; and run again?  Perhaps another patch was also applied when you tested?  Thanks in advance for giving it another shot.&lt;/p&gt;

&lt;p&gt;Platforms I&apos;ve tried that compile and test cleanly:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Mac OS X 10.6.8, 1.6.0_24-b07&lt;/li&gt;
	&lt;li&gt;Ubuntu 11.04 32, Sun JDK 1.6.0_24-b07&lt;/li&gt;
	&lt;li&gt;Ubuntu 11.04 64, Sun JDK 1.6.0_24-b07 (EC2, ami-1aad5273)&lt;/li&gt;
	&lt;li&gt;Ubuntu 11.04 64, OpenJDK 1.6.0_22 (EC2, ami-1aad5273)&lt;/li&gt;
	&lt;li&gt;CentOS 5.6 64, Sun JDK 1.6.0_27-ea&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27369" author="hiredman" created="Tue, 29 Nov 2011 19:42:19 -0600"  >&lt;p&gt;this patch no longer applies cleanly&lt;/p&gt;</comment>
                    <comment id="27859" author="jafingerhut" created="Fri, 24 Feb 2012 16:50:47 -0600"  >&lt;p&gt;The bad behavior appears not to exist in latest master as of Feb 24, 2012, nor does it exist in release 1.3.0.  The code in the neighborhood of this one-line patch is significantly different than it was when the patch was made, so perhaps this issue was corrected as a side effect of some commit before the 1.3.0 release.&lt;/p&gt;

&lt;p&gt;Mac OS X 10.6.8, 1.6.0_29, Clojure 1.3.0 test transcript:&lt;/p&gt;

&lt;p&gt;Clojure 1.3.0&lt;br/&gt;
user=&amp;gt; (deftype Foo &lt;span class=&quot;error&quot;&gt;&amp;#91;bar-quux&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.Foo&lt;br/&gt;
user=&amp;gt; (def x (Foo. 1))&lt;br/&gt;
#&apos;user/x&lt;br/&gt;
user=&amp;gt; x&lt;br/&gt;
#&amp;lt;Foo user.Foo@6d080876&amp;gt;&lt;br/&gt;
user=&amp;gt; (deftype Bar &lt;span class=&quot;error&quot;&gt;&amp;#91;bar-id&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.Bar&lt;br/&gt;
user=&amp;gt; (Bar. 1)&lt;br/&gt;
#&amp;lt;Bar user.Bar@679801c&amp;gt;&lt;br/&gt;
user=&amp;gt; (deftype Baz &lt;span class=&quot;error&quot;&gt;&amp;#91;bar_id&amp;#93;&lt;/span&gt;)&lt;br/&gt;
user.Baz&lt;br/&gt;
user=&amp;gt; (Baz. 1)&lt;br/&gt;
#&amp;lt;Baz user.Baz@54128635&amp;gt;&lt;/p&gt;</comment>
                    <comment id="27983" author="alan@thinkrelevance.com" created="Thu, 22 Mar 2012 20:21:07 -0500"  >&lt;p&gt;This issue does not exist in Clojure 1.3 onwards, and the attached patch is no longer relevant.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10265" name="817-print-deftype-fields-dashes.diff" size="982" author="alan@thinkrelevance.com" created="Mon, 27 Jun 2011 21:11:24 -0500" />
                    <attachment id="10267" name="test.log" size="24060" author="aaron" created="Wed, 29 Jun 2011 07:36: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-816] Transient vectors mutations leak into their source persistent vector </title>
                <link>http://dev.clojure.org/jira/browse/CLJ-816</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;pv (vec (range 34))&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (-&amp;gt; pv transient pop! pop! pop! (conj! 42))&lt;br/&gt;
  (nth pv 31))&lt;br/&gt;
; returns 42 instead of 31&lt;/p&gt;
</description>
                <environment></environment>
            <key id="14477">CLJ-816</key>
            <summary>Transient vectors mutations leak into their source persistent vector </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="cgrand">Christophe Grand</assignee>
                                <reporter username="cgrand">Christophe Grand</reporter>
                        <labels>
                    </labels>
                <created>Fri, 24 Jun 2011 11:49:58 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Fri, 19 Aug 2011 11:36:54 -0500</resolved>
                            <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26532" author="cgrand" created="Fri, 24 Jun 2011 11:50:45 -0500"  >&lt;p&gt;The patch may apply to 1.1 and 1.2 too.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10264" name="fix-transientvectors.diff" size="2194" author="cgrand" created="Fri, 24 Jun 2011 11:50:01 -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-815] [Documentation] - Remove unnecessary &quot;Alpha&quot; labels in docstrings</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-815</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;From smfadi@googlemail.com on the Clojure mailing list&lt;/p&gt;

&lt;p&gt;Just a quick question (before I forget): Is deftype/defrecord still&lt;br/&gt;
alpha? Or is the &quot;Alpha - subject to change&quot; note in the docstrings&lt;br/&gt;
just an oversight?&lt;/p&gt;

&lt;p&gt;This needs some housekeeping.  Here are a list of functions that are currently marked as &quot;Alpha&quot;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;clojure.pprint/print-table&lt;/li&gt;
	&lt;li&gt;clojure.core/add-watch&lt;/li&gt;
	&lt;li&gt;clojure.core/remove-watch&lt;/li&gt;
	&lt;li&gt;clojure.core/juxt&lt;/li&gt;
	&lt;li&gt;clojure.core/transient&lt;/li&gt;
	&lt;li&gt;clojure.core/persistent!&lt;/li&gt;
	&lt;li&gt;clojure.core/conj!&lt;/li&gt;
	&lt;li&gt;clojure.core/assoc!&lt;/li&gt;
	&lt;li&gt;clojure.core/dissoc!&lt;/li&gt;
	&lt;li&gt;clojure.core/pop!&lt;/li&gt;
	&lt;li&gt;clojure.core/disj!&lt;/li&gt;
	&lt;li&gt;clojure.core/promise&lt;/li&gt;
	&lt;li&gt;clojure.core/deliver&lt;/li&gt;
	&lt;li&gt;clojure.core/defrecord (inside core_deftype)&lt;/li&gt;
	&lt;li&gt;clojure.core/deftype   (inside core_deftype)&lt;/li&gt;
	&lt;li&gt;clojure.reflect/type-reflect&lt;/li&gt;
	&lt;li&gt;clojure.reflect/reflect&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="14476">CLJ-815</key>
            <summary>[Documentation] - Remove unnecessary &quot;Alpha&quot; labels in docstrings</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="aaron">Aaron Bedra</assignee>
                                <reporter username="aaron">Aaron Bedra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 24 Jun 2011 08:48:04 -0500</created>
                <updated>Fri, 2 Sep 2011 09:41:05 -0500</updated>
                    <resolved>Fri, 2 Sep 2011 09:41:05 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26531" author="aaron" created="Fri, 24 Jun 2011 10:56:39 -0500"  >&lt;p&gt;Rich, can we talk about which of these should be updated and which should not?&lt;/p&gt;</comment>
                    <comment id="26725" author="aaron" created="Fri, 19 Aug 2011 11:37:21 -0500"  >&lt;p&gt;Bump&lt;/p&gt;</comment>
                    <comment id="26754" author="stu" created="Fri, 2 Sep 2011 09:41:05 -0500"  >&lt;p&gt;just juxt, for now&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="10005">Accepted</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-812] print-dup should not be defined for deftypes</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-812</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;deftypes are supposed to be relatively &apos;clean&apos;. Defining print-dup on them might conflict with their other intended uses - e.g. if you use a deftype and implement IPersistentSet you can&apos;t print due to this conflict.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14473">CLJ-812</key>
            <summary>print-dup should not be defined for deftypes</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="richhickey">Rich Hickey</reporter>
                        <labels>
                    </labels>
                <created>Mon, 20 Jun 2011 08:27:22 -0500</created>
                <updated>Fri, 29 Jul 2011 10:17:42 -0500</updated>
                    <resolved>Fri, 29 Jul 2011 10:17:42 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26517" author="fogus" created="Mon, 20 Jun 2011 11:55:27 -0500"  >&lt;p&gt;Added patch to back out the deftype print-dup.&lt;/p&gt;</comment>
                    <comment id="26518" author="richhickey" created="Mon, 20 Jun 2011 12:12:52 -0500"  >&lt;p&gt;Erm, ditto print-method.&lt;/p&gt;

&lt;p&gt;Also, was this put in originally in order to support deftypes in code?&lt;/p&gt;</comment>
                    <comment id="26520" author="fogus" created="Mon, 20 Jun 2011 13:12:01 -0500"  >&lt;p&gt;Ditto print-method.&lt;/p&gt;

&lt;p&gt;Replaces the previous patch.&lt;/p&gt;</comment>
                    <comment id="26521" author="fogus" created="Mon, 20 Jun 2011 13:16:12 -0500"  >&lt;p&gt;Rich,&lt;/p&gt;

&lt;p&gt;Removed print-method also.  &lt;/p&gt;

&lt;p&gt;print-dup was initially put in lieu of compiler support, its remaining was not intended.  print-method was put to provide a prettier representation and I was not aware of the larger implications.  Thank you for the ticket, I hope they didn&apos;t cause any annoyances.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10261" name="CLJ-812-print-dup-no-deftype.diff" size="2256" author="fogus" created="Mon, 20 Jun 2011 13:12:01 -0500" />
                    <attachment id="10260" name="CLJ-812-print-dup-no-deftype.diff" size="1741" author="fogus" created="Mon, 20 Jun 2011 11:55:27 -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-811] Support hinting arg vectors</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-811</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, return type hints must be on function or var names, 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;(defn ^&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; foo [])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is in contrast to primitive return type declarations, which must be on function arg vectors:&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 foo ^&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; [])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The latter is preferred because:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Different arities of the same function can be typed differently&lt;/li&gt;
	&lt;li&gt;All of the type information for a given function hangs off of a single value (the arg vector)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;For these reasons, supporting type hints on arg vectors as well is desirable.  This would remove the (confusing and purely historic at this point) syntactic difference between type hints and signature declarations (with the current function/var name hinting support to be potentially deprecated and removed in the future).&lt;/p&gt;

&lt;p&gt;As a pleasant side effect, this would disambiguate the semantics of var &lt;tt&gt;:tag&lt;/tt&gt; metadata, thereby resolving &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-140&quot; title=&quot;Single :tag for type hints conflates value&amp;#39;s type with type of return value from an invoke&quot;&gt;CLJ-140&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14471">CLJ-811</key>
            <summary>Support hinting arg vectors</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="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Fri, 17 Jun 2011 20:52:03 -0500</created>
                <updated>Fri, 26 Aug 2011 14:45:55 -0500</updated>
                    <resolved>Fri, 26 Aug 2011 14:45:54 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26544" author="cemerick" created="Wed, 29 Jun 2011 02:30:30 -0500"  >&lt;p&gt;Patch attached (&lt;tt&gt;811.diff&lt;/tt&gt;); change viewable on github &lt;a href=&quot;https://github.com/cemerick/clojure/commit/db0c7310a01c1919c4211d154565304df66a1388&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This makes calls prefer hints on arg vectors, but preserves fallback to hints on vars, so backwards compatibility is retained.  The way is open to only ever use var tags when referring to their contents (rather than using var tags for calls of var contents)...presumably a deprecation/change to be scheduled later that would resolve &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-140&quot; title=&quot;Single :tag for type hints conflates value&amp;#39;s type with type of return value from an invoke&quot;&gt;CLJ-140&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Functions with a vararg signature are explicitly supported.  Protocol functions&apos; vars fell right into place.&lt;/p&gt;</comment>
                    <comment id="26729" author="aaron" created="Tue, 23 Aug 2011 19:13:51 -0500"  >&lt;p&gt;Reviewed code and tested with argos against all contrib libraries that work on 1.3 with no hiccups including core.logic&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10266" name="811.diff" size="4096" author="cemerick" created="Wed, 29 Jun 2011 02:30:30 -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>
                                                                                    <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-808] In java.io, the make-parents function can&apos;t handle files without parent directory.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-808</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The make-parents function throws a null pointer exception when given a simple local directory file.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;user&amp;gt; (io/make-parents &quot;test&quot;)&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;Thrown class java.lang.NullPointerException&lt;/tt&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14458">CLJ-808</key>
            <summary>In java.io, the make-parents function can&apos;t handle files without parent directory.</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="budu">Nicolas Buduroi</assignee>
                                <reporter username="budu">Nicolas Buduroi</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Jun 2011 13:30:56 -0500</created>
                <updated>Fri, 29 Jul 2011 10:17:41 -0500</updated>
                    <resolved>Fri, 29 Jul 2011 10:17:41 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26530" author="redinger" created="Tue, 21 Jun 2011 18:46:38 -0500"  >&lt;p&gt;Second patch is more idiomatic.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10254" name="0001-Fixes-java.io-make-parents-to-not-throw-a-NullPointe.patch" size="895" author="budu" created="Wed, 8 Jun 2011 13:30:56 -0500" />
                    <attachment id="10263" name="0808-idiomatic.patch" size="804" author="redinger" created="Tue, 21 Jun 2011 18:46: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-802] mod throws exception on large args</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-802</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;From &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/09718dc9c253d1ab&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/09718dc9c253d1ab&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;user=&amp;gt; (mod 3216478362187432 432143214)
ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1374)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14442">CLJ-802</key>
            <summary>mod throws exception on large args</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Sun, 22 May 2011 00:53:25 -0500</created>
                <updated>Fri, 27 May 2011 11:14:26 -0500</updated>
                    <resolved>Fri, 27 May 2011 11:14:26 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10236" name="fix-mod.patch" size="1160" author="ataggart" created="Sun, 22 May 2011 00:53: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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-801] Protocols Should Handle Hash Collision</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-801</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Protocols internal is using min-hash and throwing a collision, similar to the bug fixed in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-426&quot; title=&quot;case should handle hash collision&quot;&gt;&lt;del&gt;CLJ-426&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/msg/clojure/0qllPii3fJY/Lile5yQPxuIJ&quot;&gt;https://groups.google.com/d/msg/clojure/0qllPii3fJY/Lile5yQPxuIJ&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14440">CLJ-801</key>
            <summary>Protocols Should Handle Hash Collision</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="redinger">Christopher Redinger</reporter>
                        <labels>
                    </labels>
                <created>Fri, 20 May 2011 12:34:43 -0500</created>
                <updated>Tue, 21 Jun 2011 07:41:21 -0500</updated>
                    <resolved>Tue, 21 Jun 2011 07:41:20 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26452" author="ataggart" created="Sat, 21 May 2011 21:29:02 -0500"  >&lt;p&gt;map-fallback-cache.patch: protocol&apos;s method cache falls back to using a map when shift-mask table won&apos;t work, instead of throwing an exception.&lt;/p&gt;</comment>
                    <comment id="26468" author="ataggart" created="Fri, 27 May 2011 14:45:51 -0500"  >&lt;p&gt;test-801.patch: tests method cache collision behaviour by modifying &lt;tt&gt;clojure.lang.MethodImplCache&lt;/tt&gt; to allow arbitrary objects.&lt;/p&gt;</comment>
                    <comment id="26470" author="fogus" created="Fri, 27 May 2011 15:40:07 -0500"  >&lt;p&gt;The attached test helps to illustrate the problem, but it needs some work to make it a useful regression for the existing code.&lt;/p&gt;</comment>
                    <comment id="26480" author="stuart.sierra" created="Wed, 1 Jun 2011 13:47:35 -0500"  >&lt;p&gt;File &quot;test-801b.patch&quot; can replace A. Taggart&apos;s &quot;test-801.patch&quot; from 27/May/11.&lt;/p&gt;

&lt;p&gt;This new test can be applied independently of the bug fix in &quot;map-fallback-cache.patch&quot;.&lt;/p&gt;

&lt;p&gt;The test temporarily redefines clojure.core/hash to force a hash collision.  Before the bug fix, the test fails with &quot;java.lang.IllegalArgumentException: Hashes must be distinct.&quot;  After the fix, the test passes.&lt;/p&gt;</comment>
                    <comment id="26486" author="ataggart" created="Wed, 1 Jun 2011 22:36:55 -0500"  >&lt;p&gt;Just wanted to note that hash collisions are not the only issue.  The shift-mask&apos;s mask is limited to 13 bits, so it&apos;s possible for hashes to be distinct but still not satisfy the constraints.  This latter condition is what was being tested by the &quot;no min-hash&quot; test case in test-801.patch.&lt;/p&gt;</comment>
                    <comment id="26487" author="stuart.sierra" created="Thu, 2 Jun 2011 08:10:45 -0500"  >&lt;p&gt;I&apos;ll try to add another test for the no-min-hash case.&lt;/p&gt;</comment>
                    <comment id="26488" author="stuart.sierra" created="Thu, 2 Jun 2011 09:15:50 -0500"  >&lt;p&gt;File &quot;test-801c.patch&quot; supplants &quot;test-801b.patch&quot; and adds another test for the no-min-hash case.&lt;/p&gt;

&lt;p&gt;Both tests fail before &quot;map-fallback-cache.patch&quot; and pass after.&lt;/p&gt;</comment>
                    <comment id="26512" author="tsdh" created="Tue, 14 Jun 2011 02:45:16 -0500"  >&lt;p&gt;I&apos;ve just applied map-fallback-cache.patch on top of commit 66a88de9408e93cf2b0d73382e662624a54c6c86, and now my project runs fine.  Before, I frequently had these &quot;no distinct mappings found&quot; error.&lt;/p&gt;</comment>
                    <comment id="26522" author="stuart.sierra" created="Tue, 21 Jun 2011 07:41:21 -0500"  >&lt;p&gt;Code &amp;amp; Test patches pushed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10233" name="map-fallback-cache.patch" size="5394" author="ataggart" created="Sat, 21 May 2011 21:29:02 -0500" />
                    <attachment id="10251" name="test-801b.patch" size="1870" author="stuart.sierra" created="Wed, 1 Jun 2011 13:47:35 -0500" />
                    <attachment id="10253" name="test-801c.patch" size="6455" author="stuart.sierra" created="Thu, 2 Jun 2011 09:15:49 -0500" />
                    <attachment id="10243" name="test-801.patch" size="2584" author="ataggart" created="Fri, 27 May 2011 14:45: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-800] defrecord/deftype enhancements from 1.3.0-alpha7</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-800</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;a href=&quot;http://dev.clojure.org/display/design/defrecord+improvements&quot;&gt;defrecord read/print functionality&lt;/a&gt; added in clojure-1.3.0-alpha7 based on ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-374&quot;&gt;CLJ-374&lt;/a&gt; provided a baseline semantics for the described functionality.  However, there were some short-comings of the implementation that should be fixed, including:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Symbols not supported in the record/type reader form&lt;/li&gt;
	&lt;li&gt;Type forms are not performant as a result of being handled by print-dup
	&lt;ul&gt;
		&lt;li&gt;This also leads to a situation where hinting is problematic&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;The boxClass method uses Reflector&lt;/li&gt;
	&lt;li&gt;Emission of records pulls out k/v&apos;s to create new map to build new record. Record itself should be used instead&lt;/li&gt;
	&lt;li&gt;Factory fn should not restrict definition of record/type with &amp;gt;20 fields (&lt;a href=&quot;http://groups.google.com/group/clojure/browse_frm/thread/d2a9653e28b77c96&quot;&gt;see here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The semantics of the 1.3.0-alpha7 behavior should remain intact (save for bug fixes that open more functionality).&lt;/p&gt;</description>
                <environment></environment>
            <key id="14435">CLJ-800</key>
            <summary>defrecord/deftype enhancements from 1.3.0-alpha7</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="fogus">Fogus</reporter>
                        <labels>
                    </labels>
                <created>Wed, 18 May 2011 07:04:59 -0500</created>
                <updated>Fri, 27 May 2011 14:20:38 -0500</updated>
                    <resolved>Fri, 27 May 2011 14:20:38 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26442" author="fogus" created="Wed, 18 May 2011 07:09:38 -0500"  >&lt;p&gt;Added patch with fixes and tests.&lt;/p&gt;</comment>
                    <comment id="26455" author="fogus" created="Tue, 24 May 2011 07:29:49 -0500"  >&lt;p&gt;Updated patch to account for records/types of &amp;gt;20 fields. (&lt;a href=&quot;http://groups.google.com/group/clojure/browse_frm/thread/d2a9653e28b77c96&quot;&gt;see here&lt;/a&gt;)&lt;/p&gt;</comment>
                    <comment id="26464" author="stu" created="Fri, 27 May 2011 11:51:30 -0500"  >&lt;p&gt;rest args such as overage in build-positional-factory are not clojure.lang.Indexed. Possible perf issue for (n - 20) calls to nth creating large records?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10237" name="CLJ-800-defrecord-deftype-fixes-from-1.3.0-alpha7.patch" size="23798" author="fogus" created="Tue, 24 May 2011 07:29:49 -0500" />
                    <attachment id="10232" name="CLJ-800-defrecord-deftype-fixes-from-1.3.0-alpha7.patch" size="14884" author="fogus" created="Wed, 18 May 2011 07:09: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="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-798] BigInteger is print-dup&apos;able but not readable</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-798</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Per Rich, &quot;We should never be printing something that can&apos;t be read.&quot;&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; (binding [*print-dup* true] (print-str (java.math.BigInteger. &quot;1&quot;)))
&quot;1BIGINT&quot;
user=&amp;gt; (read-string *1)
NumberFormatException Invalid number: 1BIGINT  clojure.lang.LispReader.readNumber (LispReader.java:253)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This can either be resolved by removing the print-dup for BigInteger, printing it using the N notation (thus being read in as a BigInt), or adding read support for the BIGINT notation.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14433">CLJ-798</key>
            <summary>BigInteger is print-dup&apos;able but not readable</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Mon, 16 May 2011 12:57:43 -0500</created>
                <updated>Fri, 29 Jul 2011 10:17:42 -0500</updated>
                    <resolved>Fri, 29 Jul 2011 10:17:42 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26454" author="ataggart" created="Sat, 21 May 2011 21:58:16 -0500"  >&lt;p&gt;Patch emits BigIntegers using the N notation.&lt;/p&gt;

&lt;p&gt;Apply patch after &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-799&quot; title=&quot;ArrayMaps print-dup with read-eval&quot;&gt;&lt;del&gt;CLJ-799&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="26457" author="redinger" created="Wed, 25 May 2011 14:20:01 -0500"  >&lt;p&gt;See discussion on clojure-dev mailing list: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/VHvIGmS3HGw/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/VHvIGmS3HGw/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26463" author="redinger" created="Fri, 27 May 2011 11:02:18 -0500"  >&lt;p&gt;Commentary on the Rich quote: We should read in the same thing that we wrote out. I think the preferred solution would be to read BigIntegers back in as BigIntegers.&lt;/p&gt;</comment>
                    <comment id="26465" author="ataggart" created="Fri, 27 May 2011 13:25:28 -0500"  >&lt;p&gt;readable-BIGINT.patch: makes the BIGINT notation readable to a java.lang.BigInteger.&lt;/p&gt;</comment>
                    <comment id="26469" author="redinger" created="Fri, 27 May 2011 15:06:29 -0500"  >&lt;p&gt;Tests don&apos;t apply cleanly on latests master (due to us taking in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-797&quot; title=&quot;Longs print-dup to the Long constructor&quot;&gt;&lt;del&gt;CLJ-797&lt;/del&gt;&lt;/a&gt; in alpha 8 without this one).&lt;/p&gt;

&lt;p&gt;Would you mind refreshing this patch?&lt;/p&gt;</comment>
                    <comment id="26472" author="ataggart" created="Mon, 30 May 2011 13:26:04 -0500"  >&lt;p&gt;readable-BIGINT-update-1.patch: applies to master&lt;/p&gt;</comment>
                    <comment id="26473" author="stuart.sierra" created="Tue, 31 May 2011 08:33:04 -0500"  >&lt;p&gt;Patch readable-BIGINT-update-1.patch applies on master as of commit 66a88de9408e93cf2b0d73382e662624a54c6c86.&lt;/p&gt;

&lt;p&gt;However, I find this notation confusing. &quot;BIGINT&quot; looks like BigInt but actually means BigInteger.&lt;/p&gt;

&lt;p&gt;If Clojure uses BigInt everywhere instead of BigInteger, I recommend removing this literal syntax.&lt;/p&gt;</comment>
                    <comment id="26496" author="richhickey" created="Tue, 7 Jun 2011 20:45:43 -0500"  >&lt;p&gt;Let&apos;s please remove print-dup for BigIntegers. None of these other ideas have been approved. I don&apos;t want new literal syntax, nor print-dup taking one thing and reading as another. I especially don&apos;t want to have to discover what the plan is by reading the patch, The plan should be approved up front and be clear from the description.&lt;/p&gt;</comment>
                    <comment id="26499" author="ataggart" created="Thu, 9 Jun 2011 01:21:32 -0500"  >&lt;p&gt;remove-biginteger-print.patch: removes both print-dup and print-method methods for BigInteger.  Now defaults to Number&apos;s methods.&lt;/p&gt;

&lt;p&gt;And I strongly agree that patches should come after &quot;the plan&quot;, but in the face of silence from the planners, some of us might feel inclined to make ready with some potential solutions while we have some time to spare.&lt;/p&gt;</comment>
                    <comment id="26528" author="redinger" created="Tue, 21 Jun 2011 18:35:58 -0500"  >&lt;p&gt;Rich: I am interpreting the &quot;no new literal syntax&quot; part of your comment to mean that you don&apos;t want the &quot;BIGINT&quot; which is in print-method, therefore print-method is out, as well as print-dup. If that is the correct interpretation, this patch looks right.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10235" name="print-dup-big-integer.patch" size="1379" author="ataggart" created="Sat, 21 May 2011 21:58:16 -0500" />
                    <attachment id="10241" name="readable-BIGINT.patch" size="2704" author="ataggart" created="Fri, 27 May 2011 13:33:17 -0500" />
                    <attachment id="10247" name="readable-BIGINT-update-1.patch" size="3091" author="ataggart" created="Mon, 30 May 2011 13:26:04 -0500" />
                    <attachment id="10255" name="remove-biginteger-print.patch" size="1833" author="ataggart" created="Thu, 9 Jun 2011 01:21:32 -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-797] Longs print-dup to the Long constructor</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-797</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; (binding [*print-dup* true] (print-str 1.0))
&quot;1.0&quot;
user=&amp;gt; (binding [*print-dup* true] (print-str 1))
&quot;#=(java.lang.Long. \&quot;1\&quot;)&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14432">CLJ-797</key>
            <summary>Longs print-dup to the Long constructor</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Mon, 16 May 2011 12:53:03 -0500</created>
                <updated>Fri, 27 May 2011 14:20:36 -0500</updated>
                    <resolved>Fri, 27 May 2011 14:20:35 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26466" author="ataggart" created="Fri, 27 May 2011 13:40:17 -0500"  >&lt;p&gt;print-dup-longs-update-1: apply after &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-798&quot; title=&quot;BigInteger is print-dup&amp;#39;able but not readable&quot;&gt;&lt;del&gt;CLJ-798&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10231" name="print-dup-longs.patch" size="3086" author="ataggart" created="Mon, 16 May 2011 12:53:04 -0500" />
                    <attachment id="10242" name="print-dup-longs-update-1.patch" size="3001" author="ataggart" created="Fri, 27 May 2011 13:40:17 -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-796] Records with fields named &quot;values&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-796</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It looks to me like there is a problem in records when the field name &quot;values&quot; is used:&lt;/p&gt;

&lt;p&gt;(defrecord Foo &lt;span class=&quot;error&quot;&gt;&amp;#91;values&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;(= (Foo. 1)&lt;br/&gt;
   (Foo. 1))&lt;/p&gt;

&lt;p&gt;;; -&amp;gt; false&lt;/p&gt;</description>
                <environment></environment>
            <key id="14431">CLJ-796</key>
            <summary>Records with fields named &quot;values&quot;</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="richhickey">Rich Hickey</assignee>
                                <reporter username="david-mcneil">David McNeil</reporter>
                        <labels>
                    </labels>
                <created>Mon, 16 May 2011 09:06:37 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Wed, 18 May 2011 09:24:24 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26443" author="fogus" created="Wed, 18 May 2011 07:37:07 -0500"  >&lt;p&gt;Hi David,&lt;/p&gt;

&lt;p&gt;This condition seems to go back to 1.2 and still exists in version 1.3.0-alpha7.  We&apos;ll take a look.  &lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;</comment>
                    <comment id="26444" author="fogus" created="Wed, 18 May 2011 07:45:06 -0500"  >&lt;p&gt;The problem seems to occur whenever a field name conflicts with a name of one of the record&apos;s protocol functions:&lt;/p&gt;

&lt;p&gt;(defrecord R &lt;span class=&quot;error&quot;&gt;&amp;#91;isEmpty&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;(= (R. 42) (R. 42))&lt;br/&gt;
;=&amp;gt; false&lt;/p&gt;

&lt;p&gt;(defrecord RR &lt;span class=&quot;error&quot;&gt;&amp;#91;count&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;(= (RR. 42) (RR. 42))&lt;br/&gt;
;=&amp;gt; false&lt;/p&gt;

&lt;p&gt;Either this should be made to work, or an error signalled regarding a name clash.  Anyone have an opinion?&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-795] bit-clear index should be zero based</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-795</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As posted to the mailing list: &lt;a href=&quot;https://groups.google.com/d/topic/clojure/ky_cVkQyhNw/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/ky_cVkQyhNw/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;alpha7 introduced a regression where the bit-clear index is no longer zero based&lt;/p&gt;

&lt;p&gt;user&amp;gt; &lt;b&gt;clojure-version&lt;/b&gt;&lt;br/&gt;
{:major 1, :minor 3, :incremental 0, :qualifier &quot;alpha4&quot;}&lt;br/&gt;
user&amp;gt; (bit-clear 3 1)&lt;br/&gt;
1&lt;br/&gt;
user&amp;gt; (bit-clear 3 0)&lt;br/&gt;
2&lt;br/&gt;
user&amp;gt; (bit-clear 3 2)&lt;br/&gt;
3&lt;br/&gt;
user&amp;gt;&lt;br/&gt;
user&amp;gt; &lt;b&gt;clojure-version&lt;/b&gt;&lt;br/&gt;
{:major 1, :minor 3, :incremental 0, :qualifier &quot;alpha7&quot;}&lt;br/&gt;
user&amp;gt; (bit-clear 3 1)&lt;br/&gt;
2&lt;br/&gt;
user&amp;gt; (bit-clear 3 0)&lt;br/&gt;
1&lt;br/&gt;
user&amp;gt; (bit-clear 3 2)&lt;br/&gt;
0 &lt;/p&gt;</description>
                <environment></environment>
            <key id="14430">CLJ-795</key>
            <summary>bit-clear index should be zero based</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="redinger">Christopher Redinger</reporter>
                        <labels>
                    </labels>
                <created>Sun, 15 May 2011 19:47:11 -0500</created>
                <updated>Fri, 27 May 2011 11:14:25 -0500</updated>
                    <resolved>Fri, 27 May 2011 11:14:25 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26441" author="ataggart" created="Mon, 16 May 2011 02:23:45 -0500"  >&lt;p&gt;Patch fixes regression and adds some tests.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10230" name="CLJ-795.patch" size="1649" author="ataggart" created="Mon, 16 May 2011 02:23: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-794] Some alpha-7 printdup functions have left-over debug messages.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-794</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(defmethod print-dup clojure.lang.IPersistentCollection &lt;span class=&quot;error&quot;&gt;&amp;#91;o, ^Writer w&amp;#93;&lt;/span&gt; (print &quot; ipcpd &quot;) &lt;br/&gt;
(defmethod print-dup clojure.lang.PersistentHashMap &lt;span class=&quot;error&quot;&gt;&amp;#91;o w&amp;#93;&lt;/span&gt; (print &quot; phmpd &quot;) (print-method o w))&lt;/p&gt;
</description>
                <environment>Clojure alpha7</environment>
            <key id="14425">CLJ-794</key>
            <summary>Some alpha-7 printdup functions have left-over debug messages.</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="fogus">Fogus</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 May 2011 15:20:40 -0500</created>
                <updated>Fri, 27 May 2011 11:14:25 -0500</updated>
                    <resolved>Fri, 27 May 2011 11:14:25 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10229" name="CLJ-794-leftover-debug-msgs.patch" size="1401" author="fogus" created="Fri, 13 May 2011 15:23:45 -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>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-791] Include argument type info in reflection warnings and method signatures in dispatch compilation errors</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-791</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Errors 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;More than one matching method found: foo&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;are bad, especially when there are multiple overloads and the types of one&apos;s arguments aren&apos;t immediately obvious.  In addition, reflection warnings 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;Reflection warning, %s:%d - call to %s can&apos;t be resolved&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;are similarly unhelpful.&lt;/p&gt;

&lt;p&gt;The above should be modified to include as much type information as possible, i.e.:&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;More than one matching method found: foo(&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;) and foo(&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;) &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; arguments of type (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)

Reflection warning, %s:%d - call to %s can&apos;t be resolved with arguments of type (clojure.lang.PersistentVector, &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Such ideas were briefly discussed &lt;a href=&quot;http://groups.google.com/group/clojure-dev/t/d3a7083fa870a784&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14422">CLJ-791</key>
            <summary>Include argument type info in reflection warnings and method signatures in dispatch compilation errors</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="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Tue, 10 May 2011 13:27:15 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:57 -0600</updated>
                    <resolved>Fri, 7 Oct 2011 09:12:28 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26427" author="cemerick" created="Tue, 10 May 2011 13:30:09 -0500"  >&lt;p&gt;Note that the attached patch (incidentally) depends on the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-789&quot; title=&quot;Method resolution does not select exact signature matches over tying&quot;&gt;&lt;del&gt;CLJ-789&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10224" name="791.diff" size="6557" author="cemerick" created="Tue, 10 May 2011 13:30:09 -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-789] Method resolution does not select exact signature matches over tying</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-789</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Given 3+ Java methods:&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;public&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; someMethod (&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; a, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; b) {
    &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;;
}

&lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; someMethod (&lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; a, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b) {
    &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;;
}

&lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; someMethod (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b) {
    &lt;span class=&quot;code-keyword&quot;&gt;return&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;p&gt;and a Clojure call that matches one of them exactly:&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;(SomeClass/someMethod (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; 1) (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; 1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;the compiler yells at us:&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;More than one matching method found: someMethod&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It turns out that &lt;tt&gt;Compiler.getMatchingParams&lt;/tt&gt; is not clearing its &quot;tied&quot; flag when a later signature is an exact match.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14420">CLJ-789</key>
            <summary>Method resolution does not select exact signature matches over tying</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="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Tue, 10 May 2011 08:05:58 -0500</created>
                <updated>Fri, 27 May 2011 11:14:25 -0500</updated>
                    <resolved>Fri, 27 May 2011 11:14:25 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26426" author="cemerick" created="Tue, 10 May 2011 08:24:42 -0500"  >&lt;p&gt;patch attached&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10223" name="789.diff" size="3786" author="cemerick" created="Tue, 10 May 2011 08:24:42 -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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-788] Add source and line members and getters to CompilerException</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-788</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;To improve the reliability and ease of using CompilerException in tooling, add source path and line getters to CompilerException.&lt;/p&gt;

&lt;p&gt;When handling compiler exceptions programmatically, the source path and line currently have to be parsed out of the compiler exception. &lt;/p&gt;</description>
                <environment></environment>
            <key id="14414">CLJ-788</key>
            <summary>Add source and line members and getters to CompilerException</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="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Tue, 3 May 2011 11:28:19 -0500</created>
                <updated>Sun, 2 Dec 2012 17:41:54 -0600</updated>
                    <resolved>Fri, 20 Jul 2012 16:44:41 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26446" author="hugoduncan" created="Wed, 18 May 2011 17:13:52 -0500"  >&lt;p&gt;OK, I&apos;m blind - the source is already there - the line number would be nice though.&lt;/p&gt;</comment>
                    <comment id="27834" author="hugoduncan" created="Fri, 24 Feb 2012 10:28:16 -0600"  >&lt;p&gt;On clojure-1.3.0&lt;/p&gt;</comment>
                    <comment id="27836" author="jafingerhut" created="Fri, 24 Feb 2012 11:03:10 -0600"  >&lt;p&gt;clj-788-add-line-member-and-getter-to-CompilerException-patch.txt is identical to Hugo&apos;s, but for some reason that isn&apos;t obvious to me his did not apply cleanly to latest master when I tried it out, but this one does.&lt;/p&gt;

&lt;p&gt;Compiles without warnings and passes all tests.&lt;/p&gt;</comment>
                    <comment id="28753" author="stu" created="Fri, 8 Jun 2012 15:03:33 -0500"  >&lt;p&gt;Would it make sense to have CompilerException inherit from ExceptionInfo, now that we have the latter?&lt;/p&gt;</comment>
                    <comment id="28815" author="richhickey" created="Fri, 15 Jun 2012 09:32:22 -0500"  >&lt;p&gt;what patch am I supposed to be looking at?&lt;/p&gt;</comment>
                    <comment id="28816" author="jafingerhut" created="Fri, 15 Jun 2012 10:01:38 -0500"  >&lt;p&gt;They are identical except for context lines.  clj-788-add-line-member-and-getter-to-CompilerException-patch.txt is the only one that applies cleanly to latest master as of June 15, 2012.&lt;/p&gt;</comment>
                    <comment id="30134" author="bbloom" created="Sat, 1 Dec 2012 19:02:23 -0600"  >&lt;p&gt;What about getColumn ? &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-960&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-960&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30140" author="jafingerhut" created="Sun, 2 Dec 2012 17:41:54 -0600"  >&lt;p&gt;Brandon, just a warning that while anyone who looks at this ticket will see your comment, not many people examine closed tickets looking for things to do with them.  If by your comment you mean that you think some additional change should be made to Clojure that wasn&apos;t made with the patch on this ticket (which I think was committed), nor by the patch committed for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-960&quot; title=&quot;Capture :column metadata (needed for ClojureScript source maps)&quot;&gt;&lt;del&gt;CLJ-960&lt;/del&gt;&lt;/a&gt;, bringing it up in the clojure-dev group, or opening another ticket, might be more effective.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10954" name="0001-add-line-member-and-getter-to-CompilerException.diff" size="965" author="hugoduncan" created="Fri, 24 Feb 2012 10:34:11 -0600" />
                    <attachment id="10955" name="clj-788-add-line-member-and-getter-to-CompilerException-patch.txt" size="952" author="jafingerhut" created="Fri, 24 Feb 2012 11:03: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-786] The docstring for defn omits any mention of pre- and post-conditions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-786</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, the doc string for defn does not mention pre- or post-conditions in either the arg list or description.  I always forget where it goes.  &lt;/p&gt;

&lt;p&gt;Current doc string:&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;clojure.core/defn
([name doc-string? attr-map? [params*] body] [name doc-string? attr-map? ([params*] body) + attr-map?])
Macro
  Same as (def name (fn [params* ] exprs*)) or (def
    name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
    to the var metadata
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Attached is a patch to update defn 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;clojure.core/defn
([name doc-string? attr-map? [params*] prepost-map? body] [name doc-string? attr-map? ([params*] prepost-map? body) + attr-map?])
Macro
  Same as (def name (fn [params* ] exprs*)) or (def
    name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
    to the var metadata. prepost-map defines a map with optional keys
    :pre and :post that contain collections of pre or post conditions.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14412">CLJ-786</key>
            <summary>The docstring for defn omits any mention of pre- and post-conditions</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="alexmiller">Alex Miller</reporter>
                        <labels>
                    </labels>
                <created>Mon, 2 May 2011 10:16:58 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10215" name="defndoc.diff" size="1174" author="alexmiller" created="Mon, 2 May 2011 10:16:59 -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-784] Update min/max functions to take advantage of primitive math</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-784</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, the &lt;tt&gt;min&lt;/tt&gt; and &lt;tt&gt;max&lt;/tt&gt; functions are quite slow, since they don&apos;t take advantage of new primitive math.&lt;/p&gt;

&lt;p&gt;Implement them in the same manner in which other primitive math functions are implemented for efficiency.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14410">CLJ-784</key>
            <summary>Update min/max functions to take advantage of primitive math</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="lvanderhart">Luke VanderHart</assignee>
                                <reporter username="lvanderhart">Luke VanderHart</reporter>
                        <labels>
                    </labels>
                <created>Fri, 29 Apr 2011 10:20:41 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Thu, 26 May 2011 20:17:29 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26408" author="lvanderhart" created="Fri, 29 Apr 2011 15:17:10 -0500"  >&lt;p&gt;This patch creates inline versions of min and max, combined with overloaded implementations in c.l.Numbers. It is over an order of magnitude faster using a test like this one (from 19 seconds to 1.2 seconds on my machine):&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;(time (loop [a 0 b 10 c 5]
            (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (&amp;lt; a 1000000000)
                (recur (inc a) (min b c) (max c b)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There are two patches. One is contagious, but returns primitives for (long, double) input. The other is not contagious and returns primitives only for (long,long) and (double,double) args, but is still substantially faster than the original version.&lt;/p&gt;</comment>
                    <comment id="26421" author="stu" created="Fri, 6 May 2011 10:11:58 -0500"  >&lt;p&gt;The May 6 &quot;take 3&quot; patch eliminates a few contagions that were hiding in the earlier patch, and is hopefully good to go.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10217" name="0784-min-max-take-3.patch" size="3596" author="stu" created="Fri, 6 May 2011 10:11:57 -0500" />
                    <attachment id="10211" name="fast_min_max_no_contagion.patch" size="6029" author="lvanderhart" created="Fri, 29 Apr 2011 15:17:10 -0500" />
                    <attachment id="10210" name="fast_min_max.patch" size="3712" author="lvanderhart" created="Fri, 29 Apr 2011 15:17:09 -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-782] long cast is not checked for Object decimal types</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-782</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;E.g.:&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; (*&apos; Long/MAX_VALUE 100M)
922337203685477580700M
user=&amp;gt; (long *1)
-100
user=&amp;gt; (Double/valueOf Double/MAX_VALUE)
1.7976931348623157E308
user=&amp;gt; (long *1)
9223372036854775807
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And the numbers.clj test erroneously considers truncation as correct.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14408">CLJ-782</key>
            <summary>long cast is not checked for Object decimal types</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Thu, 28 Apr 2011 02:17:18 -0500</created>
                <updated>Fri, 6 May 2011 08:49:10 -0500</updated>
                    <resolved>Fri, 6 May 2011 08:49:10 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10202" name="check-longs.patch" size="2597" author="ataggart" created="Thu, 28 Apr 2011 02:17:18 -0500" />
                    <attachment id="10208" name="check-longs-update-1.patch" size="2690" author="ataggart" created="Fri, 29 Apr 2011 14:00:18 -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-781] Missing primitive-arg cast overloads</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-781</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Casting from byte or short to other primitives, and casting other primitives to byte, short, or char results in superfluous boxing due to an absence of the necessary overloads in RT.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14407">CLJ-781</key>
            <summary>Missing primitive-arg cast overloads</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Thu, 28 Apr 2011 01:59:10 -0500</created>
                <updated>Fri, 6 May 2011 08:49:10 -0500</updated>
                    <resolved>Fri, 6 May 2011 08:49:10 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26413" author="stu" created="Fri, 29 Apr 2011 17:02:11 -0500"  >&lt;p&gt;The following examples are contrived, but demonstrate an interop scenario where it seems these methods are needed to avoid boxing:&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;(.println &lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;/out (&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;short&lt;/span&gt; 1)))
(.println &lt;span class=&quot;code-object&quot;&gt;System&lt;/span&gt;/out (&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;Short&lt;/span&gt;/parseShort &lt;span class=&quot;code-quote&quot;&gt;&quot;12&quot;&lt;/span&gt;)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26414" author="ataggart" created="Fri, 29 Apr 2011 18:01:53 -0500"  >&lt;p&gt;A less contrived example:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/ataggart/codec/blob/master/src/codec/base64.clj#L28&quot;&gt;http://github.com/ataggart/codec/blob/master/src/codec/base64.clj#L28&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10201" name="prim-casts.patch" size="5018" author="ataggart" created="Thu, 28 Apr 2011 01:59:10 -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-780] race condition in reference cache on Java 5</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-780</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Map.Entry instances can have null values prior to Java 6&lt;/p&gt;

&lt;p&gt;Test failure: &lt;a href=&quot;http://build.clojure.org/job/test.generative/1/org.clojure$test.generative/console&quot;&gt;http://build.clojure.org/job/test.generative/1/org.clojure$test.generative/console&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discussion: &lt;a href=&quot;http://concurrency.markmail.org/message/pbruo2uxgur6wkoo?q=map%2Eentry+null&amp;amp;page=3#query:map.entry%20null+page:3+mid:z5arnbbzl2k32jda+state:results&quot;&gt;http://concurrency.markmail.org/message/pbruo2uxgur6wkoo?q=map%2Eentry+null&amp;amp;page=3#query:map.entry%20null+page:3+mid:z5arnbbzl2k32jda+state:results&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the fix must hold val in a local variable, because &lt;tt&gt;cache.remove&lt;/tt&gt; will bomb if the value is null.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14406">CLJ-780</key>
            <summary>race condition in reference cache on Java 5</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Wed, 27 Apr 2011 13:53:57 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:02 -0600</updated>
                    <resolved>Wed, 27 Apr 2011 16:29:11 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10199" name="check-map-entry-value.patch" size="899" author="stu" created="Wed, 27 Apr 2011 13:53:58 -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-779] Document clojure.org differences between 1.2 and 1.3</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-779</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Documentation at &lt;a href=&quot;http://clojure.org&quot;&gt;http://clojure.org&lt;/a&gt; should always represent the latest release version. When we ship Release.next, we need to update the documentation there to reflect the latest changes.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14405">CLJ-779</key>
            <summary>Document clojure.org differences between 1.2 and 1.3</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</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="redinger">Christopher Redinger</reporter>
                        <labels>
                    </labels>
                <created>Tue, 26 Apr 2011 22:12:37 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:35:55 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29916" author="stuart.sierra" created="Fri, 9 Nov 2012 08:35:55 -0600"  >&lt;p&gt;This work has been done.&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-777] Release notes for 1.3</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-777</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Go through issues and commit logs and assemble Release Notes&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/display/doc/1.3&quot;&gt;http://dev.clojure.org/display/doc/1.3&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14403">CLJ-777</key>
            <summary>Release notes for 1.3</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="redinger">Christopher Redinger</assignee>
                                <reporter username="redinger">Christopher Redinger</reporter>
                        <labels>
                    </labels>
                <created>Fri, 22 Apr 2011 11:58:03 -0500</created>
                <updated>Tue, 23 Aug 2011 18:35:45 -0500</updated>
                    <resolved>Tue, 23 Aug 2011 18:35:44 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26434" author="redinger" created="Fri, 13 May 2011 14:39:09 -0500"  >&lt;p&gt;With the alpha7 stuff included&lt;/p&gt;</comment>
                    <comment id="26474" author="stuart.sierra" created="Tue, 31 May 2011 08:39:12 -0500"  >&lt;p&gt;Patch does not apply on master as of commit 66a88de9408e93cf2b0d73382e662624a54c6c86.&lt;/p&gt;</comment>
                    <comment id="26475" author="stuart.sierra" created="Tue, 31 May 2011 09:06:15 -0500"  >&lt;p&gt;Text error: under section &quot;1.4 Removed Bit Operation support for boxed numbers&quot; there is a second, unrelated sentence that reads &quot;Replicate has been deprecated in favor of repeat&quot;&lt;/p&gt;</comment>
                    <comment id="26481" author="stuart.sierra" created="Wed, 1 Jun 2011 15:16:16 -0500"  >&lt;p&gt;New patch &quot;1.3-beta-release-notes-4.diff&quot; subsumes Redinger&apos;s patch of 31/May/11 and adds a few fixes to the text of changes.txt.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10252" name="1.3-beta-release-notes-4.diff" size="22617" author="stuart.sierra" created="Wed, 1 Jun 2011 15:16:16 -0500" />
                    <attachment id="10248" name="1.3-beta-release-notes.diff" size="17374" author="redinger" created="Tue, 31 May 2011 19:31:41 -0500" />
                    <attachment id="10228" name="1.3-beta-release-notes.diff" size="16628" author="redinger" created="Fri, 13 May 2011 14:39:09 -0500" />
                    <attachment id="10219" name="1.3-beta-release-notes.diff" size="16352" author="redinger" created="Sat, 7 May 2011 22:55:45 -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-775] Test clojure.test-clojure.rt fails</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-775</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When I run the &lt;em&gt;mvn test&lt;/em&gt; command against Clojure built from source, I&lt;br/&gt;
encounter the following error in the test &lt;tt&gt;clojure.test-clojure.rt&lt;/tt&gt;,&lt;br/&gt;
which appears to be due to the &lt;tt&gt;bare-rt-print&lt;/tt&gt; function&apos;s use of the&lt;br/&gt;
var &lt;tt&gt;clojure.core/print-initialized&lt;/tt&gt;:&lt;/p&gt;

&lt;p&gt;{{Testing clojure.test-clojure.rt&lt;/p&gt;

&lt;p&gt;ERROR in (rt-print-prior-to-print-initialize) (Var.java:339)&lt;br/&gt;
expected: (= &quot;#\&quot;foo\&quot;&quot; (bare-rt-print #&quot;foo&quot;))&lt;br/&gt;
  actual: java.lang.IllegalStateException: Can&apos;t dynamically bind non-dynamic var: clojure.core/print-initialized&lt;br/&gt;
 at clojure.lang.Var.pushThreadBindings (Var.java:339)&lt;br/&gt;
    clojure.core$push_thread_bindings.invoke (core.clj:1656)&lt;br/&gt;
    clojure.test_clojure.rt$bare_rt_print$fn__14891.invoke (rt.clj:46)&lt;br/&gt;
    clojure.test_clojure.rt$bare_rt_print.invoke (rt.clj:45)&lt;br/&gt;
    clojure.test_clojure.rt/fn (rt.clj:53)&lt;br/&gt;
    clojure.test$test_var$fn__1762.invoke (test.clj:693)&lt;br/&gt;
    clojure.test$test_var.invoke (test.clj:693)&lt;br/&gt;
    clojure.test$test_all_vars$fn_&lt;em&gt;1766$fn&lt;/em&gt;_1773.invoke (test.clj:709)&lt;br/&gt;
    clojure.test$default_fixture.invoke (test.clj:663)&lt;br/&gt;
    clojure.test$test_all_vars$fn__1766.invoke (test.clj:709)&lt;br/&gt;
    clojure.test$default_fixture.invoke (test.clj:663)&lt;br/&gt;
    clojure.test$test_all_vars.invoke (test.clj:705)&lt;br/&gt;
    clojure.test$test_ns.invoke (test.clj:728)&lt;br/&gt;
    clojure.core$map$fn__2231.invoke (core.clj:2371)&lt;br/&gt;
    clojure.lang.LazySeq.sval (LazySeq.java:42)&lt;br/&gt;
    clojure.lang.LazySeq.seq (LazySeq.java:60)&lt;br/&gt;
    clojure.lang.ChunkedCons.chunkedNext (ChunkedCons.java:59)&lt;br/&gt;
    clojure.core$chunk_next.invoke (core.clj:643)&lt;br/&gt;
    clojure.core$reException in thread &quot;main&quot; java.lang.IllegalStateException: Pop without matching push&lt;br/&gt;
    at clojure.lang.Var.popThreadBindings(Var.java:350)&lt;br/&gt;
    at clojure.core$pop_thread_bindings.invoke(core.clj:1658)&lt;br/&gt;
    at clojure.main$script_opt.invoke(main.clj:338)&lt;br/&gt;
    at clojure.main$main.doInvoke(main.clj:426)&lt;br/&gt;
    at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
    at clojure.lang.Var.invoke(Var.java:401)&lt;br/&gt;
    at clojure.lang.AFn.applyToHelper(AFn.java:161)&lt;br/&gt;
    at clojure.lang.Var.applyTo(Var.java:518)&lt;br/&gt;
    at clojure.main.main(main.java:37)&lt;br/&gt;
duce1.invoke (core.clj:878)&lt;br/&gt;
    clojure.core$reduce1.invoke (core.clj:870)&lt;br/&gt;
    clojure.core$merge_with.doInvoke (core.clj:2588)&lt;br/&gt;
    clojure.lang.RestFn.applyTo (RestFn.java:139)&lt;br/&gt;
    clojure.core$apply.invoke (core.clj:602)&lt;br/&gt;
    clojure.test$run_tests.doInvoke (test.clj:743)&lt;br/&gt;
    clojure.lang.RestFn.applyTo (RestFn.java:137)&lt;br/&gt;
    clojure.core$apply.invoke (core.clj:600)&lt;br/&gt;
    clojure.test_clojure$eval19718.invoke (run_tests.clj:58)&lt;br/&gt;
    clojure.lang.Compiler.eval (Compiler.java:6328)&lt;br/&gt;
    clojure.lang.Compiler.load (Compiler.java:6765)&lt;br/&gt;
    clojure.lang.Compiler.loadFile (Compiler.java:6726)&lt;br/&gt;
    clojure.main$load_script.invoke (main.clj:282)&lt;br/&gt;
    clojure.main$script_opt.invoke (main.clj:342)&lt;br/&gt;
    clojure.main$main.doInvoke (main.clj:426)&lt;br/&gt;
    clojure.lang.RestFn.invoke (RestFn.java:408)&lt;br/&gt;
    clojure.lang.Var.invoke (Var.java:401)&lt;br/&gt;
    clojure.lang.AFn.applyToHelper (AFn.java:161)&lt;br/&gt;
    clojure.lang.Var.applyTo (Var.java:518)&lt;br/&gt;
    clojure.main.main (main.java:37)}}&lt;/p&gt;</description>
                <environment>Windows XP, Cygwin, with Clojure built against the tip of the published &amp;quot;clojure/clojure&amp;quot; repository on GitHub</environment>
            <key id="14401">CLJ-775</key>
            <summary>Test clojure.test-clojure.rt fails</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="seh">Steven E. Harris</reporter>
                        <labels>
                    </labels>
                <created>Wed, 20 Apr 2011 17:45:22 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:06 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:31:28 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27842" author="jafingerhut" created="Fri, 24 Feb 2012 13:02:42 -0600"  >&lt;p&gt;With latest Clojure master as of Feb 24, 2012, and with &quot;git checkout 1.3.x&quot; in a Clojure tree, &quot;mvn test&quot; builds and passes all tests for me on a Windows XP system with Cygwin, Java 1.7.0, and Maven 3.0.4.  Similarly on Mac OS X 10.6.8 with Java 1.6.0_29 and Maven 3.0.3.&lt;/p&gt;

&lt;p&gt;This may have been fixed already in 1.3.0, but it would be good for Steven to confirm.&lt;/p&gt;</comment>
                    <comment id="27843" author="jafingerhut" created="Fri, 24 Feb 2012 13:03:22 -0600"  >&lt;p&gt;Sorry, I should have said Windows Vista, but everything else applies.&lt;/p&gt;</comment>
                    <comment id="27844" author="seh" created="Fri, 24 Feb 2012 13:15:51 -0600"  >&lt;p&gt;I&apos;m ecstatic to report that at present, I don&apos;t have access to a computer running Windows with Cygwin, so I can&apos;t help verify the fix at present.&lt;/p&gt;</comment>
                    <comment id="28102" author="jafingerhut" created="Wed, 11 Apr 2012 17:34:20 -0500"  >&lt;p&gt;I have just today experienced this same exception today with the following versions of software:&lt;/p&gt;

&lt;p&gt;$ uname -a&lt;br/&gt;
Linux ubuntu 2.6.38-13-generic #57-Ubuntu SMP Mon Mar 5 18:10:14 UTC 2012 i686 i686 i386 GNU/Linux&lt;br/&gt;
$ java -version&lt;br/&gt;
java version &quot;1.7.0_02&quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)&lt;br/&gt;
Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode)&lt;br/&gt;
$ ant -version&lt;br/&gt;
Apache Ant version 1.8.1 compiled on October 13 2010&lt;/p&gt;

&lt;p&gt;With latest Clojure master as of Apr 11 2012.&lt;/p&gt;

&lt;p&gt;Note: I saw this problem when I had tar&apos;ed a .tar.gz file of the Clojure source code on one machine with a current date, then untar&apos;ed it on a machine with its clock set a few days earlier.  Thus there were many warnings during compilation about file dates being in the future.  This may have had something to do with the failures, because when I updated the system&apos;s time, the compile and tests passed.&lt;/p&gt;</comment>
                    <comment id="29915" author="stuart.sierra" created="Fri, 9 Nov 2012 08:31:28 -0600"  >&lt;p&gt;It appears that this issue has been resolved. The clojure.core/print-initialized Var is declared dynamic in commit b9b1a094499b69a94bd47fc94c4f082d80239fa9&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-774] Message-bearing assert</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-774</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;assert should take a String as a second argument.  The string is printed when the assert fails.&lt;/p&gt;

&lt;p&gt;This is lower hanging fruit than &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-415&quot; title=&quot;smarter assert (prints locals)&quot;&gt;CLJ-415&lt;/a&gt; but much better than the assert we currently have.&lt;/p&gt;

&lt;p&gt;In the future, the second argument might be an expression that gets evaluated, but for now, it shouldn&apos;t be.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14398">CLJ-774</key>
            <summary>Message-bearing assert</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="aaron">Aaron Bedra</assignee>
                                <reporter username="alan@thinkrelevance.com">Alan Dipert</reporter>
                        <labels>
                    </labels>
                <created>Fri, 15 Apr 2011 08:49:03 -0500</created>
                <updated>Fri, 29 Apr 2011 10:34:36 -0500</updated>
                    <resolved>Fri, 29 Apr 2011 10:34:34 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26400" author="richhickey" created="Fri, 29 Apr 2011 08:00:44 -0500"  >&lt;p&gt;If someone is supplying a message, will they want the original message like that?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10183" name="0744-message-carrying-asserts.diff" size="1148" author="aaron" created="Fri, 15 Apr 2011 10:43:56 -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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-773] macros that are expanded away still have their vars referenced in the emitted byte code</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-773</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;if you have a macro like:&lt;/p&gt;

&lt;p&gt;(defmacro f &lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt; a)&lt;/p&gt;

&lt;p&gt;and compile a function like:&lt;/p&gt;

&lt;p&gt;(fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (f x (/ 1 0)))&lt;/p&gt;

&lt;p&gt;the macro is expand before compilation into:&lt;/p&gt;

&lt;p&gt;(fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x) ;; no reference to f&lt;/p&gt;

&lt;p&gt;but the emitted byte code still holds the var for the macro &apos;f&apos; in a static field.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14397">CLJ-773</key>
            <summary>macros that are expanded away still have their vars referenced in the emitted byte code</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="-1">Unassigned</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Apr 2011 20:00:21 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26357" author="hiredman" created="Thu, 7 Apr 2011 20:21:26 -0500"  >&lt;p&gt;patch to not register vars during macro expansion&lt;/p&gt;</comment>
                    <comment id="27370" author="hiredman" created="Tue, 29 Nov 2011 19:50:06 -0600"  >&lt;p&gt;patch still applies cleanly and all tests pass&lt;/p&gt;</comment>
                    <comment id="27403" author="stu" created="Fri, 2 Dec 2011 13:38:06 -0600"  >&lt;p&gt;tests pass and approach seems sound&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10181" name="clj-773.diff" size="1728" author="hiredman" created="Thu, 7 Apr 2011 20:21:26 -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-772] bit ops to have primitive semantics by default, no conditionals, direct mapping to JVM primitive ops</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-772</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Per Rich&apos;s comment on &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-767&quot; title=&quot;Remove support for non-primitive bit-shift operations&quot;&gt;&lt;del&gt;CLJ-767&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14396">CLJ-772</key>
            <summary>bit ops to have primitive semantics by default, no conditionals, direct mapping to JVM primitive ops</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Apr 2011 18:46:49 -0500</created>
                <updated>Fri, 6 May 2011 08:49:10 -0500</updated>
                    <resolved>Fri, 6 May 2011 08:49:10 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26356" author="ataggart" created="Thu, 7 Apr 2011 20:12:08 -0500"  >&lt;p&gt;Waiting on confirmation that patch on &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-767&quot; title=&quot;Remove support for non-primitive bit-shift operations&quot;&gt;&lt;del&gt;CLJ-767&lt;/del&gt;&lt;/a&gt; is correct.&lt;/p&gt;</comment>
                    <comment id="26412" author="stu" created="Fri, 29 Apr 2011 15:54:26 -0500"  >&lt;p&gt;commit message is odd, but commit looks right&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10212" name="bit-ops.patch" size="16013" author="ataggart" created="Fri, 29 Apr 2011 15:32:59 -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-769] partition-by holds references to head groups longer than necessary</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-769</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;partition-by&lt;/tt&gt; continues to hold references to items of the input sequence where it should not anymore. That is after &lt;tt&gt;(rest s)&lt;/tt&gt; there are still references held to the head group of the &lt;tt&gt;partition-by&lt;/tt&gt; output sequence.&lt;/p&gt;</description>
                <environment>Clojure 1.2</environment>
            <key id="14393">CLJ-769</key>
            <summary>partition-by holds references to head groups longer than necessary</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="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Tue, 5 Apr 2011 04:36:38 -0500</created>
                <updated>Tue, 21 Jun 2011 14:06:41 -0500</updated>
                    <resolved>Tue, 21 Jun 2011 14:06:41 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26350" author="mbrandmeyer" created="Wed, 6 Apr 2011 01:44:14 -0500"  >&lt;p&gt;Fix for &lt;tt&gt;partition-by&lt;/tt&gt; by realising the &lt;tt&gt;drop&lt;/tt&gt;.&lt;/p&gt;</comment>
                    <comment id="26351" author="mbrandmeyer" created="Wed, 6 Apr 2011 02:40:16 -0500"  >&lt;p&gt;I think, I finally found a way to demonstrate the issue. In the following &lt;tt&gt;memrem&lt;/tt&gt; is a function, which just greedy requests memory until it is exhausted. Since &lt;tt&gt;SoftReference}}s are guaranteed to be cleared before an {{OutOfMemoryError&lt;/tt&gt; is thrown, we can use this to check whether a reference to an item is retained.&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; (def r (SoftReference. (byte-array 100000000)))
#&apos;user/r
user=&amp;gt; (def s (rest (partition-by alength (list (.get r) (byte-array 100000000) (byte-array 200000000)))))
#&apos;user/s
user=&amp;gt; (memrem)
.
.
java.lang.OutOfMemoryError: Java heap space (NO_SOURCE_FILE:0)
user=&amp;gt; (prn (.get r))
#&amp;lt;byte[] [B@1cfb802&amp;gt;
nil
user=&amp;gt; (def s (seq s))
#&apos;user/s
user=&amp;gt; (memrem)
.
.
.
.
java.lang.OutOfMemoryError: Java heap space (NO_SOURCE_FILE:0)
user=&amp;gt; (prn (.get r))
nil
nil
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We place a large array in a &lt;tt&gt;SoftReference&lt;/tt&gt; and call &lt;tt&gt;partition-by&lt;/tt&gt; such, that the array is referenced by the first group. Then we take the &lt;tt&gt;rest&lt;/tt&gt; of the output sequence. Since no reference to the sequence head is retained the array should be now free for garbage collection.&lt;/p&gt;

&lt;p&gt;However, after the &lt;tt&gt;memrem&lt;/tt&gt; the &lt;tt&gt;SoftReference&lt;/tt&gt; still references the array, which means there is another reference to the array. And in fact, if we actually realise the &lt;tt&gt;rest&lt;/tt&gt;, this reference is gone. And after another &lt;tt&gt;memrem&lt;/tt&gt; round trip the &lt;tt&gt;SoftReference&lt;/tt&gt; is cleared.&lt;/p&gt;

&lt;p&gt;The problem is that the call to &lt;tt&gt;drop&lt;/tt&gt; in &lt;tt&gt;partition-by&lt;/tt&gt; is not realised immediately. Hence it keeps a reference to the head of the input sequence until it is realised. However there is no reason why the &lt;tt&gt;drop&lt;/tt&gt; should not immediately be realised. &lt;tt&gt;count&lt;/tt&gt; is eager and hence realises the run, which in turn realises further items of the input sequence. So the elements are realised anyway. Adding a call to &lt;tt&gt;seq&lt;/tt&gt; to realise the &lt;tt&gt;drop&lt;/tt&gt; hence does not harm laziness of &lt;tt&gt;partition-by&lt;/tt&gt;, but removes the undesired reference to the head of the input sequence. (Alternatively one could use &lt;tt&gt;nthnext&lt;/tt&gt; instead of &lt;tt&gt;(seq (drop...))&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; (def r (SoftReference. (byte-array 100000000)))
#&apos;user/r
user=&amp;gt; (def s (rest (partition-by-fixed alength (list (.get r) (byte-array 100000000) (byte-array 200000000)))))
#&apos;user/s
user=&amp;gt; (memrem)
.
.
.
.
java.lang.OutOfMemoryError: Java heap space (NO_SOURCE_FILE:0)
user=&amp;gt; (prn (.get r))
nil
nil
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note, how the &lt;tt&gt;SoftReference&lt;/tt&gt; is already cleared already after call to &lt;tt&gt;rest&lt;/tt&gt;.&lt;/p&gt;</comment>
                    <comment id="26392" author="aredington" created="Tue, 26 Apr 2011 19:36:30 -0500"  >&lt;p&gt;Tested the patch using the following snippet to compare HEAD and 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;(import java.lang.ref.SoftReference)
(def r (SoftReference. (byte-array 100000000)))
(def s (rest (partition-by alength (list (.get r) (byte-array 12500000) (byte-array 1250000)))))
(defn memrem [c]
      (recur (conj c (byte-array 12500000))))
(memrem ())
(prn (.get r))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compared with Meikel&apos;s snippets, I lowered the array sizes in partition-by&apos;s victim to fit in my default VM args.&lt;/p&gt;

&lt;p&gt;Attached patch appears to resolve the issue consistently when measured by this method.&lt;/p&gt;</comment>
                    <comment id="26495" author="fogus" created="Tue, 7 Jun 2011 15:27:18 -0500"  >&lt;p&gt;Ran through the logic of the change including the illustrative examples &amp;#8211; the patch is very obscure, but cleverly done (the demonstration even more so).  I considered adding a regression, but decided against it given that the nature of the illustrations are brittle with respect to the JVM settings.  I would advise that a regression that does not rely on the generation of an OOME be eventually added, but that could come later unless RH objects.  &lt;/p&gt;
</comment>
                    <comment id="26523" author="stuart.sierra" created="Tue, 21 Jun 2011 07:44:12 -0500"  >&lt;p&gt;Patch is in incorrect format; please use &quot;git format-patch&quot; as per &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26524" author="mbrandmeyer" created="Tue, 21 Jun 2011 11:06:25 -0500"  >&lt;p&gt;Updated patch according git workflow.&lt;/p&gt;</comment>
                    <comment id="26525" author="stuart.sierra" created="Tue, 21 Jun 2011 14:06:41 -0500"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10262" name="partition-by-seq-fix.diff" size="1218" author="mbrandmeyer" created="Tue, 21 Jun 2011 11:06: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-768] cl-format bug in ~f formatting</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-768</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Carlos Ungil reports a bug in cl-format as follows (&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/bb235ff4464aed78#):&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/bb235ff4464aed78#):&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello,&lt;/p&gt;

&lt;p&gt;I don&apos;t know if there is a better way to file bug reports (if there is one,&lt;br/&gt;
it&apos;s not easy to find).&lt;/p&gt;

&lt;p&gt;(use &apos;clojure.pprint)&lt;/p&gt;

&lt;p&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;x 111.11111&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (doseq [fmt &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;~3f~%&amp;quot; &amp;quot;~4f~%&amp;quot; &amp;quot;~5f~%&amp;quot; &amp;quot;~6f~%&amp;quot;&amp;#93;&lt;/span&gt;]&lt;br/&gt;
    (cl-format true fmt x)))&lt;/p&gt;

&lt;p&gt;;; 111.11111&lt;br/&gt;
;; 111.11111&lt;br/&gt;
;; 111.1&lt;br/&gt;
;; 111.11&lt;/p&gt;

&lt;p&gt;There is clearly a problem in the first two cases, too many digits are being&lt;br/&gt;
printed.&lt;/p&gt;

&lt;p&gt;For reference, this is what common lisp does:&lt;/p&gt;

&lt;p&gt;(let ((x 111.11111))&lt;br/&gt;
  (loop for fmt  in &apos;(&quot;&lt;sub&gt;3f&lt;/sub&gt;%&quot; &quot;&lt;sub&gt;4f&lt;/sub&gt;%&quot; &quot;&lt;sub&gt;5f&lt;/sub&gt;%&quot; &quot;&lt;sub&gt;6f&lt;/sub&gt;%&quot;)&lt;br/&gt;
do (format t fmt x)))&lt;/p&gt;

&lt;p&gt;;; 111.&lt;br/&gt;
;; 111.&lt;br/&gt;
;; 111.1&lt;br/&gt;
;; 111.11&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;Carlos &lt;/p&gt;</description>
                <environment></environment>
            <key id="14392">CLJ-768</key>
            <summary>cl-format bug in ~f formatting</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="jafingerhut">Andy Fingerhut</assignee>
                                <reporter username="tomfaulhaber">Tom Faulhaber</reporter>
                        <labels>
                    </labels>
                <created>Tue, 5 Apr 2011 01:08:42 -0500</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27711" author="jafingerhut" created="Mon, 13 Feb 2012 21:49:54 -0600"  >&lt;p&gt;Attached patch assumes that &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-881&quot; title=&quot;Problem with the &amp;quot;cl-format&amp;quot; function from the clojure.pprint&quot;&gt;&lt;del&gt;CLJ-881&lt;/del&gt;&lt;/a&gt; patch has been applied.  It might apply cleanly without &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-881&quot; title=&quot;Problem with the &amp;quot;cl-format&amp;quot; function from the clojure.pprint&quot;&gt;&lt;del&gt;CLJ-881&lt;/del&gt;&lt;/a&gt; patch being applied first &amp;#8211; I haven&apos;t checked.  Fixes the issue originally reported, and several other problems found with cl-format&apos;s ~f directive.&lt;/p&gt;</comment>
                    <comment id="27739" author="tomfaulhaber" created="Fri, 17 Feb 2012 09:26:21 -0600"  >&lt;p&gt;I&apos;ve reviewed the patch and it looks good to me. Thanks, Andy!&lt;/p&gt;

&lt;p&gt;To clojure/core: please go ahead and accept this patch.&lt;/p&gt;</comment>
                    <comment id="27742" author="jafingerhut" created="Fri, 17 Feb 2012 13:33:52 -0600"  >&lt;p&gt;Thanks for the review, Tom.  If you have the time, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-881&quot; title=&quot;Problem with the &amp;quot;cl-format&amp;quot; function from the clojure.pprint&quot;&gt;&lt;del&gt;CLJ-881&lt;/del&gt;&lt;/a&gt; is shorter, and fixes a different bug.  I do know that if you apply the &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-881&quot; title=&quot;Problem with the &amp;quot;cl-format&amp;quot; function from the clojure.pprint&quot;&gt;&lt;del&gt;CLJ-881&lt;/del&gt;&lt;/a&gt; recommended patch, and then this one, everything works fine.  If it is helpful, I can try out this one independently, but they are both bugs in the ~f format of cl-format, the other one causing Clojure to throw an exception for some combinations of ~f directives and numerical values.&lt;/p&gt;</comment>
                    <comment id="27810" author="jafingerhut" created="Thu, 23 Feb 2012 03:30:26 -0600"  >&lt;p&gt;clj-768-without-clj-881-patched-first.txt is the same as the one that Tom reviewed, except it applies cleanly to master as of Feb 23, 2012 without having to first apply the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-881&quot; title=&quot;Problem with the &amp;quot;cl-format&amp;quot; function from the clojure.pprint&quot;&gt;&lt;del&gt;CLJ-881&lt;/del&gt;&lt;/a&gt;.  This bug and the patch are really independent of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-881&quot; title=&quot;Problem with the &amp;quot;cl-format&amp;quot; function from the clojure.pprint&quot;&gt;&lt;del&gt;CLJ-881&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="28534" author="jafingerhut" created="Sat, 19 May 2012 01:03:51 -0500"  >&lt;p&gt;clj-768-patch-for-after-clj-881-fixed-patch2.txt dated May 18, 2012 is the most up to date one as of the latest updates to Clojure master.  Only context line changes from previous patches so that it applies cleanly, not substantive changes.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11232" name="clj-768-patch-for-after-clj-881-fixed-patch2.txt" size="7847" author="jafingerhut" created="Sat, 19 May 2012 01: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-765] Enhance clojure.java.shell/sh to accept more input types</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-765</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently clojure.java.shell/sh will only accept bytes or Strings as inputs to the subprocess&apos;s stdin.&lt;/p&gt;

&lt;p&gt;Attached patch replaces code specific to byte[] and String with a call to clojure.java.io/copy, thus additionally accepting InputStreams, Readers, and Files as input.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14381">CLJ-765</key>
            <summary>Enhance clojure.java.shell/sh to accept more input types</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="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Fri, 25 Mar 2011 20:41:21 -0500</created>
                <updated>Fri, 6 May 2011 08:49:09 -0500</updated>
                    <resolved>Fri, 6 May 2011 08:49:09 -0500</resolved>
                                            <fixVersion>Approved Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26346" author="stu" created="Tue, 5 Apr 2011 20:39:52 -0500"  >&lt;p&gt;second patch subsumes first, removes spurious imports.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10176" name="0765-shell-2.patch" size="4368" author="stu" created="Tue, 5 Apr 2011 20:39:51 -0500" />
                    <attachment id="10166" name="shell.patch" size="2842" author="ataggart" created="Fri, 25 Mar 2011 20:41:22 -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-763] Do not use hash-map constructor in destructuring to avoid multiple key check.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-763</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;What I did:&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 number-to-string
  [&amp;amp; {fmt :format locale :locale :or {locale (Locale/getDefault)}}]
  (fn [v]
    (&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;/format locale fmt (to-array [v]))))

(defn &lt;span class=&quot;code-object&quot;&gt;double&lt;/span&gt;-to-string
  [&amp;amp; options]
  (apply number-to-string :format &lt;span class=&quot;code-quote&quot;&gt;&quot;%f&quot;&lt;/span&gt; options))

(def us-number (&lt;span class=&quot;code-object&quot;&gt;double&lt;/span&gt;-to-string :locale Locale/US))
(def legacy-number (&lt;span class=&quot;code-object&quot;&gt;double&lt;/span&gt;-to-string :format &lt;span class=&quot;code-quote&quot;&gt;&quot;% 3.2f&quot;&lt;/span&gt;))

(us-number 3.14159)
(legacy-number 3.14159)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What I 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;&lt;span class=&quot;code-quote&quot;&gt;&quot;3.14159&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;  3,14&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What I got:&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.lang.IllegalArgumentException: Duplicate key: :format&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Using &lt;tt&gt;into&lt;/tt&gt; or a combination of &lt;tt&gt;reduce&lt;/tt&gt; and &lt;tt&gt;assoc&lt;/tt&gt; instead of &lt;tt&gt;hash-map&lt;/tt&gt; would allow this without breaking things.&lt;/p&gt;

&lt;p&gt;If this is a desired modification, I can provide a patch. (CA is filed.)&lt;/p&gt;</description>
                <environment>Clojure versions 1.2 and above</environment>
            <key id="14379">CLJ-763</key>
            <summary>Do not use hash-map constructor in destructuring to avoid multiple key check.</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="mbrandmeyer">Meikel Brandmeyer</assignee>
                                <reporter username="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Mar 2011 04:23:43 -0500</created>
                <updated>Fri, 18 May 2012 20:37:21 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:37:21 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26326" author="mbrandmeyer" created="Mon, 21 Mar 2011 13:43:59 -0500"  >&lt;p&gt;Build map in destructuring step by step instead of calling hash-map.&lt;/p&gt;</comment>
                    <comment id="28018" author="jafingerhut" created="Mon, 26 Mar 2012 18:43:02 -0500"  >&lt;p&gt;clj-763-destructuring-allow-dup-keys-patch2.txt dated Mar 26, 2012 applies cleanly to latest master and passes all tests, including a new one added based upon Meikel&apos;s report that fails without his fix.  Supersedes his earlier patch 0001-Avoid-duplicate-key-check-in-destructuring.patch of Mar 21, 2011.  Meikel and I have both signed CAs.&lt;/p&gt;</comment>
                    <comment id="28134" author="richhickey" created="Fri, 13 Apr 2012 09:29:17 -0500"  >&lt;p&gt;I&apos;m happy to see this improved, but it has to be fast. into + partition is not fast enough down here. Probably should instead call non-checking map ctor&lt;/p&gt;</comment>
                    <comment id="28246" author="mbrandmeyer" created="Mon, 23 Apr 2012 18:08:48 -0500"  >&lt;p&gt;Map destructuring without duplicate check with test case&lt;/p&gt;</comment>
                    <comment id="28247" author="mbrandmeyer" created="Mon, 23 Apr 2012 18:10:31 -0500"  >&lt;p&gt;Uploaded &lt;tt&gt;0001-Do-not-check-for-duplicates-in-destructuring-map-cre.patch&lt;/tt&gt; with a faster implementation accessing the unchecked constructor directly plus a simplified test case. Supersedes the two previous patches. (I can delete only mine, but not Andy&apos;s.)&lt;/p&gt;</comment>
                    <comment id="28265" author="jafingerhut" created="Tue, 24 Apr 2012 19:39:00 -0500"  >&lt;p&gt;Removing patch clj-763-destructuring-allow-dup-keys-patch2.txt dated Mar 26 2012 in favor of Meikel&apos;s Apr 23 2012 patch, which fixes the problem in a faster way, and its test is more straightforward.&lt;/p&gt;</comment>
                    <comment id="28277" author="mbrandmeyer" created="Wed, 25 Apr 2012 14:30:37 -0500"  >&lt;p&gt;Deleted obsolete patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11100" name="0001-Do-not-check-for-duplicates-in-destructuring-map-cre.patch" size="1608" author="mbrandmeyer" created="Mon, 23 Apr 2012 18:08: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-759] 1.3 alpha 6 seems to hold on to head in a case when 1.2 does not</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-759</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;File names here refer to attached files.  Instead of attaching a large input file, I attach a small program that can be run to generate a large input file.  To generate it, edit make-input-file.sh to point to a Clojure 1.2 JAR.  Also edit run.sh to point to a Clojure 1.2 and 1.3 alpha 6 JAR.  Do the following one time to create a ~ 125 Mbyte file long-input.txt:&lt;/p&gt;

&lt;p&gt;./make-input-file.sh&lt;/p&gt;

&lt;p&gt;With the JVMs I tested, I got these results, where the first argument is 1.2 or 1.3 for the Clojure version, and the second argument is the number of Mbytes to use for the max heap size of the JVM (i.e. the numeric value in the -Xmx&amp;lt;num&amp;gt;m argument in the java command line):&lt;/p&gt;

&lt;p&gt;./run.sh 1.2 384    # failed with OutOfMemoryError 5/5 times tried&lt;br/&gt;
./run.sh 1.2 416    # succeeded 5/5 times tried&lt;/p&gt;

&lt;p&gt;./run.sh 1.3 960    # failed 5/5 times tried&lt;br/&gt;
./run.sh 1.3 1048   # succeeded 5/5 or 4/5 times tried, for Mac OS X or Linux, respectively&lt;/p&gt;

&lt;p&gt;I believe the issue is that with 1.3 alpha 6, the JVM is holding on to the head of the sequence called &apos;lines&apos; for the duration of the execution of the function fasta-dna-str-with-desc-beginning, whereas 1.2 is losing the head after getting past the first when-let, and thus using significantly less memory.&lt;/p&gt;</description>
                <environment>I tested on both Mac OS X 10.6.6 with Hotspot 64-bit JVM 1.6.0_24, and Ubuntu Linux 10.4 LTS with Hotspot 64-bit JVM 1.6.0_24.  I suspect the issue is similar across JVMs.</environment>
            <key id="14375">CLJ-759</key>
            <summary>1.3 alpha 6 seems to hold on to head in a case when 1.2 does not</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>Tue, 15 Mar 2011 02:09:44 -0500</created>
                <updated>Tue, 14 Feb 2012 01:06:21 -0600</updated>
                    <resolved>Tue, 14 Feb 2012 01:06:21 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27497" author="tsdh" created="Fri, 23 Dec 2011 08:18:53 -0600"  >&lt;p&gt;Works fine with 416MB using what will become clojure-1.4.0 (commit 59d3c724684c212fbb5eafaaaac30761c2c75a37).&lt;/p&gt;</comment>
                    <comment id="27717" author="jafingerhut" created="Tue, 14 Feb 2012 01:05:29 -0600"  >&lt;p&gt;Thanks for checking, Tassilo.  I also verified that the head-holding issue is gone in 1.3.0 and latest 1.4.0-beta1 as of Feb 13, 2012 (commit e27a27d9a6dc3fd0d15f26a5076e2876007e0ae6).  I will mark this issue resolved, although I don&apos;t know which particular changes did it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10149" name="fasta.clj-11.clj" size="7249" author="jafingerhut" created="Tue, 15 Mar 2011 02:09:44 -0500" />
                    <attachment id="10150" name="make-input-file.sh" size="277" author="jafingerhut" created="Tue, 15 Mar 2011 02:09:44 -0500" />
                    <attachment id="10151" name="read.clj" size="904" author="jafingerhut" created="Tue, 15 Mar 2011 02:09:45 -0500" />
                    <attachment id="10152" name="run.sh" size="1780" author="jafingerhut" created="Tue, 15 Mar 2011 02:10:03 -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-757] Empty transient maps/sets return wrong value for .contains</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-757</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As explained in &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/496ffc7fb9058699/6e9d8152b6fd6365?show_docid=6e9d8152b6fd6365&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/496ffc7fb9058699/6e9d8152b6fd6365?show_docid=6e9d8152b6fd6365&lt;/a&gt;, (.contains (transient #{}) :some-key) returns true instead of false. (contains? #{} :some-key) works properly, but the plain .contains method does not.&lt;/p&gt;

&lt;p&gt;The issue is in TransientHashMap.doValAt(key, notFound), and the attached patch is a simple fix with test.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14373">CLJ-757</key>
            <summary>Empty transient maps/sets return wrong value for .contains</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>Mon, 14 Mar 2011 15:53:28 -0500</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26349" author="stu" created="Tue, 5 Apr 2011 20:59:02 -0500"  >&lt;p&gt;IIRC there are broader issues around lookup from transients. Should we look at this patch alone, or step back and review?&lt;/p&gt;</comment>
                    <comment id="26669" author="richhickey" created="Fri, 29 Jul 2011 07:44:13 -0500"  >&lt;p&gt;take the patch if it fixes the problem&lt;/p&gt;</comment>
                    <comment id="27809" author="jafingerhut" created="Thu, 23 Feb 2012 02:55:39 -0600"  >&lt;p&gt;clj-757-fix-behavior-of-empty-transient-maps-patch2.txt is an update of Alan&apos;s original patch, with no changes other than those required to apply cleanly to latest master as of Feb 22, 2012.  Compiles fine and runs without test errors, and does fix the behavior of the one new unit test included.&lt;/p&gt;</comment>
                    <comment id="27997" author="jafingerhut" created="Fri, 23 Mar 2012 18:30:59 -0500"  >&lt;p&gt;Approval was changed from Test to Incomplete when it was waiting on Rich&apos;s feedback.  He did give his feedback, but Approval never changed back to Test.  Doing that now in hopes it makes the ticket more accurately categorized by filters.  Feel free to give me a stern warning for mucking with the Approval field if I&apos;m out of line here.&lt;/p&gt;</comment>
                    <comment id="28862" author="jafingerhut" created="Mon, 18 Jun 2012 14:42:37 -0500"  >&lt;p&gt;clj-757-fix-behavior-of-empty-transient-maps-patch3.txt dated June 18, 2012 is identical to clj-757-fix-behavior-of-empty-transient-maps-patch2.txt, except it has some updated context lines so that it applies cleanly with latest Clojure master.  I will remove the -patch2.txt patch since it no longer applies cleanly.&lt;/p&gt;</comment>
                    <comment id="29211" author="fogus" created="Fri, 17 Aug 2012 09:56:18 -0500"  >&lt;p&gt;The patch in &lt;tt&gt;clj-757-fix-behavior-of-empty-transient-maps-patch3.txt&lt;/tt&gt; is straight-forward and so is its test.  This fixes only the behavior listed in the ticket and does not address the the general transient lookup behavior.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10147" name="0001-Fix-behavior-of-empty-transient-maps.patch" size="1309" author="amalloy" created="Mon, 14 Mar 2011 15:53:29 -0500" />
                    <attachment id="11335" name="clj-757-fix-behavior-of-empty-transient-maps-patch3.txt" size="1312" author="jafingerhut" created="Mon, 18 Jun 2012 14:42: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-755] automate distribution zip</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-755</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In the move to maven, we lost the old ant automation for creating a release zip. In order to release 1.3.0-alpha6, I am using the following ant XML I hacked together:&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;lt;target name=&lt;span class=&quot;code-quote&quot;&gt;&quot;dist&quot;&lt;/span&gt;&amp;gt;
    &amp;lt;property name=&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure.version.label&quot;&lt;/span&gt; value=&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure-1.3.0-alpha6&quot;&lt;/span&gt;/&amp;gt;
    &amp;lt;property name=&lt;span class=&quot;code-quote&quot;&gt;&quot;distdir&quot;&lt;/span&gt; value=&lt;span class=&quot;code-quote&quot;&gt;&quot;dist/${clojure.version.label}&quot;&lt;/span&gt;/&amp;gt;
    &amp;lt;mkdir dir=&lt;span class=&quot;code-quote&quot;&gt;&quot;${distdir}&quot;&lt;/span&gt;/&amp;gt;
    &amp;lt;copy todir=&lt;span class=&quot;code-quote&quot;&gt;&quot;${distdir}&quot;&lt;/span&gt; includeEmptyDirs=&lt;span class=&quot;code-quote&quot;&gt;&quot;&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&quot;&lt;/span&gt;&amp;gt;
      &amp;lt;fileset dir=&lt;span class=&quot;code-quote&quot;&gt;&quot;${basedir}&quot;&lt;/span&gt;&amp;gt;
        &amp;lt;include name=&lt;span class=&quot;code-quote&quot;&gt;&quot;*.xml&quot;&lt;/span&gt;/&amp;gt;
        &amp;lt;include name=&lt;span class=&quot;code-quote&quot;&gt;&quot;**/*.html&quot;&lt;/span&gt;/&amp;gt;
        &amp;lt;include name=&lt;span class=&quot;code-quote&quot;&gt;&quot;**/*.txt&quot;&lt;/span&gt;/&amp;gt;
        &amp;lt;include name=&lt;span class=&quot;code-quote&quot;&gt;&quot;**/*.markdown&quot;&lt;/span&gt;/&amp;gt;
        &amp;lt;include name=&lt;span class=&quot;code-quote&quot;&gt;&quot;**/*.clj&quot;&lt;/span&gt;/&amp;gt;
        &amp;lt;include name=&lt;span class=&quot;code-quote&quot;&gt;&quot;**/*.java&quot;&lt;/span&gt;/&amp;gt;
      &amp;lt;/fileset&amp;gt;
    &amp;lt;/copy&amp;gt;
    &amp;lt;copy file=&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure.jar&quot;&lt;/span&gt; todir=&lt;span class=&quot;code-quote&quot;&gt;&quot;${distdir}&quot;&lt;/span&gt;/&amp;gt;
    &amp;lt;zip basedir=&lt;span class=&quot;code-quote&quot;&gt;&quot;dist&quot;&lt;/span&gt; destfile=&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure-${clojure.version.label}.zip&quot;&lt;/span&gt;/&amp;gt;
  &amp;lt;/target&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What I need is something like this, but properly parameterized and integrated into the maven build, so I can grab it from hudson or central or somewhere after a release build.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14371">CLJ-755</key>
            <summary>automate distribution zip</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="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Mar 2011 14:21:43 -0600</created>
                <updated>Fri, 29 Jul 2011 10:08:40 -0500</updated>
                    <resolved>Fri, 29 Jul 2011 10:08:40 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26306" author="stuart.sierra" created="Fri, 11 Mar 2011 14:24:37 -0600"  >&lt;p&gt;The POM has this set up already. Just run &quot;&lt;tt&gt;mvn -Pdistribution package&lt;/tt&gt;&quot; to build a .zip file&lt;/p&gt;

&lt;p&gt;This is in the README.  Let me know if anything needs to be added/removed/changed.&lt;/p&gt;</comment>
                    <comment id="26308" author="stuart.sierra" created="Fri, 11 Mar 2011 15:25:33 -0600"  >&lt;p&gt;I added &quot;&lt;tt&gt;-Pdistribution&lt;/tt&gt;&quot; to the release build command on build.clojure.org.  I think this means that the distribution ZIP file will be included in the artifacts that get uploaded to the Maven Central Repository.  I don&apos;t know if this is correct, or if uploading ZIPs to Central is allowed.  We&apos;ll find out the next time we do a release.&lt;/p&gt;</comment>
                    <comment id="26491" author="stuart.sierra" created="Fri, 3 Jun 2011 08:19:11 -0500"  >&lt;p&gt;The .ZIP distribution is getting built on Hudson, but not uploaded to Sonatype or Central. It didn&apos;t really belong there anyway.&lt;/p&gt;

&lt;p&gt;So I&apos;ve configured Hudson to archive the .ZIP files on build.clojure.org.&lt;/p&gt;

&lt;p&gt;ZIPs only get built on releases, not SNAPSHOT builds, so this should not be filling up the disk on build.clojure.org.&lt;/p&gt;

&lt;p&gt;We can verify that this works after the next alpha release.&lt;/p&gt;</comment>
                    <comment id="26542" author="aaron" created="Tue, 28 Jun 2011 19:08:22 -0500"  >&lt;p&gt;This worked properly with the beta release&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>
                                                                                                        <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-754] 1.2.1 release</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-754</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/display/design/Release+1.2.1&quot;&gt;http://dev.clojure.org/display/design/Release+1.2.1&lt;/a&gt; and &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/f1b1fbfd2a6c1a9f&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/f1b1fbfd2a6c1a9f&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14370">CLJ-754</key>
            <summary>1.2.1 release</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="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Mar 2011 12:58:43 -0600</created>
                <updated>Sun, 20 Mar 2011 08:46:36 -0500</updated>
                    <resolved>Sun, 20 Mar 2011 08:46:36 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26303" author="stu" created="Fri, 11 Mar 2011 13:01:53 -0600"  >&lt;p&gt;The patch is just a collection of patches already applied on master, with a tweak to work around changed files.&lt;/p&gt;</comment>
                    <comment id="26304" author="richhickey" created="Fri, 11 Mar 2011 13:19:17 -0600"  >&lt;p&gt;Can it please include:&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojure/commit/5ee542d3de7e22d68e923c0f9c63267960cd1647&quot;&gt;https://github.com/clojure/clojure/commit/5ee542d3de7e22d68e923c0f9c63267960cd1647&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26305" author="stu" created="Fri, 11 Mar 2011 13:55:23 -0600"  >&lt;p&gt;The &quot;take 2&quot; version of the patch includes the patch Rich requested. Had to strip out the findKeyword calls, which did not exist back then.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10144" name="0754-maintenance-release.patch" size="229311" author="stu" created="Fri, 11 Mar 2011 13:01:53 -0600" />
                    <attachment id="10145" name="0754-maintenance-release-take-2.patch" size="233269" author="stu" created="Fri, 11 Mar 2011 13:55:23 -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-753] clojure.string/replace-first returns nil with replacement fn when regex doesn&apos;t match</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-753</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/topic/clojure/wDO1u7wRmDQ/discussion&quot;&gt;Originally reported by Takahiro Hozumi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a function as the &quot;replacement&quot; argument, clojure.string/replace-first returns nil if there is no match, instead of returning the original string unchanged.&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; (use &apos;clojure.string)
nil
user=&amp;gt; (replace-first &lt;span class=&quot;code-quote&quot;&gt;&quot;abcdef&quot;&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;ghi&quot;&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;jkl&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;abcdef&quot;&lt;/span&gt;
user=&amp;gt; (replace-first &lt;span class=&quot;code-quote&quot;&gt;&quot;abcdef&quot;&lt;/span&gt; #&lt;span class=&quot;code-quote&quot;&gt;&quot;ghi&quot;&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;jkl&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;abcdef&quot;&lt;/span&gt;
user=&amp;gt; (replace-first &lt;span class=&quot;code-quote&quot;&gt;&quot;abcdef&quot;&lt;/span&gt; #&lt;span class=&quot;code-quote&quot;&gt;&quot;ghi&quot;&lt;/span&gt; (fn [a] &lt;span class=&quot;code-quote&quot;&gt;&quot;jkl&quot;&lt;/span&gt;))
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14369">CLJ-753</key>
            <summary>clojure.string/replace-first returns nil with replacement fn when regex doesn&apos;t match</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="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Mar 2011 07:54:15 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 24 Aug 2012 07:41:03 -0500</resolved>
                                            <fixVersion>Approved Backlog</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26322" author="fbrubacher" created="Mon, 21 Mar 2011 07:36:49 -0500"  >&lt;p&gt;This is my patch for this issue. I have a CA signed. Any suggestions and i can try again. Federico&lt;/p&gt;</comment>
                    <comment id="27353" author="cperkins" created="Mon, 28 Nov 2011 09:31:31 -0600"  >&lt;p&gt;Same fix as Frederico&apos;s patch, but also removes unnecessary allocation of a StringBuffer when there is no match, for both replace and replace first.&lt;/p&gt;</comment>
                    <comment id="27354" author="cperkins" created="Mon, 28 Nov 2011 09:46:03 -0600"  >&lt;p&gt;Same again, but with docstring typo fixes too.&lt;/p&gt;</comment>
                    <comment id="27355" author="steveminer@gmail.com" created="Mon, 28 Nov 2011 10:12:17 -0600"  >&lt;p&gt;You should use StringBuilder instead of StringBuffer.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/questions/355089/stringbuilder-and-stringbuffer-in-java&quot;&gt;http://stackoverflow.com/questions/355089/stringbuilder-and-stringbuffer-in-java&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27356" author="cperkins" created="Mon, 28 Nov 2011 10:37:56 -0600"  >&lt;p&gt;Yup, that&apos;s what I thought, but it turns out it doesn&apos;t work because java&apos;s Matcher/appendReplacement requires a StringBuffer, unfortunately.&lt;/p&gt;</comment>
                    <comment id="27360" author="jafingerhut" created="Mon, 28 Nov 2011 17:09:40 -0600"  >&lt;p&gt;I&apos;ve tested Chris&apos;s clojure-string-with-no-match-returns-original-2.patch against latest github Clojure as of this morning, and the tests pass.  Cool that he found a straightforward performance improvement for the no match case.  The code appears correct.  I also verified that for the reason Chris mentions, StringBuilder will not work as a replacement for StringBuffer.  At least there will never be any contention on the locks implementing the StringBuffer synchronization the way they are used here.&lt;/p&gt;</comment>
                    <comment id="27363" author="stuart.sierra" created="Tue, 29 Nov 2011 08:45:01 -0600"  >&lt;p&gt;Vetted &amp;amp; moved to Approved Backlog.&lt;/p&gt;</comment>
                    <comment id="27544" author="jafingerhut" created="Thu, 12 Jan 2012 00:06:50 -0600"  >&lt;p&gt;&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; has an attached proposed combined patch for this issue and that one.&lt;/p&gt;</comment>
                    <comment id="29223" author="jafingerhut" created="Sat, 18 Aug 2012 12:09:29 -0500"  >&lt;p&gt;This issue should now be corrected with the patch, attached to &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 was applied on Aug 18, 2012.&lt;/p&gt;</comment>
                    <comment id="29257" author="stuart.sierra" created="Fri, 24 Aug 2012 07:41:03 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt; patch applied 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; addresses this one, too, applied Aug 18, 2012 &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10157" name="0001-clojure.string-replace-first-now-returns-the-origina.patch" size="1598" author="fbrubacher" created="Mon, 21 Mar 2011 07:36:49 -0500" />
                    <attachment id="10721" name="clojure-string-with-no-match-returns-original-2.patch" size="4460" author="cperkins" created="Mon, 28 Nov 2011 09:46:03 -0600" />
                    <attachment id="10720" name="clojure-string-with-no-match-returns-original.patch" size="3262" author="cperkins" created="Mon, 28 Nov 2011 09:31: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-752] Remove *earmuff* == dynamic support</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-752</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As a compatibility bridge, when dynamic var support was first added, &amp;#42;earmuffed&amp;#42; vars were automagically considered dynamic. Users were promised this bridge would be removed before release. Let&apos;s get this change in so people can start dealing with it.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14368">CLJ-752</key>
            <summary>Remove *earmuff* == dynamic support</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="richhickey">Rich Hickey</reporter>
                        <labels>
                    </labels>
                <created>Wed, 9 Mar 2011 11:34:00 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 8 Apr 2011 09:03:53 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26293" author="ataggart" created="Wed, 9 Mar 2011 13:59:49 -0600"  >&lt;p&gt;Remove the warning message as well?&lt;/p&gt;</comment>
                    <comment id="26294" author="richhickey" created="Wed, 9 Mar 2011 14:05:42 -0600"  >&lt;p&gt;The warning message should be changed to say: &lt;/p&gt;

&lt;p&gt;Warning: &amp;#42;x&amp;#42; not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. Please either indicate ^:dynamic &amp;#42;x&amp;#42; or change the name.&lt;/p&gt;</comment>
                    <comment id="26295" author="ataggart" created="Wed, 9 Mar 2011 14:34:37 -0600"  >&lt;p&gt;752.patch removes inferring ^:dynamic from earmuffed var; updates warning message.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10142" name="752.patch" size="1662" author="ataggart" created="Wed, 9 Mar 2011 14:34:37 -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-751] cl-format: ~( thows an exception with an empty string</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-751</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="14366">CLJ-751</key>
            <summary>cl-format: ~( thows an exception with an empty string</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="tomfaulhaber">Tom Faulhaber</assignee>
                                <reporter username="tomfaulhaber">Tom Faulhaber</reporter>
                        <labels>
                    </labels>
                <created>Sat, 5 Mar 2011 19:42:48 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Fri, 8 Apr 2011 09:03:57 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26284" author="tomfaulhaber" created="Sat, 5 Mar 2011 19:44:30 -0600"  >&lt;p&gt;The following block of code throws an index out of range 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;(cl-format nil &quot;~:(~a~)&quot; &quot;&quot;)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26285" author="tomfaulhaber" created="Sun, 6 Mar 2011 00:01:29 -0600"  >&lt;p&gt;Patch that fixes the issue and adds tests&lt;/p&gt;</comment>
                    <comment id="26319" author="stu" created="Sun, 20 Mar 2011 10:17:38 -0500"  >&lt;p&gt;Patch works. One question: Why does cl-format print &quot;nil&quot; as &quot;Nil&quot;? Is this a CL-ism? Do we want it?&lt;/p&gt;</comment>
                    <comment id="26325" author="tomfaulhaber" created="Mon, 21 Mar 2011 10:51:31 -0500"  >&lt;p&gt;Answer: cl-format doesn&apos;t print nil as &quot;Nil&quot;. The &lt;sub&gt;(&lt;/sub&gt;) construction is a case control operator. In this case, it capitalizes the each word in the expression: &lt;a href=&quot;http://www.lispworks.com/documentation/HyperSpec/Body/22_cha.htm&quot;&gt;http://www.lispworks.com/documentation/HyperSpec/Body/22_cha.htm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In general, I&apos;ve suppressed the obvious &quot;CL-only&quot; stuff like upper case symbols and such and replaced them with the corresponding Clojure conventions.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10139" name="clj-751.diff" size="1978" author="tomfaulhaber" created="Sun, 6 Mar 2011 00:01:29 -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-749] reference a definterface in file that declares it</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-749</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-737&quot; title=&quot;definterface/gen-interface do not support array parameter and return types&quot;&gt;&lt;del&gt;CLJ-737&lt;/del&gt;&lt;/a&gt; introduced a regression: you can no longer refer to a definterface (e.g. as a type hint) later in the file that declares it. This is caused by the use of Java reflection, where the original code path used ASM reflection.&lt;/p&gt;

&lt;p&gt;The patch will keep most of the enhancement of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-737&quot; title=&quot;definterface/gen-interface do not support array parameter and return types&quot;&gt;&lt;del&gt;CLJ-737&lt;/del&gt;&lt;/a&gt; (arrays of primitives), but will not support arrays of classes. (This did not trivially work, but can be made to work as a separate enhancement if anybody strongly needs it.)&lt;/p&gt;</description>
                <environment></environment>
            <key id="14364">CLJ-749</key>
            <summary>reference a definterface in file that declares it</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Wed, 2 Mar 2011 08:18:28 -0600</created>
                <updated>Fri, 11 Mar 2011 10:21:20 -0600</updated>
                    <resolved>Fri, 11 Mar 2011 10:21:20 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10132" name="fix-0737-regression.patch" size="3778" author="stu" created="Wed, 2 Mar 2011 08:18: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-748] fast path equal case for diff</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-748</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;For the use case of clojure.data/diff in comparing test results and expectations, it would be nice to do minimal work if the objects are equal. A simple check is low-hanging fruit.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14363">CLJ-748</key>
            <summary>fast path equal case for diff</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Mon, 28 Feb 2011 16:23:01 -0600</created>
                <updated>Wed, 2 Mar 2011 06:39:56 -0600</updated>
                    <resolved>Wed, 2 Mar 2011 06:39:56 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10127" name="0748-fast-equal-diff.patch" size="1132" author="stu" created="Mon, 28 Feb 2011 20:26:19 -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-747] stack overflow diffing large objects</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-747</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;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;(clojure.data/diff (range 50000) (range 50000))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14362">CLJ-747</key>
            <summary>stack overflow diffing large objects</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, 28 Feb 2011 16:21:39 -0600</created>
                <updated>Wed, 2 Mar 2011 06:39:57 -0600</updated>
                    <resolved>Wed, 2 Mar 2011 06:39:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10126" name="0747-diffing-large-associatves.patch" size="730" author="stu" created="Mon, 28 Feb 2011 16:26:58 -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-745] gen-class should allow exposes-methods to expose protected final methods</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-745</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, there is no way in Clojure to call a protected final method of a superclass.  While this may be an acceptable limitation for proxy, gen-class should provide that ability.  Otherwise, one is now forced to create a dummy subclass in Java for the sole purpose of widening the visibility of such methods.&lt;/p&gt;

&lt;p&gt;My patch makes it so that protected final methods may be exposed via the :exposes-methods mechanism.  It is still impossible to override them.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14359">CLJ-745</key>
            <summary>gen-class should allow exposes-methods to expose protected final methods</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="dsg">Daniel Solano G&#243;mez</reporter>
                        <labels>
                    </labels>
                <created>Fri, 25 Feb 2011 13:48:38 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27311" author="chouser@n01se.net" created="Sat, 19 Nov 2011 16:13:22 -0600"  >&lt;p&gt;Updated patch to apply cleanly to Clojure 1.4 SNAPSHOT.  Included tests look good and pass.&lt;/p&gt;</comment>
                    <comment id="29201" author="chouser@n01se.net" created="Thu, 16 Aug 2012 22:26:07 -0500"  >&lt;p&gt;Patch still applies, tests still pass.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10708" name="expose-protected-final-gen-class-clojure1.4.diff" size="5576" author="chouser@n01se.net" created="Sat, 19 Nov 2011 16:13:22 -0600" />
                    <attachment id="10120" name="expose-protected-final-gen-class.diff" size="5705" author="dsg" created="Fri, 25 Feb 2011 13:48:39 -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-742] Error message for invalid map literals is not helpful</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-742</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Literal maps with an odd number of forms give an IndexOutOfBounds exception, which is unhelpful and misleading in determining the source of the error. They should instead return a more specific error, something like &quot;map literal must contain an even number of forms&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14356">CLJ-742</key>
            <summary>Error message for invalid map literals is not helpful</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="lvanderhart">Luke VanderHart</assignee>
                                <reporter username="lvanderhart">Luke VanderHart</reporter>
                        <labels>
                    </labels>
                <created>Tue, 22 Feb 2011 19:25:02 -0600</created>
                <updated>Fri, 25 Feb 2011 15:06:26 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 15:06:25 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26234" author="lvanderhart" created="Wed, 23 Feb 2011 19:43:24 -0600"  >&lt;p&gt;Patch submitted.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10118" name="742.diff" size="1032" author="lvanderhart" created="Wed, 23 Feb 2011 19:42:25 -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-741] Stop ISeq from inheriting Sequential</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-741</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, ISeq extends Sequential, which is what collections like vector use to determine equality partition membership.  This prevents anything that implements ISeq from being exclusively in the map or set equality partition.&lt;/p&gt;

&lt;p&gt;&quot;Care will be required in making sure all appropriate concrete derivees remain Sequential. It&apos;s a breaking change in that some derivees not in Clojure may be relying on the derivation from ISeq&quot;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/c58ec42d78209ee0&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/c58ec42d78209ee0&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14355">CLJ-741</key>
            <summary>Stop ISeq from inheriting Sequential</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</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="chouser@n01se.net">Chouser</assignee>
                                <reporter username="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Sat, 19 Feb 2011 01:19:15 -0600</created>
                <updated>Fri, 11 Mar 2011 10:21:10 -0600</updated>
                    <resolved>Fri, 11 Mar 2011 10:21:10 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26224" author="chouser@n01se.net" created="Sat, 19 Feb 2011 02:00:32 -0600"  >&lt;p&gt;Here are the classes I found that implement ISeq and thus will need to be changed to implement Sequential:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;LazySeq&lt;/li&gt;
	&lt;li&gt;ASeq
	&lt;ul&gt;
		&lt;li&gt;Range&lt;/li&gt;
		&lt;li&gt;EnumerationSeq&lt;/li&gt;
		&lt;li&gt;ArraySeq (including primitives)&lt;/li&gt;
		&lt;li&gt;IteratorSeq&lt;/li&gt;
		&lt;li&gt;Cons&lt;/li&gt;
		&lt;li&gt;StringSeq&lt;/li&gt;
		&lt;li&gt;ChunkedCons&lt;/li&gt;
		&lt;li&gt;PersistentList&lt;/li&gt;
		&lt;li&gt;PersistentVector Seq, RSeq and ChunkedSeq&lt;/li&gt;
		&lt;li&gt;PersistentMap KeySeq and ValSeq&lt;/li&gt;
		&lt;li&gt;PersistentHashMap Seq and NodeSeq&lt;/li&gt;
		&lt;li&gt;PersistentQueue Seq&lt;/li&gt;
		&lt;li&gt;PersistentTreeMap Seq&lt;/li&gt;
		&lt;li&gt;PersistentArrayMap Seq&lt;/li&gt;
		&lt;li&gt;PersistentStructMap Seq&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;IndexedSeq
	&lt;ul&gt;
		&lt;li&gt;ArraySeq (including primitives)&lt;/li&gt;
		&lt;li&gt;StringSeq&lt;/li&gt;
		&lt;li&gt;PersistentVector Seq and RSeq&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;IChunkedSeq
	&lt;ul&gt;
		&lt;li&gt;ChunkedCons&lt;/li&gt;
		&lt;li&gt;PersistentVector ChunkedSeq&lt;/li&gt;
		&lt;li&gt;VecSeq (from gvec)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Should ASeq, IndexedSeq, or IChunkedSeq implement Sequential in order to impart that to all their derived classes?  My initial thought is that ASeq should reflect only ISeq and so shouldn&apos;t implement Sequential.  But I find it hard to imagine indexed or chunked seqs that aren&apos;t sequential.  Any thoughts?&lt;/p&gt;

&lt;p&gt;Also, print-method currently prints all ISeqs with round parens &amp;#8211; it seems to me this should be changed to test for Sequential instead.  Does anyone disagree?&lt;/p&gt;
</comment>
                    <comment id="26225" author="richhickey" created="Mon, 21 Feb 2011 08:44:02 -0600"  >&lt;p&gt;&amp;gt; Should ASeq, IndexedSeq, or IChunkedSeq implement Sequential in order to impart that to all their derived classes? &lt;/p&gt;

&lt;p&gt;Yes, all.&lt;/p&gt;

&lt;p&gt;&amp;gt; Also, print-method currently prints all ISeqs with round parens &#8211; it seems to me this should be changed to test for Sequential instead. Does anyone disagree?&lt;/p&gt;

&lt;p&gt;Sounds ok.&lt;/p&gt;</comment>
                    <comment id="26261" author="chouser@n01se.net" created="Fri, 4 Mar 2011 11:55:03 -0600"  >&lt;p&gt;This patch does not change the print-method &amp;#8211; it turns out that would have been a mistake.&lt;/p&gt;</comment>
                    <comment id="26268" author="stu" created="Fri, 4 Mar 2011 15:40:27 -0600"  >&lt;p&gt;My patch is same as Chouser&apos;s except tweaked to make the git gods happy.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10134" name="0001-Remove-Sequential-from-ISeq-s-implements-list-CLJ-74.patch" size="2834" author="chouser@n01se.net" created="Fri, 4 Mar 2011 11:55:03 -0600" />
                    <attachment id="10135" name="0741-iseq-sequential-resolved.patch" size="2888" author="stu" created="Fri, 4 Mar 2011 15:40:27 -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-739] version.properties file is not closed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-739</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Originally reported by Olek at &lt;a href=&quot;https://groups.google.com/d/topic/clojure/jhdSyljImuU/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/jhdSyljImuU/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When loading core.clj, the stream opened on the version.properties file is never closed. This can cause problems in some environments such as JEE.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14353">CLJ-739</key>
            <summary>version.properties file is not closed</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="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Tue, 15 Feb 2011 17:33:51 -0600</created>
                <updated>Fri, 25 Feb 2011 15:06:28 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 15:06:28 -0600</resolved>
                            <version>Backlog</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26218" author="stuart.sierra" created="Fri, 18 Feb 2011 09:28:29 -0600"  >&lt;p&gt;Fix in clj-739-a.patch&lt;/p&gt;</comment>
                    <comment id="26238" author="richhickey" created="Fri, 25 Feb 2011 08:05:10 -0600"  >&lt;p&gt;Please don&apos;t zip your patches, thanks!&lt;/p&gt;</comment>
                    <comment id="26239" author="stuart.sierra" created="Fri, 25 Feb 2011 08:34:57 -0600"  >&lt;p&gt;Got it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10112" name="clj-739-a.patch.gz" size="1213" author="stuart.sierra" created="Fri, 18 Feb 2011 09:28:29 -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>
                                                                                    <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-738] &lt;= is incorrect when args include Double/NaN</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-738</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user&amp;gt; (&amp;lt;= 10 Double/NaN 1)&lt;br/&gt;
true&lt;/p&gt;

&lt;p&gt;(on both 1.2 and 1.3 alpha 5).  &lt;/p&gt;</description>
                <environment>Mac OS X, Java 6</environment>
            <key id="14352">CLJ-738</key>
            <summary>&lt;= is incorrect when args include Double/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="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="lvanderhart">Luke VanderHart</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Feb 2011 19:07:09 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 26 Aug 2011 11:35:55 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="26217" author="jawolfe" created="Mon, 14 Feb 2011 19:18:05 -0600"  >&lt;p&gt;The source of the issue seems to be incorrect treatment of boxed NaN:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (&amp;lt;= 1000 (Double. Double/NaN))&lt;br/&gt;
true&lt;br/&gt;
user&amp;gt; (&amp;lt;= 1000 (double Double/NaN))&lt;br/&gt;
false&lt;/p&gt;</comment>
                    <comment id="26251" author="ataggart" created="Mon, 28 Feb 2011 23:14:30 -0600"  >&lt;p&gt;Primitive comparisons use java&apos;s primitive operators directly, which always return false for NaN, even when testing equality between two NaNs.&lt;/p&gt;

&lt;p&gt;In clojure, Number comparisons are all logical variations around calls to Numbers.Ops.lt(Number, Number).  So a call to &lt;tt&gt;(&amp;lt;= x y)&lt;/tt&gt; is actually a call to &lt;tt&gt;(not (&amp;lt; y x))&lt;/tt&gt;, which eventually uses the primitive &lt;tt&gt;&amp;lt;&lt;/tt&gt; operator.  Alas that logical premise doesn&apos;t hold when dealing with NaN:&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; (&amp;lt;= 1 Double/NaN)
false
user=&amp;gt; (not (&amp;lt; Double/NaN 1))
true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So the bug is not that boxed NaN is treated incorrectly, but rather:&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; (&amp;lt;= 1000 (Double. Double/NaN)) ; becomes !(NaN &amp;lt; 1000) 
true
user&amp;gt; (&amp;lt;= 1000 (double Double/NaN))  ; becomes (1000 &amp;lt;= NaN)
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In the original example, since there are more than two args, the primitive looking args were boxed:&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; (&amp;lt;= 10 Double/NaN 1) ; equivalent to logical-and of the following
true
user=&amp;gt; (&amp;lt;= 10 (Double. Double/NaN))  ; becomes !(NaN &amp;lt; 10)
true
user=&amp;gt; (&amp;lt;= (Double. Double/NaN) 1)   ; becomes !(1 &amp;lt; NaN)
true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note however that java object comparisons for NaNs behave differently: NaN is the largest Double, and NaNs equal each other (see the &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Double.html#compareTo(java.lang.Double)&quot;&gt;javadoc&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;If we make object NaN comparisons always return false, we would need to add the rest of the comparison methods to &lt;tt&gt;Numbers.Ops&lt;/tt&gt;.  Yet doing so could also make collection sorting algorithms behave oddly, deviating from sorting written in java. Besides, &lt;tt&gt;(= NaN NaN) =&amp;gt; false&lt;/tt&gt; is annoying.&lt;/p&gt;

&lt;p&gt;Clojure already throws out the notion of error-free dividing by zero (which for doubles would otherwise result in NaN or Infinity, depending on the dividend).  Perhaps we could similarly error on NaNs passed to clojure numeric ops.  They seem to be more trouble than they&apos;re worth.  That said, people smarter than me thought they were useful.&lt;/p&gt;

&lt;p&gt;Then there&apos;s that -0.0 nonsense...&lt;/p&gt;</comment>
                    <comment id="26314" author="jks" created="Sat, 19 Mar 2011 15:02:14 -0500"  >&lt;p&gt;On current master, &lt;tt&gt;(&amp;lt;= x y)&lt;/tt&gt; seems to be special-cased by the compiler, but when &lt;tt&gt;&amp;lt;=&lt;/tt&gt; is called dynamically, the bug is still there:&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; (&amp;lt;= 1 Float/NaN)
false
user=&amp;gt; (let [op &amp;lt;=] (op 1 Float/NaN))
true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Since &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-354&quot; title=&quot;&amp;lt;= and &amp;gt;= comparisons against NaN return true&quot;&gt;&lt;del&gt;CLJ-354&lt;/del&gt;&lt;/a&gt; got marked &quot;Completed&quot;, perhaps there was an attempt to fix this.&lt;/p&gt;</comment>
                    <comment id="26317" author="ataggart" created="Sat, 19 Mar 2011 18:45:55 -0500"  >&lt;p&gt;Using &lt;tt&gt;let&lt;/tt&gt; forces calling &lt;tt&gt;&amp;lt;=&lt;/tt&gt; as a function rather than inlining &lt;tt&gt;Numbers/lte&lt;/tt&gt;, which means the args are treated as objects not primitives, thus the different behaviour as I discussed earlier.&lt;/p&gt;</comment>
                    <comment id="26537" author="aaron" created="Tue, 28 Jun 2011 18:28:31 -0500"  >&lt;p&gt;Rich, what should the behavior be?&lt;/p&gt;</comment>
                    <comment id="26543" author="jks" created="Wed, 29 Jun 2011 01:22:26 -0500"  >&lt;p&gt;My suggestion for the behavior is to follow Java (Java Language Specification &#167;15.20.1) and IEEE 754. The java.sun.com site seems to be down right now, but here&apos;s a Google cache link:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://webcache.googleusercontent.com/search?q=cache:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.1&quot;&gt;http://webcache.googleusercontent.com/search?q=cache:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.1&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26671" author="richhickey" created="Fri, 29 Jul 2011 07:48:02 -0500"  >&lt;p&gt;It should work the same as primitive double in all cases&lt;/p&gt;</comment>
                    <comment id="26736" author="lvanderhart" created="Fri, 26 Aug 2011 11:33:15 -0500"  >&lt;p&gt;Added patches. The problem was that our logic for lte/gte depended on the fact that lte is equivalent to !gt. &lt;/p&gt;

&lt;p&gt;However, in Java, this assumption is invalid - any comparison involving NaN always yields false.&lt;/p&gt;

&lt;p&gt;The fix was to adding lte and gte methods to Numbers.Ops directly, rather than implementing everything in terms of lt. This was the only fix I could see that didn&apos;t incur the cost of runtime checks for NaN.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10321" name="738.diff" size="3932" author="lvanderhart" created="Fri, 26 Aug 2011 11:33:15 -0500" />
                    <attachment id="10322" name="738-tests.diff" size="2720" author="lvanderhart" created="Fri, 26 Aug 2011 11:33: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-737] definterface/gen-interface do not support array parameter and return types</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-737</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As describe in &lt;a href=&quot;http://groups.google.com/group/clojure-dev/msg/d0f457c256ce9401&quot;&gt;this clojure-dev post&lt;/a&gt;, &lt;tt&gt;gen-interface&lt;/tt&gt; and &lt;tt&gt;definterface&lt;/tt&gt; do not properly support array type hints.&lt;/p&gt;

&lt;p&gt;Ultimately, this is because &lt;tt&gt;gen-class&lt;/tt&gt; and &lt;tt&gt;gen-interface&lt;/tt&gt; use two different code paths to do essentially the same thing.  Boiled down, &lt;tt&gt;gen-class&lt;/tt&gt; converts hints using &lt;tt&gt;(Type/getType (the-class c))&lt;/tt&gt;, whereas &lt;tt&gt;gen-interface&lt;/tt&gt; uses &lt;tt&gt;asm-type&lt;/tt&gt;, which uses similar, but different, logic than &lt;tt&gt;the-class&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;In my patch, I change &lt;tt&gt;asm-type&lt;/tt&gt; to match use &lt;tt&gt;the-class&lt;/tt&gt;.  I also add entries to the &lt;tt&gt;prim-&amp;gt;class&lt;/tt&gt; map to support primitive arrays.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14351">CLJ-737</key>
            <summary>definterface/gen-interface do not support array parameter and return types</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="dsg">Daniel Solano G&#243;mez</assignee>
                                <reporter username="dsg">Daniel Solano G&#243;mez</reporter>
                        <labels>
                    </labels>
                <created>Sun, 13 Feb 2011 13:25:19 -0600</created>
                <updated>Fri, 25 Feb 2011 15:25:30 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 15:25:30 -0600</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26236" author="dsg" created="Thu, 24 Feb 2011 12:40:05 -0600"  >&lt;p&gt;An updated patch that includes tests for the new functionality.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10119" name="definterface-array-fix-with-tests.patch" size="9332" author="dsg" created="Thu, 24 Feb 2011 12:40:05 -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-736] Docstring of defrecord (and =) does not correctly describe equality behavior for records. </title>
                <link>http://dev.clojure.org/jira/browse/CLJ-736</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure/browse_frm/thread/eba691b38c45196b#&quot;&gt;http://groups.google.com/group/clojure/browse_frm/thread/eba691b38c45196b#&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The docstring of defrecord says it &quot;will define type-and- &lt;br/&gt;
value-based equality and hashCode&quot;.   In reality, record types are included in = but not .equals (or hashCode), and so records of different types can collide as map keys.   &lt;/p&gt;

&lt;p&gt;Along the same lines, the docstring of = says &quot;same as Java x.equals&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/thumbs_up.gif&quot; height=&quot;19&quot; width=&quot;19&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;, except it ... compares numbers and collections in a type-independent manner&quot;.   To me, this seems to imply the opposite of what actually happens with records. &lt;/p&gt;

&lt;p&gt;FWIW I think it would be more clear if the behavior for = and .equals were the same in this respect, but in any case the implemented behavior should be properly documented.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14349">CLJ-736</key>
            <summary>Docstring of defrecord (and =) does not correctly describe equality behavior for records. </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="stu">Stuart Halloway</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Wed, 9 Feb 2011 18:00:40 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 2 Sep 2011 09:39:50 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.3</fixVersion>
                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26493" author="stuart.sierra" created="Mon, 6 Jun 2011 09:37:25 -0500"  >&lt;p&gt;Also discussed at &lt;a href=&quot;https://groups.google.com/d/topic/clojure/e6UhXVny8Xc/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/e6UhXVny8Xc/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Per Rich, &quot;The policy is: = includes the type and .equals doesn&apos;t. In this way records can still be proper j.u.Maps and = remains most useful for records (e.g. including type).&quot;&lt;/p&gt;</comment>
                    <comment id="26494" author="jawolfe" created="Mon, 6 Jun 2011 11:25:25 -0500"  >&lt;p&gt;On a related note:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/display/doc/Enhanced+Primitive+Support?focusedCommentId=1573146#comment-1573146&quot;&gt;http://dev.clojure.org/display/doc/Enhanced+Primitive+Support?focusedCommentId=1573146#comment-1573146&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regarding &quot;hash maps and sets now use = for keys ... will use stricter .equals when calling through java.util interfaces&quot;:&lt;/p&gt;

&lt;p&gt;Note that &quot;=&quot; is actually stricter than &quot;.equals&quot; for record types currently, because it includes type information.&lt;/p&gt;

&lt;p&gt;This has important consequences for how (and whether) hash maps and sets actually obey the java.util interfaces.&lt;/p&gt;

&lt;p&gt;For instance, if &lt;/p&gt;

&lt;p&gt;(defrecord P []), ...&lt;/p&gt;

&lt;p&gt;what should (.get {(P.) 1 (Q.) 2} (Q.)) return?  How about if we .get an element of a third type (R.)?&lt;br/&gt;
&lt;br/&gt;
In a similar vein, this behavior seems confusing at best:&lt;br/&gt;
&lt;br/&gt;
user=&amp;gt; (java.util.HashMap. {(P.) 1 (Q.) 2})&lt;br/&gt;
#&amp;lt;HashMap {user.P@0=2}&amp;gt;&lt;/p&gt;</comment>
                    <comment id="26538" author="aaron" created="Tue, 28 Jun 2011 18:36:32 -0500"  >&lt;p&gt;Open question:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;the phrase &quot;type-independent&quot; is confusing. It is intended to talk about concrete numeric and collection types, but I can see why it gets confusing with records. Need an idea for two different terms here (and define them someplace). If somebody has one, please add it to this ticket.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Non-issues:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;= and .equals are not and will not be the same. The whole point is to avoid Java&apos;s broken semantics (=) while providing an interop formula for those who need it (.equals)&lt;/li&gt;
	&lt;li&gt;Any types can collide as hash keys.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26724" author="aaron" created="Fri, 19 Aug 2011 11:34:39 -0500"  >&lt;p&gt;Any thoughts on the open questions part Rich?&lt;/p&gt;</comment>
                    <comment id="26752" author="stu" created="Fri, 2 Sep 2011 09:37:00 -0500"  >&lt;p&gt;I think the following is better:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;monospaced&lt;/tt&gt;&lt;br/&gt;
  In addition, defrecord will define type-and-value-based =,&lt;br/&gt;
  and will defined Java .hashCode and .equals consistent with the&lt;br/&gt;
  contract for java.util.Map.&lt;br/&gt;
&lt;tt&gt;monospaced&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;But I don&apos;t want to hold release for discussion, so bumping this to approved backlog for further bikeshedding. &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="26753" author="stu" created="Fri, 2 Sep 2011 09:39:50 -0500"  >&lt;p&gt;Better yet, let&apos;s just agreed on my prose and call this done.&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="10005">Accepted</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_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-734] starting scope of let bindings seems incorrect from jdi perspective</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-734</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It appears like the clojure compiler doesn&apos;t get the starting scope of let bindings right from the java debug interface perspective.&lt;/p&gt;

&lt;p&gt;The compiler sets the starting scope of a local to the let/loop body, rather than to immediately after the local is bound.  So when you are stepping through a let statement in a debugger, you can&apos;t eval the already defined bindings until you get to the let body. &lt;/p&gt;

&lt;p&gt;Because it is a compiler problem, you see the symptoms with any jdi based debugger, (I&apos;ve confirmed this on both jdb and cdt.)&lt;/p&gt;

&lt;p&gt;The fix is pretty straightforward.  Just gen.mark() a label after each binding is emitted and use that in the gen.visitLocalVariable() call instead of the loopLabel. I&apos;ve attached a patch for clojure 1.2 branch.  (If there is interest I&apos;ll create one for clojure master.)&lt;/p&gt;</description>
                <environment></environment>
            <key id="14347">CLJ-734</key>
            <summary>starting scope of let bindings seems incorrect from jdi perspective</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="george">George Jahad</reporter>
                        <labels>
                    </labels>
                <created>Sun, 30 Jan 2011 16:45:05 -0600</created>
                <updated>Fri, 11 Mar 2011 10:21:22 -0600</updated>
                    <resolved>Fri, 11 Mar 2011 10:21:22 -0600</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26204" author="george" created="Sun, 30 Jan 2011 19:15:20 -0600"  >&lt;p&gt;here is the diff against the current clojure master branch.&lt;/p&gt;</comment>
                    <comment id="26207" author="george" created="Sun, 30 Jan 2011 22:25:23 -0600"  >&lt;p&gt;re-added patch in proper format&lt;/p&gt;</comment>
                    <comment id="26208" author="george" created="Mon, 31 Jan 2011 12:41:07 -0600"  >&lt;p&gt;To test: start clojure with a jdi port, (like 8050 below)&lt;br/&gt;
java  -agentlib:jdwp=transport=dt_socket,address=8050,server=y,suspend=n  -cp  /Users/georgejahad/incoming/clojure-1.3.0-alpha4/clojure.jar clojure.main&lt;/p&gt;

&lt;p&gt;Then start jdb and attach to that port like so:&lt;br/&gt;
jdb -attach 8050&lt;/p&gt;

&lt;p&gt;Set a breakpoint on pmap from jdb:&lt;br/&gt;
stop in clojure.core$pmap.invoke&lt;/p&gt;

&lt;p&gt;Invoke pmap from the clojure repl:&lt;/p&gt;

&lt;p&gt;(pmap inc (range 6))&lt;/p&gt;


&lt;p&gt;From jdb, step over the first line of pmap, (that binds the local n):&lt;br/&gt;
next&lt;/p&gt;

&lt;p&gt;From jdb, try to print the just bound local:&lt;br/&gt;
print n&lt;/p&gt;


&lt;p&gt;Without the patch, you&apos;ll see:&lt;br/&gt;
com.sun.tools.example.debug.expr.ParseException: Name unknown: n&lt;br/&gt;
n = null&lt;/p&gt;

&lt;p&gt;With it, you should see n equal to the correct value:&lt;br/&gt;
n = 4&lt;/p&gt;</comment>
                    <comment id="26226" author="stu" created="Tue, 22 Feb 2011 17:29:26 -0600"  >&lt;p&gt;Rich: does this need to be rewritten so that BindingInit is a value, or is the mutation of startScope ok?&lt;/p&gt;

&lt;p&gt;Patch works against master.&lt;/p&gt;</comment>
                    <comment id="26240" author="richhickey" created="Fri, 25 Feb 2011 09:40:35 -0600"  >&lt;p&gt;Yes, it is weird to mutate bindinginit with emit-related info. Better to keep a map of bindinginit-&amp;gt;label inside doEmit, please.&lt;/p&gt;</comment>
                    <comment id="26246" author="george" created="Sat, 26 Feb 2011 12:39:00 -0600"  >&lt;p&gt;fixed to use HashMap of labels&lt;/p&gt;</comment>
                    <comment id="26274" author="stu" created="Fri, 4 Mar 2011 21:21:52 -0600"  >&lt;p&gt;Feb 26 patch is good&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10124" name="clj-734.diff" size="1967" author="george" created="Sat, 26 Feb 2011 12:39:00 -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="10010">New</customfieldvalue>

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

<item>
            <title>[CLJ-733] Data Conveying Exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-733</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Problem: need to convey diagnostic information in an exception, and Java exceptions are poor for this because they don&apos;t have any place to put data. Having many apps write their own exceptions is unnecessary code bloat, and sometimes has compilation implications.&lt;/p&gt;

&lt;p&gt;Choices made:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Naming it &lt;tt&gt;ExceptionInfo&lt;/tt&gt;. Needs to tell the user that it carries data, without suggesting that there was a problem with data.
	&lt;ul&gt;
		&lt;li&gt;think we have to include Exception in the name, esp. for interop consumers.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Class of data member. IPersistentMap&lt;/li&gt;
	&lt;li&gt;Class of map input. IPersistentMap&lt;/li&gt;
	&lt;li&gt;Do not want to build anything to support conditional logic. (Use bindings for this).&lt;/li&gt;
	&lt;li&gt;Base class. RuntimeException is consistent with a dynamic language (don&apos;t want to impose checked exceptions).&lt;/li&gt;
	&lt;li&gt;print with data just after msg on first line&lt;/li&gt;
	&lt;li&gt;equality by identity (pretty much dictated by having exception as base class)&lt;/li&gt;
	&lt;li&gt;ex-info factory function&lt;/li&gt;
	&lt;li&gt;ex-data fn to get the data out&lt;/li&gt;
	&lt;li&gt;data and msg arguments required&lt;/li&gt;
	&lt;li&gt;data argument comes second
	&lt;ul&gt;
		&lt;li&gt;matches Java expectation of msg first, cause last&lt;/li&gt;
		&lt;li&gt;matches print order&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="14346">CLJ-733</key>
            <summary>Data Conveying Exception</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="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 28 Jan 2011 13:59:41 -0600</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Approved Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26196" author="alan@thinkrelevance.com" created="Fri, 28 Jan 2011 14:47:28 -0600"  >&lt;p&gt;Looks good; Stu&apos;s patch was missing a forward declaration to print-defrecord. 0733-data-conveying-exception-2.patch adds one, and all tests pass.&lt;/p&gt;</comment>
                    <comment id="26209" author="richhickey" created="Mon, 31 Jan 2011 12:42:58 -0600"  >&lt;p&gt;Looks like is-a to me. Why is exception a map?&lt;/p&gt;

&lt;p&gt;Also, bad practice to merge non-namespace-qualified keys with something you don&apos;t originate - should have ns. Actually, why merge at all? Why not let higher-level exception reporting handle cause and message?&lt;/p&gt;

&lt;p&gt;Is there a convention for nesting these, merging data?&lt;/p&gt;</comment>
                    <comment id="26376" author="hiredman" created="Tue, 19 Apr 2011 15:41:46 -0500"  >&lt;p&gt;type checks for :type in metadata, might be nice if that worked on DCE&apos;s, maybe they should support metadata&lt;/p&gt;</comment>
                    <comment id="26976" author="stu" created="Fri, 14 Oct 2011 12:52:32 -0500"  >&lt;p&gt;Latest patch per discussion on IRC &lt;a href=&quot;http://clojure-log.n01se.net/#11:12b&quot;&gt;http://clojure-log.n01se.net/#11:12b&lt;/a&gt; . Note that I had to touch string representation in three places (Java, main, and repl). I think main is only used for repl anyway, so a future cleanup could have main and repl share printing code.&lt;/p&gt;</comment>
                    <comment id="26979" author="richhickey" created="Fri, 14 Oct 2011 13:34:10 -0500"  >&lt;p&gt;Ctor arg order is a question. &lt;/p&gt;

&lt;p&gt;Also, do we want to encourage making an exception w/o a message?&lt;/p&gt;

&lt;p&gt;I think it should have been ex-data, in my last line on IRC, not ex-info&lt;/p&gt;

&lt;p&gt;Will we have a fn to make these rather than encode the type via ctor call everywhere? Maybe that should be called ex-info. Same fn could be useful in cljs&lt;/p&gt;</comment>
                    <comment id="26980" author="richhickey" created="Fri, 14 Oct 2011 13:51:47 -0500"  >&lt;p&gt;Also the description no longer describes the approach&lt;/p&gt;</comment>
                    <comment id="26997" author="stu" created="Sun, 16 Oct 2011 06:06:09 -0500"  >&lt;p&gt;Been back and forth on argument order, but I think msg/data/cause is best.&lt;/p&gt;</comment>
                    <comment id="26999" author="richhickey" created="Sun, 16 Oct 2011 06:32:57 -0500"  >&lt;p&gt;Only issue I think is whether you are going to enforce a map (and not nil) be passed. Currently you don&apos;t, making your doc string for ex-data wrong - it returns .getData of ExceptionInfo objects, which may be nil. If we enforce non-nil map on the way in, then ex-data works as documented and people can catch the exception and branch on ex-data. That seems most useful.&lt;/p&gt;</comment>
                    <comment id="27000" author="richhickey" created="Sun, 16 Oct 2011 06:40:56 -0500"  >&lt;p&gt;Also please mark as alpha, subject to change.&lt;/p&gt;</comment>
                    <comment id="27078" author="alan@thinkrelevance.com" created="Fri, 21 Oct 2011 10:21:02 -0500"  >&lt;p&gt;Attached &lt;tt&gt;0733-with-map-check.patch&lt;/tt&gt;. Same as &lt;tt&gt;0733-with-ex-data-and-ex-info.patch&lt;/tt&gt; but added Alpha docstring and map check to &lt;tt&gt;ex-data&lt;/tt&gt; per Rich&apos;s latest comment.&lt;/p&gt;</comment>
                    <comment id="27079" author="richhickey" created="Fri, 21 Oct 2011 14:15:46 -0500"  >&lt;p&gt;Thanks. The nil check should probably go in the ExceptionInfo ctor, just to have the same enforcement should they be created from Java.&lt;/p&gt;</comment>
                    <comment id="27391" author="stuart.sierra" created="Fri, 2 Dec 2011 09:20:17 -0600"  >&lt;p&gt;I think this line in &lt;tt&gt;clojure.repl/pst&lt;/tt&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;(when-let [info (ex-data e)] (str &lt;span class=&quot;code-quote&quot;&gt;&quot; &quot;&lt;/span&gt; info))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;should be using &lt;tt&gt;pr-str&lt;/tt&gt; instead of &lt;tt&gt;str&lt;/tt&gt;, although &lt;tt&gt;str&lt;/tt&gt; on a map already quotes string keys/values, so maybe it&apos;s good enough.&lt;/p&gt;</comment>
                    <comment id="27392" author="stuart.sierra" created="Fri, 2 Dec 2011 09:21:02 -0600"  >&lt;p&gt;Setting to &apos;Incomplete&apos; pending response to 2 previous comments.&lt;/p&gt;</comment>
                    <comment id="27394" author="stu" created="Fri, 2 Dec 2011 10:07:00 -0600"  >&lt;p&gt;The dec 2 edition does the arg check in the constructor and uses pr-str, addressing the last two comments raised.&lt;/p&gt;</comment>
                    <comment id="27395" author="stu" created="Fri, 2 Dec 2011 10:32:27 -0600"  >&lt;p&gt;The dec 2 edition does the arg check in the constructor and uses pr-str, addressing the last two comments raised.&lt;/p&gt;</comment>
                    <comment id="27412" author="stuart.sierra" created="Sat, 3 Dec 2011 12:06:58 -0600"  >&lt;p&gt;Screened &amp;amp; moved to Approved Backlog.&lt;/p&gt;</comment>
                    <comment id="27419" author="hugoduncan" created="Mon, 5 Dec 2011 16:53:53 -0600"  >&lt;p&gt;ex-info and ex-data seem rather terse names to me (exception-info and exception-data would be clearer, imho).  Clojure seems to have a mixture of abbreviated names and full names, but it was my vague impression that most of the abbreviations stemmed from traditional lisp or java usage.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10096" name="0733-data-conveying-exception-2.patch" size="3799" author="alan@thinkrelevance.com" created="Fri, 28 Jan 2011 14:47:28 -0600" />
                    <attachment id="10095" name="0733-data-conveying-exception.patch" size="3781" author="stu" created="Fri, 28 Jan 2011 14:14:50 -0600" />
                    <attachment id="10729" name="0733-dec-2-edition.patch" size="3727" author="stu" created="Fri, 2 Dec 2011 10:07:00 -0600" />
                    <attachment id="10393" name="0733-ExceptionInfo.patch" size="3916" author="stu" created="Fri, 14 Oct 2011 12:52:32 -0500" />
                    <attachment id="10403" name="0733-with-ex-data-and-ex-info.patch" size="4079" author="stu" created="Sun, 16 Oct 2011 06:06:09 -0500" />
                    <attachment id="10493" name="0733-with-map-check.patch" size="3768" author="alan@thinkrelevance.com" created="Fri, 21 Oct 2011 10:21:02 -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</customfieldva