<!--
RSS generated by JIRA (4.4#649-r158309) at Mon May 20 14:14:50 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+fixVersion+%3D+%22Release+1.3%22&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+fixVersion+%3D+%22Release+1.3%22</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="120" total="120"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<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-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-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-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-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-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-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-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-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-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-756] Workable upload destination for release zips</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-756</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;We have been using Github&apos;s file upload under &lt;a href=&quot;http://github.com/clojure&quot;&gt;http://github.com/clojure&lt;/a&gt; for uploading releases&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;looked easy&lt;/li&gt;
	&lt;li&gt;download tracking&lt;/li&gt;
	&lt;li&gt;tool we are already using&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;unreliable
	&lt;ul&gt;
		&lt;li&gt;fails to upload
		&lt;ul&gt;
			&lt;li&gt;tested on multiple browsers with and without Flash&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;even when it works seems to show up during upload
		&lt;ul&gt;
			&lt;li&gt;presumably would fail the download in these cases&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;claims to upload but has garbage file
		&lt;ul&gt;
			&lt;li&gt;shows up in UI&lt;/li&gt;
			&lt;li&gt;permission error when you try to get it&lt;/li&gt;
			&lt;li&gt;sometimes causes browser to crash (not Github fault, but still...)&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;has added two hours of dev time to the current release (so far)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In order to get 1.3.0-alpha6 out the door (and end a multihour ordeal) I am pushing it to the files section at clojure.org. &lt;/p&gt;</description>
                <environment></environment>
            <key id="14372">CLJ-756</key>
            <summary>Workable upload destination for release zips</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Mar 2011 15:10:44 -0600</created>
                <updated>Fri, 22 Apr 2011 09:34:52 -0500</updated>
                    <resolved>Fri, 22 Apr 2011 09:34:51 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26309" author="stuart.sierra" created="Sun, 13 Mar 2011 17:59:07 -0500"  >&lt;p&gt;What&apos;s behind clojure.org?  Is it a real server we can log into or some kind of hosted app?&lt;/p&gt;</comment>
                    <comment id="26382" author="redinger" created="Fri, 22 Apr 2011 09:34:52 -0500"  >&lt;p&gt;Will take this up with GitHub if we continue to have problems.&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-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-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-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-729] Add any-pred and every-pred combinators</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-729</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Per the discussion at &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_frm/thread/899349c6a9b526e0&quot;&gt;http://groups.google.com/group/clojure-dev/browse_frm/thread/899349c6a9b526e0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a general interest in a set of functions named any/every-pred that take a set of predicates and return a function that applies logical AND/OR to the application of each of its args.  The naive implementations 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;(defn every-pred [&amp;amp; preds] 
  (fn [&amp;amp; args] (every? #(every? % args) preds))) 

((every-pred pos? even?) 1 3 5 7 9)
;=&amp;gt; false

((every-pred pos? odd?) 1 3 5 7 9)
;=&amp;gt; true

(defn any-pred [&amp;amp; preds] 
  (fn [&amp;amp; args] (some #(some % args) preds)))

((any-pred pos? even?) -1 2 3 4 5 6)
;=&amp;gt; true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;However, these implementations fall down in the following ways and should be corrected before inclusion to clojure.core:&lt;/p&gt;

&lt;p&gt;1) The functions returned by each do not adhere to the same results as (and) and (or) given no arguments.&lt;/p&gt;

&lt;p&gt;2) They and their returned functions assume varargs in every call.   should be variadically unrolled in much the same way as &lt;tt&gt;juxt&lt;/tt&gt; and &lt;tt&gt;comp&lt;/tt&gt;.  A longer term solution would be to implement them in terms of a macro that performs the unrolling automatically, but that is &quot;extra-credit&quot;.&lt;/p&gt;

&lt;p&gt;3) They should be tested in other_functions.clj&lt;/p&gt;
</description>
                <environment></environment>
            <key id="14342">CLJ-729</key>
            <summary>Add any-pred and every-pred combinators</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="fogus">Fogus</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Jan 2011 11:13:16 -0600</created>
                <updated>Sun, 20 Mar 2011 08:46:33 -0500</updated>
                    <resolved>Sun, 20 Mar 2011 08:46:33 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26179" author="fogus" created="Wed, 26 Jan 2011 11:27:46 -0600"  >&lt;p&gt;Added a patch containing the variadic unwound versions of &lt;tt&gt;every-pred&lt;/tt&gt; and &lt;tt&gt;any-pred&lt;/tt&gt; and tests for each.&lt;/p&gt;</comment>
                    <comment id="26186" author="stu" created="Fri, 28 Jan 2011 10:06:59 -0600"  >&lt;p&gt;One problem, and one question:&lt;/p&gt;

&lt;p&gt;Problem: &lt;tt&gt;every-pred&lt;/tt&gt; does not handler trueish arguments consistently.&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;((every-pred identity identity identity) 1 2)
=&amp;gt; 2

((every-pred identity identity identity identity) 1 2)
=&amp;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;Since the name uses &lt;tt&gt;every&lt;/tt&gt;, I think it should work like Clojure&apos;s &lt;tt&gt;every?&lt;/tt&gt;, not like Clojure&apos;s &lt;tt&gt;and&lt;/tt&gt;. Which raises the question about &lt;tt&gt;any-pred&lt;/tt&gt;. If it is going to work like Clojure&apos;s &lt;tt&gt;some&lt;/tt&gt;, shouldn&apos;t it be called &lt;tt&gt;some-pred&lt;/tt&gt;?&lt;/p&gt;

&lt;p&gt;I also found the docstrings confusing.&lt;/p&gt;</comment>
                    <comment id="26191" author="fogus" created="Fri, 28 Jan 2011 11:13:05 -0600"  >&lt;p&gt;&lt;b&gt;Problem: every-pred does not handler trueish arguments consistently.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Well, it consistently returns truthiness.  &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;  I understand what you mean.  There are at least two ways to handle this.  Make every return filter through &lt;tt&gt;(boolean)&lt;/tt&gt; or use &lt;tt&gt;every?&lt;/tt&gt;/&lt;tt&gt;some&lt;/tt&gt; in every case.  Do you have a preference?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;shouldn&apos;t it be called &lt;tt&gt;some-pred?&lt;/tt&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;I buy that.  Of course that might help to clarify my confusing docstrings (curse me for attempting an economy of verbiage).&lt;/p&gt;
</comment>
                    <comment id="26201" author="richhickey" created="Fri, 28 Jan 2011 15:48:41 -0600"  >&lt;p&gt;every-pred should return a boolean by filtering through boolean&lt;/p&gt;

&lt;p&gt;any-pred should be some-fn&lt;/p&gt;</comment>
                    <comment id="26212" author="fogus" created="Tue, 8 Feb 2011 09:05:05 -0600"  >&lt;p&gt;Updated patch.&lt;/p&gt;</comment>
                    <comment id="26213" author="fogus" created="Tue, 8 Feb 2011 09:08:27 -0600"  >&lt;p&gt;Sorry it took me a while to get this in &amp;#8211; I was a bit busy last week.&lt;/p&gt;

&lt;p&gt;I modified the behavior of every/some-pred to return true or false and modified the tests to check this fact.  Also simplified the docstrings.  I could not delete the original patch, but since the attached files are sorted by date (and the new one is larger) it should be clear which is the valid patch file.&lt;/p&gt;</comment>
                    <comment id="26229" author="stu" created="Tue, 22 Feb 2011 20:24:41 -0600"  >&lt;p&gt;Third patch renames &lt;tt&gt;any-pred&lt;/tt&gt; to &lt;tt&gt;some-fn&lt;/tt&gt; to match Rich&apos;s naming suggestion. &lt;/p&gt;</comment>
                    <comment id="26241" author="richhickey" created="Fri, 25 Feb 2011 09:49:10 -0600"  >&lt;p&gt;It looks like the patches and comments got crossed in the mail:&lt;/p&gt;

&lt;p&gt;fogus&apos; 2/8 patch correctly coerced to boolean in every-pred, but erroneously did so for some-pred.&lt;/p&gt;

&lt;p&gt;screened patch did not incorporate either, but changed name to some-fn&lt;/p&gt;

&lt;p&gt;We need:&lt;/p&gt;

&lt;p&gt;every-pred - coerces to boolean&lt;br/&gt;
some-fn - doesn&apos;t&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;</comment>
                    <comment id="26244" author="fogus" created="Fri, 25 Feb 2011 19:11:33 -0600"  >&lt;p&gt;Let&apos;s try this again.  All wires appear uncrossed.&lt;/p&gt;</comment>
                    <comment id="26254" author="richhickey" created="Tue, 1 Mar 2011 14:11:35 -0600"  >&lt;p&gt;doc-only changes:&lt;/p&gt;

&lt;p&gt;some-fn doc says it returns true, when it actually returns the first logical true value returned by one of the fns. Also, we don&apos;t yet use truthy/falsey in Clojure docs, and I&apos;m not sure I want to start now.&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;</comment>
                    <comment id="26257" author="fogus" created="Wed, 2 Mar 2011 07:50:38 -0600"  >&lt;p&gt;This has the docstring changes suggested by Rich (i.e. removing &quot;truthy&quot; &quot;falsey&quot; etc.).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10131" name="0729-add-every-any-pred.patch.diff" size="14833" author="fogus" created="Wed, 2 Mar 2011 07:50:38 -0600" />
                    <attachment id="10114" name="0729-with-consistent-names.patch" size="26184" author="stu" created="Tue, 22 Feb 2011 20:24:41 -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-728] Test for error message fails in IBM JDK</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-728</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A test for reify looks for an error message matching a specific regex, which fails on IBM JDK:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;     FAIL in (reify-test) (&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;br/&gt;
     you can&apos;t define a method twice&lt;br/&gt;
     expected: (fails-with-cause? java.lang.ClassFormatError #&quot;^(Repetitive|Duplicate) method name&quot; (eval (quote (reify java.util.List (size &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; 10) java.util.Collection (size &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; 20)))))&lt;br/&gt;
     actual: #&amp;lt;CompilerException java.lang.ClassFormatError: (clojure/test_clojure$eval17188$reify__17189) duplicate method at offset=1052, compiling&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;/var/lib/hudson/jobs/ibm-jdk-clojure-build/workspace/src/script/run_tests.clj:257)&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
                <environment>IBM JDK on Hudson, &lt;a href=&quot;http://build.clojure.org/job/ibm-jdk-clojure-build/&quot;&gt;http://build.clojure.org/job/ibm-jdk-clojure-build/&lt;/a&gt;</environment>
            <key id="14341">CLJ-728</key>
            <summary>Test for error message fails in IBM JDK</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, 25 Jan 2011 13:02:52 -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="26199" author="stuart.sierra" created="Fri, 28 Jan 2011 15:14:41 -0600"  >&lt;p&gt;Patch 0728-reify-exceptions-1.patch.gz changes the test to not check for specific types or messages on the exceptions.&lt;/p&gt;</comment>
                    <comment id="26216" author="stuart.sierra" created="Fri, 11 Feb 2011 13:43:38 -0600"  >&lt;p&gt;This is the only thing holding us back from a successful build on IBM JDK.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10098" name="0728-reify-exceptions-1.patch.gz" size="814" author="stuart.sierra" created="Fri, 28 Jan 2011 15:14:41 -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-719] clojure.data/diff does not correctly handle arrays as first argument</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-719</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The EqualityPartition implementation correctly branches, placing arrays into the sequential partition. The Diff implementation needs a similar branch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14332">CLJ-719</key>
            <summary>clojure.data/diff does not correctly handle arrays as first argument</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Mon, 17 Jan 2011 16:37:57 -0600</created>
                <updated>Fri, 28 Jan 2011 09:24:22 -0600</updated>
                    <resolved>Fri, 28 Jan 2011 09:24:22 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26141" author="stu" created="Mon, 17 Jan 2011 16:42:11 -0600"  >&lt;p&gt;This patch is smaller than it looks: the only real change is the one line in Object&apos;s diff-similar. The rest is just extracting diff-sequential as a helper (now called from two places), and grouping the private helpers together in the file.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10082" name="0719-diff-for-arrays.patch" size="3126" author="stu" created="Mon, 17 Jan 2011 16:42: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-716] Hudson release build failing at git clone step</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-716</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://build.clojure.org/job/clojure/237/console&quot;&gt;http://build.clojure.org/job/clojure/237/console&lt;/a&gt; for specifics.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14325">CLJ-716</key>
            <summary>Hudson release build failing at git clone step</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Jan 2011 11:40:37 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:05 -0600</updated>
                    <resolved>Fri, 14 Jan 2011 16:08:23 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26131" author="stuart.sierra" created="Fri, 14 Jan 2011 14:26:49 -0600"  >&lt;p&gt;Looks like some of the advanced Git options were misconfigured in the Hudson job. Specifically:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&quot;Checkout/merge to local branch&quot; should be &quot;master&quot;&lt;/li&gt;
	&lt;li&gt;&quot;Merge before build&quot; should be checked
	&lt;ul&gt;
		&lt;li&gt;&quot;Name of repository&quot; should be &quot;origin&quot;&lt;/li&gt;
		&lt;li&gt;&quot;Branch to merge to&quot; should be &quot;master&quot;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I&apos;ve changed these settings. Ready to try another 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-715] pprint test failing only on Hudson</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-715</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The commit &lt;a href=&quot;https://github.com/clojure/clojure/commit/5a86d525f10f32304f2cb348c9383934a44e6d4b&quot;&gt;https://github.com/clojure/clojure/commit/5a86d525f10f32304f2cb348c9383934a44e6d4b&lt;/a&gt; comments out a pprint of agents test that fails only on Hudson. May be a race condition.&lt;/p&gt;

&lt;p&gt;You can see the Hudson console log at &lt;a href=&quot;http://build.clojure.org/job/clojure/236/console&quot;&gt;http://build.clojure.org/job/clojure/236/console&lt;/a&gt; (no login required).&lt;/p&gt;</description>
                <environment></environment>
            <key id="14324">CLJ-715</key>
            <summary>pprint test failing only on Hudson</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Jan 2011 11:39:29 -0600</created>
                <updated>Fri, 25 Feb 2011 15:06:28 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 15:06:28 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10115" name="0715-eliminate-fragile-test.patch" size="1787" author="stu" created="Tue, 22 Feb 2011 20:30: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>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-710] clojure/set fns don&apos;t work with mutable sets</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-710</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;You can&apos;t call &lt;tt&gt;union&lt;/tt&gt;, &lt;tt&gt;intersection&lt;/tt&gt;, &lt;tt&gt;difference&lt;/tt&gt;, et al on a mix of Clojure sets and Java sets, because internally the fns assume that sets are clojure values that you can call conj, disj, etc. on.&lt;/p&gt;

&lt;p&gt;This percolates up and causes problems for &lt;tt&gt;clojure.data/diff&lt;/tt&gt; as well, since &lt;tt&gt;diff&lt;/tt&gt; aspires to work for any collection, but uses &lt;tt&gt;clojure.set&lt;/tt&gt; to deal with sets.&lt;/p&gt;

&lt;p&gt;Possible solutions:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;&lt;tt&gt;clojure.set&lt;/tt&gt; fns detect mutable sets and convert to values at the outset&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;clojure.set&lt;/tt&gt; doesn&apos;t do magic conversions for you. But &lt;tt&gt;diff&lt;/tt&gt;, which is less perf-sensitive, can do so. &lt;tt&gt;diff&lt;/tt&gt; makes immutable values out of mutable sets before handing off to &lt;tt&gt;clojure.set&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;Let the caller beware: docstring in clojure.set tells you to use immutable sets.&lt;/li&gt;
&lt;/ol&gt;
</description>
                <environment></environment>
            <key id="14319">CLJ-710</key>
            <summary>clojure/set fns don&apos;t work with mutable sets</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>Sun, 9 Jan 2011 10:31:04 -0600</created>
                <updated>Fri, 14 Jan 2011 07:25:39 -0600</updated>
                    <resolved>Fri, 14 Jan 2011 07:25:34 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26112" author="stu" created="Sun, 9 Jan 2011 10:31:58 -0600"  >&lt;p&gt;Rich, do you like option #1 in the description, or option #2 + #3, or none of the above?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10076" name="0710-diff-mutable.patch" size="1947" author="stu" created="Sun, 9 Jan 2011 16:40: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="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-708] Multi-methods hold onto the head of their arguments</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-708</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Multi-methods hold onto the head of their arguments when they are invoked.  This means that if you invoke a multi-method with a lazy seq that cannot be held in memory all at once, you blow heap.&lt;/p&gt;

&lt;p&gt;I&apos;m not sure how best to write a test case for this particular issue, since the easiest way to test it is to run the JVM with a small heap and purposely evoke an OutOfMemoryError, so the attached patch has only the code changes. (However, I have verified the fix using a small heap.)&lt;/p&gt;

&lt;p&gt;This will fix the issue for arities up to 6, for arities &amp;gt;=7 there is a bug in RestFn where it also holds the head of its arguments. If it is desirable to fix that bug as well, then I can submit a patch for it.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14317">CLJ-708</key>
            <summary>Multi-methods hold onto the head of their arguments</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="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Sat, 8 Jan 2011 10:02:06 -0600</created>
                <updated>Fri, 11 Mar 2011 10:21:21 -0600</updated>
                    <resolved>Fri, 11 Mar 2011 10:21:20 -0600</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26147" author="pjstadig" created="Fri, 21 Jan 2011 09:53:32 -0600"  >&lt;p&gt;Any thoughts on this?&lt;/p&gt;</comment>
                    <comment id="26154" author="stu" created="Fri, 21 Jan 2011 15:31:14 -0600"  >&lt;p&gt;I agree that no automated test is necessary for this. If you had attached your small-heap script I wouldn&apos;t have to write one from scratch to test it though. &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="26155" author="stu" created="Fri, 21 Jan 2011 15:40:58 -0600"  >&lt;p&gt;Rich: two additional questions on this patch, other than just approval:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Do we want another ticket to fix a similar issue in RestFn?&lt;/li&gt;
	&lt;li&gt;Paul also inquired on the dev list about a 1.2.1 release for this fix. I dread the idea of going to point releases. Any suggestions on workarounds for this for people on the 1.2.x line?&lt;/li&gt;
&lt;/ol&gt;
</comment>
                    <comment id="26156" author="pjstadig" created="Fri, 21 Jan 2011 16:17:51 -0600"  >&lt;p&gt;RE: a 1.2.1 release&lt;/p&gt;

&lt;p&gt;This and the Keyword.intern fix both seem to be fixes for bugs that don&apos;t affect functionality, that would be worthy of a 1.2.1 release...I don&apos;t know if there are others that people would like to see in there.&lt;/p&gt;

&lt;p&gt;They both also seem rather &quot;trivial&quot; to merge into 1.2.  I&apos;m willing to shepherd the release if no one else is interested in it.&lt;/p&gt;</comment>
                    <comment id="26173" author="richhickey" created="Wed, 26 Jan 2011 06:54:14 -0600"  >&lt;p&gt;Patching both this and RestFn in a single go seems best.&lt;/p&gt;</comment>
                    <comment id="26174" author="richhickey" created="Wed, 26 Jan 2011 06:55:38 -0600"  >&lt;p&gt;We should have a discussion about what might constitute a 1.2.1 on the dev list.&lt;/p&gt;</comment>
                    <comment id="26211" author="pjstadig" created="Fri, 4 Feb 2011 08:21:08 -0600"  >&lt;p&gt;Here is an updated patch for both multi-methods and RestFn.&lt;/p&gt;

&lt;p&gt;I have also pushed a project to &lt;a href=&quot;http://github.com/pjstadig/blow-heap&quot;&gt;http://github.com/pjstadig/blow-heap&lt;/a&gt; that has some (gratuitous but automatically generated) tests for every arity combination.&lt;/p&gt;

&lt;p&gt;There is a bin directory in that project that contains a blow-heap.sh file that can be run.  It will call out to leiningen to run the tests, and the project.clj file is configured to start Java with a sufficiently small heap.&lt;/p&gt;

&lt;p&gt;You can change the dependencies in the project.clj file to clojure 1.2.0, run the script, and see it fail.  Then apply the patch to clojure, `mvn clean install`, go back to the blow-heap project and change the project.clj to use clojure 1.3.0 SNAPSHOT, `lein deps`, and rerun the tests to verify. (Whew!)&lt;/p&gt;

&lt;p&gt;I believe this patch should also apply cleanly to the 1.2.0 branch, since the multi-method and rest-fn classes haven&apos;t changed since then, but if that&apos;s not the case I can send another rebased patch.&lt;/p&gt;</comment>
                    <comment id="26228" author="stu" created="Tue, 22 Feb 2011 19:58:37 -0600"  >&lt;p&gt;The second commit has the windows-line-ending problem. Anybody know how to fix this in an automated way?&lt;/p&gt;</comment>
                    <comment id="26232" author="thnetos" created="Tue, 22 Feb 2011 23:45:18 -0600"  >&lt;p&gt;The same patch as Paul&apos;s, with unix line-endings&lt;/p&gt;</comment>
                    <comment id="26233" author="thnetos" created="Tue, 22 Feb 2011 23:45:52 -0600"  >&lt;p&gt;Stuart: See attached patch run through the dos2unix tool&lt;/p&gt;</comment>
                    <comment id="26288" author="stu" created="Sun, 6 Mar 2011 13:18:45 -0600"  >&lt;p&gt;tests pass, approach looks fine. I didn&apos;t read every line, let mw know if there is some automated test or analysis you think I should do&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10074" name="muli-method-holds-head.diff" size="23270" author="pjstadig" created="Sat, 8 Jan 2011 10:02:07 -0600" />
                    <attachment id="10106" name="multi-and-rest-fn-fix.patch" size="216764" author="pjstadig" created="Fri, 4 Feb 2011 08:21:08 -0600" />
                    <attachment id="10116" name="multi-and-rest-fn-fix-unix.patch" size="212892" author="thnetos" created="Tue, 22 Feb 2011 23:45:18 -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-702] case gives NPE when used with nil</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-702</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This code gives a NullPointerException:&lt;/p&gt;

&lt;p&gt;(case nil&lt;br/&gt;
   nil &quot;foo&quot;)&lt;/p&gt;

&lt;p&gt;If fixing this is impossible for implementation reasons, at least the documentation and error messages should be improved.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14311">CLJ-702</key>
            <summary>case gives NPE when used with nil</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="bsteuber">Benjamin Teuber</reporter>
                        <labels>
                    </labels>
                <created>Tue, 4 Jan 2011 09:02:13 -0600</created>
                <updated>Fri, 25 Feb 2011 15:06:28 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 15:06:28 -0600</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26092" author="aaron" created="Wed, 5 Jan 2011 21:28:45 -0600"  >&lt;p&gt;What would be the desired fix look like for this?  Should this be a documentation update or should this be updated to not produce an NPE?&lt;/p&gt;</comment>
                    <comment id="26094" author="a_strange_guy" created="Thu, 6 Jan 2011 16:23:27 -0600"  >&lt;p&gt;I think that the case macro should just generate a null check before calling hashcode on a value. The same way protocol functions automatically check for null before dispatching.&lt;/p&gt;</comment>
                    <comment id="26097" author="richhickey" created="Fri, 7 Jan 2011 08:03:31 -0600"  >&lt;p&gt;First step in fixing a problem is to understand it. The exception is thrown during compilation and the stack trace points to c.l.Compiler$ObjExpression.constantType()&lt;/p&gt;</comment>
                    <comment id="26098" author="aaron" created="Fri, 7 Jan 2011 09:31:56 -0600"  >&lt;p&gt;Thanks Rich.  I will take this one and get a patch in hopefully today.&lt;/p&gt;</comment>
                    <comment id="26105" author="aaron" created="Fri, 7 Jan 2011 14:17:36 -0600"  >&lt;p&gt;Rich, this seems to solve the issue demonstrated in this ticket. I don&apos;t have full context on all possible impact points here. Can you please take a look at this and let me know if I missed anything?&lt;/p&gt;</comment>
                    <comment id="26114" author="richhickey" created="Mon, 10 Jan 2011 06:35:21 -0600"  >&lt;p&gt;looks ok at first glance&lt;/p&gt;</comment>
                    <comment id="26153" author="stuart.sierra" created="Fri, 21 Jan 2011 13:44:54 -0600"  >&lt;p&gt;New patch 0702-fix-npe-in-nil-case-2.patch.gz adds a test.&lt;/p&gt;</comment>
                    <comment id="26168" author="aaron" created="Tue, 25 Jan 2011 07:48:14 -0600"  >&lt;p&gt;Stuart, your patch replaces the original patch and the commit message doesn&apos;t reveal the intent of the fix.  It also overwrites me as the original patch submitter.&lt;/p&gt;</comment>
                    <comment id="26169" author="stuart.sierra" created="Tue, 25 Jan 2011 14:50:01 -0600"  >&lt;p&gt;Oops. Sorry. Will fix.&lt;/p&gt;</comment>
                    <comment id="26187" author="stu" created="Fri, 28 Jan 2011 10:23:31 -0600"  >&lt;p&gt;waiting on Stuart&apos;s patch tweak&lt;/p&gt;</comment>
                    <comment id="26197" author="stuart.sierra" created="Fri, 28 Jan 2011 15:00:37 -0600"  >&lt;p&gt;Patch 0702-fix-npe-in-nil-case-3.patch.gz replaces previous patches, but preserves correct commit messages and authors.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10087" name="0702-fix-npe-in-nil-case-2.patch.gz" size="875" author="stuart.sierra" created="Fri, 21 Jan 2011 13:44:54 -0600" />
                    <attachment id="10097" name="0702-fix-npe-in-nil-case-3.patch.gz" size="1144" author="stuart.sierra" created="Fri, 28 Jan 2011 15:00:36 -0600" />
                    <attachment id="10072" name="0702-fix-npe-in-nil-case.patch" size="1058" author="aaron" created="Fri, 7 Jan 2011 14:17: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-697] Compiler doesn&apos;t push a binding for *unchecked-math*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-697</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Compile.java in Clojure doesn&apos;t push a binding for &lt;b&gt;unchecked-math&lt;/b&gt;, so compilation of code with statements like (set! &lt;b&gt;unchecked-math&lt;/b&gt; true) fails with:&lt;/p&gt;

&lt;p&gt;Can&apos;t change/establish root binding of: &lt;b&gt;unchecked-math&lt;/b&gt; with set&lt;/p&gt;

&lt;p&gt;This problem doesn&apos;t happen with the REPL because with-bindings in clojure.main sets up an &lt;b&gt;unchecked-math&lt;/b&gt; binding.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14306">CLJ-697</key>
            <summary>Compiler doesn&apos;t push a binding for *unchecked-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="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="alan@thinkrelevance.com">Alan Dipert</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Dec 2010 16:20:19 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Wed, 5 Jan 2011 06:49:34 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10060" name="697_unchecked_math.diff" size="1788" author="alan@thinkrelevance.com" created="Tue, 21 Dec 2010 16:21: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="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-695] pprint does not respect *print-length*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-695</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;pprint does not respect &lt;tt&gt;&lt;b&gt;print-length&lt;/b&gt;&lt;/tt&gt; &amp;#8211; instead it prints ellipses for every element one length is passed (and prints forever on infinite collections).&lt;/p&gt;</description>
                <environment></environment>
            <key id="14304">CLJ-695</key>
            <summary>pprint does not respect *print-length*</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>Sat, 18 Dec 2010 15:11:14 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 31 Dec 2010 15:53:23 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26058" author="stu" created="Sat, 18 Dec 2010 15:14:28 -0600"  >&lt;p&gt;The attached patch is part of a possible fix. Issues to run down:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;where and how is the return value of &lt;tt&gt;write-out&lt;/tt&gt; used. (The changes I make eliminate this dependency in favor of a direct check of the dynamic variables.&lt;/li&gt;
	&lt;li&gt;how to make sets work? they are in a different code path than the others&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26059" author="tomfaulhaber" created="Tue, 21 Dec 2010 02:36:20 -0600"  >&lt;p&gt;Hmm, looks like I broke some logic when I hand unrolled the original cl-format based dispatch to get better performance for lists, vectors, and maps. (Really I shouldn&apos;t have to do this, but I need to make cl-format itself generate code rather than threaded functions which are slow and tend to blow your stack. Haven&apos;t gotten around to that yet, though so the hand-coded versions are stop-gaps.)&lt;/p&gt;

&lt;p&gt;I&apos;m not digging the patch too much, though, for 3 reasons:&lt;/p&gt;

&lt;p&gt;1) It breaks sets and arrays, which work in master.&lt;br/&gt;
2) It pushes the logic for &lt;b&gt;print-length&lt;/b&gt; printing into the dispatch functions (redundantly since there&apos;s still logic in write-out). Since these are customizable, it places that load on whoever customizes it.&lt;br/&gt;
3) It adds redundant logic in write-out which is the called for every object that the pretty printer deals with.&lt;/p&gt;

&lt;p&gt;I&apos;ll try to take a stab at a patch that fits a little better with what I&apos;m trying to do in the next couple of days.&lt;/p&gt;</comment>
                    <comment id="26060" author="tomfaulhaber" created="Wed, 22 Dec 2010 03:13:01 -0600"  >&lt;p&gt;This fixes the the issue with hand-rolled dispatch functions and provides a macro to help other users do it correctly as well.&lt;/p&gt;</comment>
                    <comment id="26061" author="stu" created="Wed, 22 Dec 2010 21:03:14 -0600"  >&lt;p&gt;Second patch is good. This is more important because apparently the IDE REPLs use pprint by default.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10059" name="0695-partial-fix.patch" size="4042" author="stu" created="Sat, 18 Dec 2010 15:14:28 -0600" />
                    <attachment id="10061" name="pprint-print-length-fix.diff" size="7884" author="tomfaulhaber" created="Wed, 22 Dec 2010 03:13:01 -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-693] VerifyError with symbol metadata, macros, and defrecord</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-693</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The code below defines a macro wrapper around defrecord. Using it causes a VerifyError:&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;(defmacro mac1 [name properties] 
  (let [key-info (keyword (first (filter #(meta %) properties)))] 
    (prn key-info) 
    `(defrecord ~name ~properties))) 

(mac1 One [^:key one, two])
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once this happens, the running Clojure process is oddly damaged. Changing the macro to a working version (see below) will not make the sample work with the tagged symbol, almost as if the symbol &lt;br/&gt;
&apos;one (below) became corrupt. You either need to start a new REPL, or try to invoke the macro with a different tagged symbol.&lt;/p&gt;

&lt;p&gt;The following code does work (note the forced conversion to a 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;(defmacro mac2 [name properties] 
  (let [key-info (keyword (str (first (filter #(meta %) properties))))] 
    (prn key-info) 
    `(defrecord ~name ~properties))) 

(mac2 Two [^:key three, four])
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>Affects Clojure from 1.2.0 to 1.3.0-alpha4</environment>
            <key id="14302">CLJ-693</key>
            <summary>VerifyError with symbol metadata, macros, and defrecord</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="vetoshev">Constantine Vetoshev</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 Dec 2010 08:54:46 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 17 Dec 2010 16:19:45 -0600</resolved>
                            <version>Approved Backlog</version>
                <version>Backlog</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26039" author="richhickey" created="Fri, 17 Dec 2010 08:47:25 -0600"  >&lt;p&gt;Stu, can you please verify?&lt;/p&gt;</comment>
                    <comment id="26043" author="stu" created="Fri, 17 Dec 2010 13:53:27 -0600"  >&lt;p&gt;Very confusing. Reproduced everything in the report. Moreover, leaving out the call to &lt;tt&gt;keyword&lt;/tt&gt; is enough to avoid the problem. The following variant works fine:&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;(defmacro mac4 [name properties] 
  (let [key-info (first (filter #(meta %) properties))] 
    (prn key-info) 
    `(defrecord ~name ~properties)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26057" author="vetoshev" created="Sat, 18 Dec 2010 13:02:26 -0600"  >&lt;p&gt;Thanks for the fix! Works great.&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-691] missing stacktrace confuses REPL error reporting</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-691</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;when Java is in a bad mood, exceptions start flying without any accompanying stack traces. This causes the default REPL&apos;s error reporting to barf, as it currently assumes that the first stack trace element &lt;b&gt;always&lt;/b&gt; exists. You can see this by trying the following snippet at the REPL several times in succession:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def x (&lt;span class=&quot;code-object&quot;&gt;byte&lt;/span&gt;-array 100000000))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When Java is somewhat angry, you will see the appropriate&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;OutOfMemoryError Java heap space  clojure.lang.Numbers.byte_array (Numbers.java:1409)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Eventually Java gets angrier and stops providing stack traces, causing an aget error in clojure.main instead.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14300">CLJ-691</key>
            <summary>missing stacktrace confuses REPL error reporting</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>Mon, 13 Dec 2010 09:41:49 -0600</created>
                <updated>Fri, 17 Dec 2010 09:55:38 -0600</updated>
                    <resolved>Fri, 17 Dec 2010 09:55:38 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26028" author="stu" created="Mon, 13 Dec 2010 09:46:20 -0600"  >&lt;p&gt;Results with attached 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;(def x (&lt;span class=&quot;code-object&quot;&gt;byte&lt;/span&gt;-array 100000000))
=&amp;gt; OutOfMemoryError Java heap space  clojure.lang.Numbers.byte_array (Numbers.java:1409)
;; eventually you get:
def x (&lt;span class=&quot;code-object&quot;&gt;byte&lt;/span&gt;-array 100000000))
=&amp;gt;OutOfMemoryError Java heap space  [trace missing]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10053" name="0691-stacktrace-missing.patch" size="1177" author="stu" created="Mon, 13 Dec 2010 09:46: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-690] unchecked int math inconsistency with Java</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-690</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;Clojure 1.3.0-alpha4
user=&amp;gt; (-&apos; 0 -9223372036854775808)
-9223372036854775808&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14299">CLJ-690</key>
            <summary>unchecked int math inconsistency with Java</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>Mon, 13 Dec 2010 07:49:35 -0600</created>
                <updated>Fri, 8 Apr 2011 09:01:52 -0500</updated>
                    <resolved>Wed, 5 Jan 2011 18:45:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26072" author="trptcolin" created="Fri, 31 Dec 2010 15:42:23 -0600"  >&lt;p&gt;This looks like a case where, in minusP, negateP was properly promoting the negation of -9223372036854775808 (Long/MIN_VALUE) to a BigInt, but that promotion didn&apos;t propagate to addP.  The Ops that got used in addP was ops(-9223372036854775808), not ops(9223372036854775808N).&lt;/p&gt;

&lt;p&gt;The attached patch makes sure the BigInt contamination goes all the way through, and adds a few tests verifying the correct behavior.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10064" name="0001-Handle-edge-case-in-arbitrary-precision-substraction.patch" size="1670" author="trptcolin" created="Fri, 31 Dec 2010 15:42: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-689] Audit and update all user permissions on the hudson machine</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-689</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, the small handful of users are all hudson administrators.  With Stuart Sierra&apos;s pending changes to the build process, the hudson box will be doing all releases of Clojure.  This means that only a few people should be able to run the -alpha, -beta, and stable releases.  &lt;/p&gt;</description>
                <environment></environment>
            <key id="14298">CLJ-689</key>
            <summary>Audit and update all user permissions on the hudson machine</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</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="-1">Unassigned</assignee>
                                <reporter username="aaron">Aaron Bedra</reporter>
                        <labels>
                    </labels>
                <created>Sun, 12 Dec 2010 19:14:55 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Tue, 22 Feb 2011 17:07:57 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26076" author="stu" created="Fri, 31 Dec 2010 16:05:55 -0600"  >&lt;p&gt;For some reason this was incorrectly marked as OK. When the work is complete, please mark as Screened with a note showing Rich where to go to verify.&lt;/p&gt;</comment>
                    <comment id="26080" author="aaron" created="Mon, 3 Jan 2011 07:31:08 -0600"  >&lt;p&gt;Bah! That shouldn&apos;t have happened.  I got a 500 from JIRA after trying to update the ticket and figured I would visit it when I had more time.  Looks like it ended up being set the wrong way.  Anyways, the permissions have been updated and are in need of a review.&lt;/p&gt;</comment>
                    <comment id="26089" author="stu" created="Wed, 5 Jan 2011 06:50:57 -0600"  >&lt;p&gt;Please grab someone in the office and walk them through what you have done (documenting it here) so we can mark this complete.&lt;/p&gt;</comment>
                    <comment id="26195" author="stuart.sierra" created="Fri, 28 Jan 2011 14:09:42 -0600"  >&lt;p&gt;Audit completed; results and recommendations communicated privately.&lt;/p&gt;</comment>
                    <comment id="26202" author="stuart.sierra" created="Fri, 28 Jan 2011 15:52:52 -0600"  >&lt;p&gt;Verified Aaron&apos;s fixes.&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-686] create JIRA workflow picture</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-686</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;... and post and link from appropriate places&lt;/p&gt;</description>
                <environment></environment>
            <key id="14294">CLJ-686</key>
            <summary>create JIRA workflow picture</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="redinger">Christopher Redinger</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 3 Dec 2010 10:43:41 -0600</created>
                <updated>Fri, 22 Apr 2011 09:39:48 -0500</updated>
                    <resolved>Fri, 22 Apr 2011 09:39:47 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="26007" author="redinger" created="Fri, 3 Dec 2010 16:23:30 -0600"  >&lt;p&gt;Moved to a google doc&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.google.com/document/d/1PiJ4O2ZGWfReKNcG5ON8zrRZVYsFQiKrQRoduAK6upQ/edit?hl=en&amp;amp;authkey=CL7U4ugD&quot;&gt;https://docs.google.com/document/d/1PiJ4O2ZGWfReKNcG5ON8zrRZVYsFQiKrQRoduAK6upQ/edit?hl=en&amp;amp;authkey=CL7U4ugD&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26030" author="stu" created="Mon, 13 Dec 2010 17:27:53 -0600"  >&lt;p&gt;Picture and prose are fine. (One tweak: I would change &quot;real problem&quot; to merely &quot;problem&quot;. Our choosing to solve it is the issue, not whether it is real).&lt;/p&gt;

&lt;p&gt;Next steps: create this as a page in JIRA (which should be its home), and merge the content at &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt; (removing anything that is confusing or stale). Once the page is in JIRA, let Fogus know--he had some suggestions and edits.&lt;/p&gt;

&lt;p&gt;When this is done ping me and I will change clojure.org/patches to link to JIRA.&lt;/p&gt;</comment>
                    <comment id="26148" author="redinger" created="Fri, 21 Jan 2011 10:30:32 -0600"  >&lt;p&gt;Michael, can you review and edit with any feedback you have about the process? Thanks!&lt;/p&gt;</comment>
                    <comment id="26151" author="stuart.sierra" created="Fri, 21 Jan 2011 12:22:59 -0600"  >&lt;p&gt;I was having trouble following the logic of the diagram, so with Aaron Bedra&apos;s help I drew my own:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.google.com/drawings/edit?id=1L4XyxO7ND7jgGvb69PD1-V41Rp4DfwjqiUiOcbsnus0&amp;amp;hl=en&amp;amp;authkey=COyn__kC&quot;&gt;https://docs.google.com/drawings/edit?id=1L4XyxO7ND7jgGvb69PD1-V41Rp4DfwjqiUiOcbsnus0&amp;amp;hl=en&amp;amp;authkey=COyn__kC&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26152" author="redinger" created="Fri, 21 Jan 2011 13:08:57 -0600"  >&lt;p&gt;Thanks, I&apos;ve updated with your document.&lt;/p&gt;</comment>
                    <comment id="26358" author="redinger" created="Sun, 10 Apr 2011 00:05:00 -0500"  >&lt;p&gt;Doc is 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="26362" author="redinger" created="Fri, 15 Apr 2011 12:03:25 -0500"  >&lt;p&gt;Please Screen&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-684] agent self-send test heisenfailing</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-684</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The commented-out test (&lt;a href=&quot;https://github.com/clojure/clojure/commit/605944b7f667e9fdcc2a380c5dd07304118dca34&quot;&gt;https://github.com/clojure/clojure/commit/605944b7f667e9fdcc2a380c5dd07304118dca34&lt;/a&gt;) is failing intermittently. If you are working on this, look at the changes made in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-672&quot; title=&quot;*agent* is nil in action fns, regression in Clojure 1.3a3&quot;&gt;&lt;del&gt;CLJ-672&lt;/del&gt;&lt;/a&gt;, which may be related. &lt;/p&gt;</description>
                <environment></environment>
            <key id="14292">CLJ-684</key>
            <summary>agent self-send test heisenfailing</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="aredington">Alexander Redington</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Tue, 30 Nov 2010 11:35:23 -0600</created>
                <updated>Sun, 19 Dec 2010 15:21:10 -0600</updated>
                    <resolved>Sun, 19 Dec 2010 15:21:10 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26042" author="aredington" created="Fri, 17 Dec 2010 13:43:33 -0600"  >&lt;p&gt;My initial research today suggests this might more likely be an issue with await-for than agent error handlers. After examining a couple of different variants of the offending test, I&apos;ve found that:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;The test won&apos;t fail without await-for returning due to timing out&lt;/li&gt;
	&lt;li&gt;The test won&apos;t fail if we substitute await for await-for&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26051" author="stu" created="Fri, 17 Dec 2010 16:01:56 -0600"  >&lt;p&gt;Alex: you didn&apos;t try hard enough to reproduce &amp;#8211; you can make it happen even with await. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;But you diagnosis got me on the right track to fixing this. Thanks! Patch in a moment.&lt;/p&gt;</comment>
                    <comment id="26052" author="stu" created="Fri, 17 Dec 2010 16:05:10 -0600"  >&lt;p&gt;The original tests had a race condition: you can&apos;t use await to wait on agent actions triggered from another thread. Improved version of the tests uses a CountdownLatch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10057" name="0684-fix-race-condition.patch" size="2335" author="stu" created="Fri, 17 Dec 2010 16:05:09 -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-682] cl-format: ~w throws an exception when not wrapped in a pretty-writer</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-682</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(cl-format nil &quot;hello: &lt;sub&gt;w&lt;/sub&gt;%&quot; &apos;(a b c)) &lt;/p&gt;

&lt;p&gt;throws an exception because ~w is (kind of ironically) not marked :pretty in the cl-format definition.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14290">CLJ-682</key>
            <summary>cl-format: ~w throws an exception when not wrapped in a pretty-writer</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="tomfaulhaber">Tom Faulhaber</reporter>
                        <labels>
                    </labels>
                <created>Sat, 27 Nov 2010 14:23:41 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 31 Dec 2010 15:53:23 -0600</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26065" author="tomfaulhaber" created="Wed, 29 Dec 2010 01:34:41 -0600"  >&lt;p&gt;This one-line patch resolves the issue.&lt;/p&gt;</comment>
                    <comment id="26066" author="tomfaulhaber" created="Wed, 29 Dec 2010 01:35:48 -0600"  >&lt;p&gt;OK, this is ready to be applied to master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10062" name="clj-682-patch.diff" size="875" author="tomfaulhaber" created="Wed, 29 Dec 2010 01:34:41 -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-681] Build Clojure with Maven 2</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-681</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/display/design/Common+Contrib+Build&quot;&gt;Common Contrib Build&lt;/a&gt; wiki page and the lengthy &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/8d11cdd6d27ceb13&quot;&gt;clojure-dev discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For examples of the CI/release process under Hudson, see &lt;a href=&quot;http://build.clojure.org/job/clojure-testbuild/&quot;&gt;clojure-testbuild&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14289">CLJ-681</key>
            <summary>Build Clojure with Maven 2</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, 26 Nov 2010 14:05:33 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:02 -0600</updated>
                    <resolved>Wed, 5 Jan 2011 07:20:08 -0600</resolved>
                            <version>Backlog</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="25962" author="stuart.sierra" created="Fri, 26 Nov 2010 14:09:02 -0600"  >&lt;p&gt;Replaces previous patch.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;fixed SCM URLs in pom.xml&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="25970" author="stu" created="Mon, 29 Nov 2010 06:48:48 -0600"  >&lt;p&gt;Maven is capable of using the directory structure we already have. It seems this patch is doing two things: getting us onto maven, and reorganizing the project. Is there any reason these can&apos;t be considered separately?&lt;/p&gt;</comment>
                    <comment id="25979" author="stuart.sierra" created="Mon, 29 Nov 2010 18:28:56 -0600"  >&lt;p&gt;Updated patch replaces previous patches.&lt;/p&gt;

&lt;p&gt;This does minimal file/directory renaming while preserving the same functionality as the previous patches.&lt;/p&gt;

&lt;p&gt;But an older problem has resurfaced: the nondeterministic load-order sometimes causes compilation to fail.  For example, &lt;a href=&quot;http://build.clojure.org/job/clojure-testbuild/22/console&quot;&gt;on Hudson&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25986" author="stuart.sierra" created="Wed, 1 Dec 2010 08:05:52 -0600"  >&lt;p&gt;Patch maven-build-4.diff.gz replaces previous patches.&lt;/p&gt;

&lt;p&gt;This works around compilation-order issues by using a bootstrap script to compile namespaces in the correct order.&lt;/p&gt;</comment>
                    <comment id="25987" author="stuart.sierra" created="Wed, 1 Dec 2010 08:59:23 -0600"  >&lt;p&gt;Patch maven-build-5.diff.gz replaces previous patches.&lt;/p&gt;

&lt;p&gt;This fixes a few more testing issues.&lt;/p&gt;</comment>
                    <comment id="25988" author="stuart.sierra" created="Wed, 1 Dec 2010 09:02:57 -0600"  >&lt;p&gt;Finally got a &lt;a href=&quot;http://build.clojure.org/job/clojure-testbuild/32/&quot;&gt;successful staging release&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, the JAR file is misnamed.  This is a &lt;a href=&quot;http://groups.google.com/group/clojure-maven-plugin/browse_thread/thread/16b5c73adb7a672c&quot;&gt;clojure-maven-plugin bug&lt;/a&gt; that will be fixed in the next release.&lt;/p&gt;</comment>
                    <comment id="25990" author="stuart.sierra" created="Fri, 3 Dec 2010 09:39:57 -0600"  >&lt;p&gt;Patch maven-build-6.diff.gz replaces previous patches.&lt;/p&gt;

&lt;p&gt;This updates to clojure-maven-plugin version 1.3.7; README updates.&lt;/p&gt;</comment>
                    <comment id="26006" author="stuart.sierra" created="Fri, 3 Dec 2010 16:13:23 -0600"  >&lt;p&gt;Patch maven-build-7.diff.gz replaces previous patches.&lt;/p&gt;

&lt;p&gt;This patch adds back in a simplified build.xml for local development using Ant only.&lt;/p&gt;

&lt;p&gt;The Ant build.xml script reads the project version number from pom.xml, so pom.xml remains the definitive project description.&lt;/p&gt;</comment>
                    <comment id="26019" author="stuart.sierra" created="Thu, 9 Dec 2010 17:14:26 -0600"  >&lt;p&gt;Patch maven-build-8.diff.gz replaces previous patches.&lt;/p&gt;

&lt;p&gt;This version uses a hybrid Maven + Ant build process.  For local development, only Ant is needed.  The POM does not depend on anything outside of the standard Maven toolchain and the Sonatype open-source deployment configuration.&lt;/p&gt;</comment>
                    <comment id="26032" author="stuart.sierra" created="Wed, 15 Dec 2010 12:01:24 -0600"  >&lt;p&gt;Patch &quot;maven-build-8&quot; answers those questions by postponing them.&lt;/p&gt;

&lt;p&gt;This patch is ready to test and apply.&lt;/p&gt;</comment>
                    <comment id="26033" author="stuart.sierra" created="Wed, 15 Dec 2010 12:04:22 -0600"  >&lt;p&gt;To elaborate: patch &quot;maven-build-8&quot; avoids both clojure-maven-plugin and bootstrap load order by using maven-ant-plugin and Ant to drive the Clojure steps in the build.&lt;/p&gt;

&lt;p&gt;We still need to address these issues, but that may take a long time, and we want to move forward with releases to public repositories.&lt;/p&gt;</comment>
                    <comment id="26044" author="stu" created="Fri, 17 Dec 2010 14:05:58 -0600"  >&lt;p&gt;Can you please run down two small issues:&lt;/p&gt;

&lt;p&gt;(1) I get a warning on the maven 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;[WARNING] 
[WARNING] Some problems were encountered &lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; building the effective model &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; org.clojure:clojure:jar:1.3.0-testbuild10-SNAPSHOT
[WARNING] &apos;build.plugins.plugin.version&apos; &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 52, column 15
[WARNING] &apos;build.plugins.plugin.version&apos; &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 181, column 15
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; reason, &lt;span class=&quot;code-keyword&quot;&gt;future&lt;/span&gt; Maven versions might no longer support building such malformed projects.
[WARNING]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(2) The version is set to 1.3.0-testbuild10-SNAPSHOT. Am I supposed to change this by hand-editing the pom?&lt;/p&gt;</comment>
                    <comment id="26053" author="stuart.sierra" created="Fri, 17 Dec 2010 16:10:11 -0600"  >&lt;p&gt;Patch maven-build-9.diff.gz replaces previous patches.&lt;/p&gt;

&lt;p&gt;Differences from previous patches:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Adds plugin coordinates to fix the warnings reported by Stu Halloway&lt;/li&gt;
	&lt;li&gt;Avoids compiling the test sources twice&lt;/li&gt;
	&lt;li&gt;Correctly sets POM version to 1.3.0-master-SNAPSHOT&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26054" author="stuart.sierra" created="Fri, 17 Dec 2010 16:11:42 -0600"  >&lt;p&gt;Reported issues should be fixed, although I cannot reproduce the warning messages.&lt;/p&gt;

&lt;p&gt;What version of Maven produced those warnings?&lt;/p&gt;</comment>
                    <comment id="26082" author="stu" created="Tue, 4 Jan 2011 16:03:40 -0600"  >&lt;p&gt;Patch 10 merely updates patch 9 to apply to current master. (A test namespace had changed. The list of test files has always been hard-coded and fragile, but that&apos;s a patch for another day.)&lt;/p&gt;

&lt;p&gt;I tested all the Ant and Maven commands documented in the reademe, and everything looks sensible.&lt;/p&gt;</comment>
                    <comment id="26088" author="stu" created="Tue, 4 Jan 2011 21:03:35 -0600"  >&lt;p&gt;Patch 10 is bad. The pom file from patch 9 was lost, and my local environment didn&apos;t notice somehow. Will test and resubmit a patch 11 that is basically patch 10 with the correct pom.xml from patch 9. &lt;/p&gt;

&lt;p&gt;Grumble.&lt;/p&gt;</comment>
                    <comment id="26090" author="stu" created="Wed, 5 Jan 2011 07:18:23 -0600"  >&lt;p&gt;Patch 11 is basically patch 10 + the correct pom.xml from patch 9. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10068" name="0681-patch-10.patch" size="30918" author="stu" created="Tue, 4 Jan 2011 16:03:40 -0600" />
                    <attachment id="10070" name="0681-patch-11.patch" size="35484" author="stu" created="Wed, 5 Jan 2011 07:18:23 -0600" />
                    <attachment id="10029" name="maven-build-1.diff.gz" size="912349" author="stuart.sierra" created="Fri, 26 Nov 2010 14:05:33 -0600" />
                    <attachment id="10030" name="maven-build-2.diff.gz" size="912347" author="stuart.sierra" created="Fri, 26 Nov 2010 14:09:02 -0600" />
                    <attachment id="10037" name="maven-build-3.diff.gz" size="8437" author="stuart.sierra" created="Mon, 29 Nov 2010 18:28:56 -0600" />
                    <attachment id="10039" name="maven-build-4.diff.gz" size="8567" author="stuart.sierra" created="Wed, 1 Dec 2010 08:05:52 -0600" />
                    <attachment id="10040" name="maven-build-5.diff.gz" size="8684" author="stuart.sierra" created="Wed, 1 Dec 2010 08:59:23 -0600" />
                    <attachment id="10041" name="maven-build-6.diff.gz" size="8738" author="stuart.sierra" created="Fri, 3 Dec 2010 09:39:57 -0600" />
                    <attachment id="10044" name="maven-build-7.diff.gz" size="9146" author="stuart.sierra" created="Fri, 3 Dec 2010 16:13:23 -0600" />
                    <attachment id="10049" name="maven-build-8.diff.gz" size="9133" author="stuart.sierra" created="Thu, 9 Dec 2010 17:14:26 -0600" />
                    <attachment id="10058" name="maven-build-9.diff.gz" size="9128" author="stuart.sierra" created="Fri, 17 Dec 2010 16:10: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="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-680] printing promises should not block</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-680</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Do not tackle the bigger &quot;abstractions around visibility, delay, blocking&quot; etc. issue. This is a minimal fix:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;print code already deals with future as a special case&lt;/li&gt;
	&lt;li&gt;should special-case promise as well&lt;/li&gt;
	&lt;li&gt;make a definterface IPromiseImpl that you can switch on
	&lt;ul&gt;
		&lt;li&gt;right above promise in core.clj&lt;/li&gt;
		&lt;li&gt;has a method that gets you what you need to ask &quot;has-value?&quot;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;in print code
	&lt;ul&gt;
		&lt;li&gt;if has value, show it, if not, show :not-delivered&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;make sure to fix print code in both core_print and pprint&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="14288">CLJ-680</key>
            <summary>printing promises should not block</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="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 26 Nov 2010 10:45:48 -0600</created>
                <updated>Wed, 8 Dec 2010 15:50:13 -0600</updated>
                    <resolved>Wed, 8 Dec 2010 15:50:13 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10042" name="0680_nonblocking_promise_printing.patch" size="3485" author="aaron" created="Fri, 3 Dec 2010 11:51:15 -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-678] into-array should work with all primitive types</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-678</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;(into-array &lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/TYPE [0])
(into-array &lt;span class=&quot;code-object&quot;&gt;Byte&lt;/span&gt;/TYPE [0])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which currently fail with an argument type mismatch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14286">CLJ-678</key>
            <summary>into-array should work with all primitive 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="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sun, 21 Nov 2010 11:13:15 -0600</created>
                <updated>Fri, 17 Dec 2010 16:11:24 -0600</updated>
                    <resolved>Fri, 17 Dec 2010 16:11:24 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26040" author="stu" created="Fri, 17 Dec 2010 09:15:15 -0600"  >&lt;p&gt;Good task for pairing with Luke. Feel free to grab me and discuss approach.&lt;/p&gt;</comment>
                    <comment id="26049" author="stu" created="Fri, 17 Dec 2010 15:10:52 -0600"  >&lt;p&gt;Side question while working on this ticket: Should I create a separate ticket so that {{(into-array &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;}} returns an array of &lt;tt&gt;long&lt;/tt&gt; instead of &lt;tt&gt;Long&lt;/tt&gt;, or it that too magical?&lt;/p&gt;</comment>
                    <comment id="26050" author="richhickey" created="Fri, 17 Dec 2010 15:15:13 -0600"  >&lt;p&gt;Until &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; is a vector of longs, that&apos;s too magical.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10056" name="678.patch" size="3444" author="alan@thinkrelevance.com" created="Fri, 17 Dec 2010 14:26: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-674] Typo and/or out-of-place example in clojure.string docstring.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-674</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Clojure String utilities&lt;/p&gt;

&lt;p&gt;It is poor form to (:use clojure.string). Instead, use require&lt;br/&gt;
with :as to specify a prefix, e.g.&lt;/p&gt;

&lt;p&gt;(ns your.namespace.here&lt;br/&gt;
  (:require &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.string :as str&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;-----------&lt;/p&gt;

&lt;p&gt;The quote in the :require clause is erroneous. On the other hand, clojure.string&apos;s ns docstring may not be the place for an explanation of use-vs-require, so the whole paragraph could be removed.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14276">CLJ-674</key>
            <summary>Typo and/or out-of-place example in clojure.string docstring.</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="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Tue, 9 Nov 2010 19:47:06 -0600</created>
                <updated>Wed, 8 Dec 2010 15:52:29 -0600</updated>
                    <resolved>Mon, 29 Nov 2010 20:42:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="25953" author="fogus" created="Tue, 23 Nov 2010 19:20:45 -0600"  >&lt;p&gt;Added patch.&lt;/p&gt;</comment>
                    <comment id="25954" author="fogus" created="Tue, 23 Nov 2010 19:23:10 -0600"  >&lt;p&gt;This is a trivial fix for a docstring that is clearly incorrect.  Thanks Phil.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10027" name="clj-674_clojure.str-doc-fix.diff" size="781" author="fogus" created="Tue, 23 Nov 2010 19:20: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-673] RT.load doesn&apos;t work when called by code that is on the bootstrap classpath</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-673</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;RT.baseLoader assumes Compiler.getClass.getClassLoader will return a sane value. If Clojure is placed on the bootclasspath, it will return null.&lt;/p&gt;

&lt;p&gt;Relying on baseLoader less may be possible; it looks like the ClassLoader/getSystemResource static method may get us the access we need to the bootstrap classloader, which would solve the problem I first noticed with using RT.load with the bootstrap classloader. However, there may be other issues beyond this.&lt;/p&gt;

&lt;p&gt;More details at &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/16c694573bd29552&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/16c694573bd29552&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I plan on investigating this further, but I&apos;ve created this ticket to explain what I&apos;ve discovered so far for posterity, etc.&lt;/p&gt;

&lt;p&gt;Note that placing Clojure on the bootclasspath cuts its startup time in half; it&apos;s a measure that Charles Nutter of the JRuby project recommends.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14275">CLJ-673</key>
            <summary>RT.load doesn&apos;t work when called by code that is on the bootstrap classpath</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>Mon, 8 Nov 2010 15:48:59 -0600</created>
                <updated>Fri, 23 Sep 2011 16:00:02 -0500</updated>
                    <resolved>Fri, 23 Sep 2011 16:00:01 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="26546" author="hiredman" created="Wed, 29 Jun 2011 22:04:46 -0500"  >&lt;p&gt;&apos;lo as if from nowhere a patch!&lt;/p&gt;</comment>
                    <comment id="26700" author="aaron" created="Sat, 6 Aug 2011 10:17:38 -0500"  >&lt;p&gt;Patch looks reasonable, but I am waiting for a response from Phil to see if this resolves his issue.&lt;/p&gt;</comment>
                    <comment id="26720" author="technomancy" created="Thu, 11 Aug 2011 19:56:46 -0500"  >&lt;p&gt;I just tested it again with the latest Clojure from git and it works fine. Here&apos;s an easy test that breaks without the fix: java -Xbootclasspath/a:clojure-1.3.0-master-SNAPSHOT.jar clojure.main -e &quot;(require &apos;clojure.pprint)&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10268" name="fix-clj-637.diff" size="2620" author="hiredman" created="Wed, 29 Jun 2011 22: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="10004">Screened</customfieldvalue>

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

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

<item>
            <title>[CLJ-671] Recur mismatch causes infinite loop in compiler</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-671</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In cases like&lt;/p&gt;

&lt;p&gt;(set! &lt;b&gt;warn-on-reflection&lt;/b&gt; true)&lt;/p&gt;

&lt;p&gt;(defn gcd &lt;span class=&quot;error&quot;&gt;&amp;#91;x y&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (loop &lt;span class=&quot;error&quot;&gt;&amp;#91;x (long x) y (long y)&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (if (== y 0)&lt;br/&gt;
      x&lt;br/&gt;
      (recur y (rem x y)))))&lt;/p&gt;

&lt;p&gt;I&apos;d expect either both x and y to be auto-boxed or an error from the primitive local mismatch.&lt;br/&gt;
Instead the compiler (1.3.0-alpha2) goes into an infinite loop in LetExpr.Parser.parse():&lt;/p&gt;

&lt;p&gt;NO_SOURCE_FILE:3 recur arg for primitive local: y is not matching primitive, had: Object, needed: long&lt;br/&gt;
Auto-boxing loop arg: y&lt;br/&gt;
NO_SOURCE_FILE:3 recur arg for primitive local: x is not matching primitive, had: Object, needed: long&lt;br/&gt;
Auto-boxing loop arg: x&lt;br/&gt;
NO_SOURCE_FILE:3 recur arg for primitive local: y is not matching primitive, had: Object, needed: long&lt;br/&gt;
Auto-boxing loop arg: y&lt;br/&gt;
NO_SOURCE_FILE:3 recur arg for primitive local: x is not matching primitive, had: Object, needed: long&lt;br/&gt;
Auto-boxing loop arg: x&lt;br/&gt;
.&lt;br/&gt;
.&lt;br/&gt;
.&lt;/p&gt;

&lt;p&gt;The previous case has been fixed as described in the comments. The defect can still be seen this way:&lt;/p&gt;

&lt;p&gt;(set! &lt;b&gt;warn-on-reflection&lt;/b&gt; true)&lt;/p&gt;

&lt;p&gt;(defn gcd &lt;span class=&quot;error&quot;&gt;&amp;#91;x y&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (loop &lt;span class=&quot;error&quot;&gt;&amp;#91;x (long x) y (long y)&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (if (== y 0)&lt;br/&gt;
      x&lt;br/&gt;
      (recur y ^Long(rem x y)))))&lt;/p&gt;</description>
                <environment></environment>
            <key id="14273">CLJ-671</key>
            <summary>Recur mismatch causes infinite loop in compiler</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="fogus">Fogus</assignee>
                                <reporter username="jarpiain">Juha Arpiainen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 5 Nov 2010 15:27:24 -0500</created>
                <updated>Fri, 27 May 2011 11:14:25 -0500</updated>
                    <resolved>Fri, 27 May 2011 11:14:24 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="25924" author="jarpiain" created="Fri, 5 Nov 2010 15:33:22 -0500"  >&lt;p&gt;Attached patch (CA is now in mail).&lt;/p&gt;

&lt;p&gt;With this patch the loop body will be analyzed n times in cases like&lt;/p&gt;

&lt;p&gt;(loop &lt;span class=&quot;error&quot;&gt;&amp;#91;v1 0 v2 0 v3 0 vn 0&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (recur v2 v3 vn (identity vn)))&lt;/p&gt;</comment>
                    <comment id="25942" author="stu" created="Mon, 15 Nov 2010 12:55:07 -0600"  >&lt;p&gt;The long casts are not necessary here, but if they are present, they appear to cause an infinite loop regardless of whether warn-on-reflection is set.&lt;/p&gt;</comment>
                    <comment id="26260" author="ataggart" created="Thu, 3 Mar 2011 17:03:33 -0600"  >&lt;p&gt;Test case no longer results in erroneous behaviour using current master branch.&lt;/p&gt;</comment>
                    <comment id="26359" author="redinger" created="Fri, 15 Apr 2011 11:00:15 -0500"  >&lt;p&gt;Confirmed that this is no longer an issue on alpha-6&lt;/p&gt;</comment>
                    <comment id="26360" author="jarpiain" created="Fri, 15 Apr 2011 11:44:59 -0500"  >&lt;p&gt;Test case works because of improved type inference for #&apos;rem. Changing (rem x y) to ^Long (rem x y) in test case still causes the loop in f0a46155ba3...&lt;/p&gt;</comment>
                    <comment id="26361" author="redinger" created="Fri, 15 Apr 2011 11:58:58 -0500"  >&lt;p&gt;Updating test case to show present day failure&lt;/p&gt;</comment>
                    <comment id="26396" author="redinger" created="Thu, 28 Apr 2011 09:02:46 -0500"  >&lt;p&gt;Jahu is resending a CA, we did not receive the first one.&lt;/p&gt;</comment>
                    <comment id="26404" author="fogus" created="Fri, 29 Apr 2011 14:03:08 -0500"  >&lt;p&gt;Added regression for this patch.  Waiting on CA for final approval.&lt;/p&gt;
</comment>
                    <comment id="26462" author="redinger" created="Fri, 27 May 2011 10:47:32 -0500"  >&lt;p&gt;We&apos;ve received the CA. This patch is ready to go.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10013" name="671-recur-mismatch-infinite-loop.diff" size="2754" author="jarpiain" created="Fri, 5 Nov 2010 15:33:22 -0500" />
                    <attachment id="10209" name="671-recur-mismatch-infinite-loop-test.diff" size="990" author="fogus" created="Fri, 29 Apr 2011 14:03:08 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                        <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-665] Add mechanism to temporarily replace root bindings of vars</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-665</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There are cases, such as mocking out functions during testing, where it is useful to replace the root bindings of vars (dynamic or otherwise) with new values temporarily, and have them reliably set back to their original values when done.&lt;/p&gt;

&lt;p&gt;Some discussion here: &lt;a href=&quot;http://clojure-log.n01se.net/date/2010-10-29.html#09:11&quot;&gt;http://clojure-log.n01se.net/date/2010-10-29.html#09:11&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14266">CLJ-665</key>
            <summary>Add mechanism to temporarily replace root bindings of vars</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="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Fri, 29 Oct 2010 08:39:04 -0500</created>
                <updated>Fri, 5 Nov 2010 11:05:12 -0500</updated>
                    <resolved>Fri, 5 Nov 2010 11:05:11 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="25890" author="chouser@n01se.net" created="Fri, 29 Oct 2010 10:30:18 -0500"  >&lt;p&gt;Attached patch includes a with-redefs macro and a with-redefs-fn, as well as a couple tests.&lt;/p&gt;</comment>
                    <comment id="25913" author="stu" created="Mon, 1 Nov 2010 08:40:38 -0500"  >&lt;p&gt;Second patch subsumes first, improves tests&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10006" name="0001-Add-with-redefs-macro-and-with-redefs-fn-CLJ-665.patch" size="3154" author="chouser@n01se.net" created="Fri, 29 Oct 2010 10:30:18 -0500" />
                    <attachment id="10011" name="0665-redefs-better-tests.patch" size="4883" author="stu" created="Mon, 1 Nov 2010 08:40: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>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-465] with-local-vars broken after changes to make dynamic off by default</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-465</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;with-local-vars should create dynamic vars. Here is what happens now in HEAD&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defn factorial &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt;           &lt;br/&gt;
  (with-local-vars &lt;span class=&quot;error&quot;&gt;&amp;#91;acc 1, cnt x&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (while (&amp;gt; @cnt 0)&lt;br/&gt;
      (var-set acc (* @acc @cnt))&lt;br/&gt;
      (var-set cnt (dec @cnt)))&lt;br/&gt;
    @acc))&lt;br/&gt;
#&apos;user/factorial&lt;br/&gt;
user=&amp;gt; (factorial 5)&lt;br/&gt;
IllegalStateException Can&apos;t dynamically bind non-dynamic var: null/null  clojure.lang.Var.pushThreadBindings (Var.java:352)&lt;/p&gt;


&lt;p&gt;Attached is a patch to mark with-local-vars vars as dynamic, and a test to prove that it works using factorial &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;</description>
                <environment></environment>
            <key id="13862">CLJ-465</key>
            <summary>with-local-vars broken after changes to make dynamic off by default</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Sat, 23 Oct 2010 00:13:00 -0500</created>
                <updated>Sun, 12 Dec 2010 20:37:22 -0600</updated>
                    <resolved>Sun, 12 Dec 2010 20:37:22 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24318" author="importer" created="Mon, 25 Oct 2010 14:02:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/465&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/465&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
with-local-vars-dynamic.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/ca7m5W3Sar34MEeJe5cbLA/download/ca7m5W3Sar34MEeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/ca7m5W3Sar34MEeJe5cbLA/download/ca7m5W3Sar34MEeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26027" author="stu" created="Sun, 12 Dec 2010 20:37:22 -0600"  >&lt;p&gt;patch was already applied but ticket never updated&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_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-462] clojure.core/slurp docstring out of date</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-462</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The slurp function used to only work on filename arguments, but now it uses clojure.java.io/reader instead, so it works with a much wider variety of arguments. The docstring does not reflect this change.&lt;/p&gt;

&lt;p&gt;Something like this might work: &quot;Opens a reader on f and reads all its contents, returning a string. See clojure.java.io/reader for a complete list of supported arguments.&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13859">CLJ-462</key>
            <summary>clojure.core/slurp docstring 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="aredington">Alexander Redington</assignee>
                                <reporter username="aredington">Alexander Redington</reporter>
                        <labels>
                    </labels>
                <created>Tue, 19 Oct 2010 17:36:00 -0500</created>
                <updated>Wed, 8 Dec 2010 15:52:29 -0600</updated>
                    <resolved>Mon, 29 Nov 2010 20:42:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="24314" author="importer" created="Tue, 19 Oct 2010 17:36:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/462&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/462&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25934" author="aredington" created="Fri, 12 Nov 2010 12:23:11 -0600"  >&lt;p&gt;Update for using the suggested docstring.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10017" name="0001-Updated-the-docstring-on-slurp-to-indicate-it-accept.patch" size="898" author="aredington" created="Fri, 12 Nov 2010 12:23: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-460] promote interrupt handling to clojure.repl</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-460</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The functions start-handling-break and add-break-thread! in clojure.contrib.repl-utils are regularly needed by tools such as the Clojure Debugging Toolkit. I propose we promote them to clojure.repl, eliminating what for many projects is their sole dependency on old contrib.&lt;/p&gt;

&lt;p&gt;Issues to consider before OKing:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;the usage of sun.misc classes appears to be the only game in town. For comparison, JRuby and Groovy already offer access to these classes, Scala appears not to.&lt;/li&gt;
	&lt;li&gt;the :need-init code in start-handling-break is too cute, but ain&apos;t broke, so won&apos;t change it.&lt;/li&gt;
	&lt;li&gt;do we need to add code to clean up the weak references? If so:
	&lt;ul&gt;
		&lt;li&gt;call each time a thread is added?&lt;/li&gt;
		&lt;li&gt;switch to ConcurrentHashMap to match code already in Clojure?&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="13857">CLJ-460</key>
            <summary>promote interrupt handling to clojure.repl</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="1" iconUrl="http://dev.clojure.org/jira/images/icons/priority_blocker.gif">Blocker</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>Fri, 15 Oct 2010 07:08:00 -0500</created>
                <updated>Fri, 5 Nov 2010 11:05:12 -0500</updated>
                    <resolved>Fri, 5 Nov 2010 11:05:12 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="24308" author="importer" created="Mon, 25 Oct 2010 22:05:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/460&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/460&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24309" author="importer" created="Mon, 25 Oct 2010 22:05:00 -0500"  >&lt;p&gt;richhickey said: Is there a patch to look at?&lt;/p&gt;</comment>
                    <comment id="24310" author="importer" created="Mon, 25 Oct 2010 22:05:00 -0500"  >&lt;p&gt;chouser@n01se.net said: &apos;add-break-thread!&apos; is too compound, presumably to make it easier to give instructions in IRC.  No reason it couldn&apos;t be simplified, making the instructions to set up two steps, one to register a thread to break, another to start catching the Ctrl-C.  I&apos;ll prepare a patch and docs for this.&lt;/p&gt;</comment>
                    <comment id="24324" author="chouser@n01se.net" created="Wed, 27 Oct 2010 22:32:12 -0500"  >&lt;p&gt;This patch avoids the issues of cleaning up weak references by only directly supporting one thread to stop at a time.  I think this is a sensible compromise as you&apos;ll generally only have one main REPL thread at a time.  In a more complex situation, stopping &lt;b&gt;all&lt;/b&gt; registered threads isn&apos;t obviously the right thing to do.  set-break-handler! accepts a function that can do arbitrarily complex things as needed.&lt;/p&gt;

&lt;p&gt;This patch also avoids the cuteness of :need-init by simply relying on the calling process to only call set-break-handler! once, which any REPL-startup script should be able to easily comply with.  It appears that repeated calls to set-break-handler! will just overwrite the old handler with the new one &amp;#8211; if their the same (such as the default handler) then no harm done.  If they&apos;re not the same, refusing to overwrite the old one is not obviously better than just taking the new handler.&lt;/p&gt;</comment>
                    <comment id="24325" author="richhickey" created="Thu, 28 Oct 2010 08:09:09 -0500"  >&lt;p&gt;I think the default should throw a derivee of Error, not Exception, as there are many Exception-eating paths in arbitrary code.&lt;/p&gt;</comment>
                    <comment id="24326" author="chouser@n01se.net" created="Thu, 28 Oct 2010 08:26:57 -0500"  >&lt;p&gt;Ah, figured out how to set to &quot;Test&quot;.  I assume this is ok to do, even though I&apos;m not &quot;Core team&quot;?&lt;/p&gt;</comment>
                    <comment id="24327" author="chouser@n01se.net" created="Thu, 28 Oct 2010 08:28:20 -0500"  >&lt;p&gt;Bah, sorry, missed Rich&apos;s comment.  Back to Approval: None.  Will fix the patch.&lt;/p&gt;</comment>
                    <comment id="25880" author="chouser@n01se.net" created="Thu, 28 Oct 2010 22:05:28 -0500"  >&lt;p&gt;The two reasonable choices of existing Errors to throw are Error and ThreadDeath.  ThreadDeath is the default for thread .stop, but doesn&apos;t provide a mechanism for setting the message.  I think it&apos;s more important to specify the exact cause of the exception, that a SIGINT was caught, than to use a possibly more accurate exception type, so the new patch throws a plain Error.&lt;/p&gt;</comment>
                    <comment id="25895" author="gjahad" created="Fri, 29 Oct 2010 12:15:37 -0500"  >&lt;p&gt;Looks good to me.&lt;/p&gt;</comment>
                    <comment id="25896" author="chouser@n01se.net" created="Fri, 29 Oct 2010 12:25:51 -0500"  >&lt;p&gt;I just realized that since this will be in clojure.repl now, clojure.main could do (set-break-handler!) in repl-opt so that plain terminal REPLs would catch Ctrl-C by default.  Would this be desirable?  Hm, perhaps that warrants a separate issue.&lt;/p&gt;</comment>
                    <comment id="25898" author="stu" created="Fri, 29 Oct 2010 13:26:40 -0500"  >&lt;p&gt;Second patch is good. Let&apos;s consider repl-opt feature separately.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10002" name="0001-Add-set-break-handler-and-thread-stopper-refs-CLJ-46.patch" size="1477" author="chouser@n01se.net" created="Wed, 27 Oct 2010 22:32:12 -0500" />
                    <attachment id="10003" name="0002-Add-set-break-handler-and-thread-stopper-CLJ-460.patch" size="1482" author="chouser@n01se.net" created="Thu, 28 Oct 2010 22:05:28 -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-458] print-table</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-458</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Print a textual table from a collection of maps. Useful for viewing regular data at the REPL.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13855">CLJ-458</key>
            <summary>print-table</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="1" iconUrl="http://dev.clojure.org/jira/images/icons/priority_blocker.gif">Blocker</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Oct 2010 15:46:00 -0500</created>
                <updated>Fri, 5 Nov 2010 11:05:12 -0500</updated>
                    <resolved>Fri, 5 Nov 2010 11:05:12 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24302" author="importer" created="Fri, 15 Oct 2010 10:29:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/458&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/458&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0458-pr-table.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dVt9Xg18Sr34Z7eJe5cbCb/download/dVt9Xg18Sr34Z7eJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dVt9Xg18Sr34Z7eJe5cbCb/download/dVt9Xg18Sr34Z7eJe5cbCb&lt;/a&gt;&lt;br/&gt;
0458-print-table.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b5Fqn62gGr349VeJe5cbLr/download/b5Fqn62gGr349VeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b5Fqn62gGr349VeJe5cbLr/download/b5Fqn62gGr349VeJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24303" author="importer" created="Fri, 15 Oct 2010 10:29:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:dVt9Xg18Sr34Z7eJe5cbCb&quot;&gt;file:dVt9Xg18Sr34Z7eJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24304" author="importer" created="Fri, 15 Oct 2010 10:29:00 -0500"  >&lt;p&gt;richhickey said: I just realized it should be called print-table if not readable, sorry I didn&apos;t think of this before&lt;/p&gt;</comment>
                    <comment id="24305" author="importer" created="Fri, 15 Oct 2010 10:29:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:b5Fqn62gGr349VeJe5cbLr&quot;&gt;file:b5Fqn62gGr349VeJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24306" author="importer" created="Fri, 15 Oct 2010 10:29:00 -0500"  >&lt;p&gt;stu said: second patch uses correct name&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-454] docstrings for special ops</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-454</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&quot;If someone wants to submit a patch with doc support for the special ops, I&apos;ll take it, as long as they contain links to the full docs and aren&apos;t too long themselves&quot;  &amp;#8211; rhickey&lt;/p&gt;

&lt;p&gt;From here: &lt;a href=&quot;http://clojure-log.n01se.net/date/2010-10-08.html#10:10&quot;&gt;http://clojure-log.n01se.net/date/2010-10-08.html#10:10&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13851">CLJ-454</key>
            <summary>docstrings for special ops</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Oct 2010 10:21:00 -0500</created>
                <updated>Wed, 8 Dec 2010 15:52:29 -0600</updated>
                    <resolved>Mon, 29 Nov 2010 20:42:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="24297" author="importer" created="Sun, 10 Oct 2010 14:42:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/454&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/454&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25930" author="chouser@n01se.net" created="Wed, 10 Nov 2010 20:54:32 -0600"  >&lt;p&gt;Should doc, find-doc, print-doc, etc. be moved out of clojure.core into clojure.repl as part of this?&lt;/p&gt;</comment>
                    <comment id="25939" author="chouser@n01se.net" created="Sat, 13 Nov 2010 21:57:20 -0600"  >&lt;p&gt;This patch updates doc to show docstrings for special forms and more useful URLs for Java interop special forms.  Special forms that are not fronted by macros have docs in a private var clojure.core/special-doc-map which doc and find-doc use.  This patch also has find-doc search namespace docstrings.&lt;/p&gt;</comment>
                    <comment id="25940" author="chouser@n01se.net" created="Sat, 13 Nov 2010 22:23:46 -0600"  >&lt;p&gt;This patch is essentially the same as the other, but also moves doc, find-doc, and related code to clojure.repl.  This is technically a breaking change, but since doc and find-doc are also added to clojure.main&apos;s list of vars to refer, anyone using a clojure.main&apos;s repl won&apos;t notice any difference.&lt;/p&gt;</comment>
                    <comment id="25966" author="trptcolin" created="Sat, 27 Nov 2010 21:55:21 -0600"  >&lt;p&gt;I love this change. Having special form docs in the REPL will be really helpful for newbies.&lt;/p&gt;

&lt;p&gt;A couple questions/comments on the second patch:&lt;/p&gt;

&lt;p&gt;1. Moving it to clojure.repl makes a lot of sense semantically. I wouldn&apos;t guess many people use doc in their actual production code, but I&apos;m guessing this would require updates to tools like autodoc.&lt;/p&gt;

&lt;p&gt;2. In clojure.repl/doc, why use #&apos;print-doc and #&apos;special-doc rather than just the bare symbols for those functions?&lt;/p&gt;</comment>
                    <comment id="25967" author="tomfaulhaber" created="Sun, 28 Nov 2010 00:36:32 -0600"  >&lt;p&gt;This is great. When these patches are applied, I&apos;ll add this stuff to the autodoc.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10020" name="0001-Make-doc-support-docstrings-for-special-ops.-CLJ-454.patch" size="10906" author="chouser@n01se.net" created="Sat, 13 Nov 2010 21:57:20 -0600" />
                    <attachment id="10021" name="0001-Move-doc-and-find-doc-to-repl-support-docstrings-for.patch" size="12037" author="chouser@n01se.net" created="Sat, 13 Nov 2010 22:23:46 -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-453] Reflection</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-453</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Clojure API for reflection that &lt;/p&gt;

&lt;p&gt;(1) separates API from engine, so that an ASM-based reflector can be used without having to load classes&lt;br/&gt;
(2) provides a REPL interface that is a successor to clojure.contrib.repl-utils/show&lt;br/&gt;
(3) returns data, not encapsulated objects&lt;/p&gt;</description>
                <environment></environment>
            <key id="13850">CLJ-453</key>
            <summary>Reflection</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Oct 2010 17:43:00 -0500</created>
                <updated>Fri, 15 Oct 2010 00:30:00 -0500</updated>
                    <resolved>Fri, 15 Oct 2010 00:30:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24288" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/453&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/453&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0453-reflection.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/biy_oS0Jir36FceJe5cbLA/download/biy_oS0Jir36FceJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/biy_oS0Jir36FceJe5cbLA/download/biy_oS0Jir36FceJe5cbLA&lt;/a&gt;&lt;br/&gt;
0453-reflection-matching-wip.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/ci50PA1ZCr36bDeJe5cbCb/download/ci50PA1ZCr36bDeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/ci50PA1ZCr36bDeJe5cbCb/download/ci50PA1ZCr36bDeJe5cbCb&lt;/a&gt;&lt;br/&gt;
0453-clojure-reflect.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bcLZTE19mr36vzeJe5cbCb/download/bcLZTE19mr36vzeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bcLZTE19mr36vzeJe5cbCb/download/bcLZTE19mr36vzeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24289" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:biy_oS0Jir36FceJe5cbLA&quot;&gt;file:biy_oS0Jir36FceJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24290" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: Note that the tests depend on #448.&lt;/p&gt;</comment>
                    <comment id="24291" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;richhickey said: I created &lt;a href=&quot;http://dev.clojure.org/display/design/Reflection+API&quot;&gt;http://dev.clojure.org/display/design/Reflection+API&lt;/a&gt; for discussion and notes&lt;/p&gt;</comment>
                    <comment id="24292" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:ci50PA1ZCr36bDeJe5cbCb&quot;&gt;file:ci50PA1ZCr36bDeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24293" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: 0453-reflection-matching-wip.patch is work in progress. See both  &lt;a href=&quot;http://dev.clojure.org/display/design/Reflection+API&quot;&gt;http://dev.clojure.org/display/design/Reflection+API&lt;/a&gt;  and &lt;a href=&quot;http://dev.clojure.org/display/design/Matching&quot;&gt;http://dev.clojure.org/display/design/Matching&lt;/a&gt; for design notes&lt;/p&gt;</comment>
                    <comment id="24294" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:bcLZTE19mr36vzeJe5cbCb&quot;&gt;file:bcLZTE19mr36vzeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24295" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: The third patch (dated Oct 14) is per conversation with Rich, plus one enhancement:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;main namespace is clojure.reflect, and aims to be platform-generic.&lt;/li&gt;
	&lt;li&gt;java specific bits are in the same namespace but a different file reflect/java.clj&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I believe this organization helps keep things separate for implementers without punishing users, who run on a single platform at a time and want a single namespace.&lt;/p&gt;</comment>
                    <comment id="24296" author="importer" created="Fri, 15 Oct 2010 00:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#263, #305, #315, #364, #453)&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-448] structural diff</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-448</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I constantly find myself writing ad hoc code to compare bits of structure, either at the REPL or in tests. (Or even worse, trying to eyeball two long pprint outputs). &lt;/p&gt;

&lt;p&gt;What I want instead is a diff function that compares two structures a and b, returning the parts only in a, parts only in b, and parts in both. Good solution for my needs should:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;work with all kinds of collections (both Clojure and Java)&lt;/li&gt;
	&lt;li&gt;make simple choices about how to define a &quot;difference&quot;&lt;/li&gt;
	&lt;li&gt;need not worry too much about perf&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="13845">CLJ-448</key>
            <summary>structural diff</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 Sep 2010 10:25:00 -0500</created>
                <updated>Fri, 5 Nov 2010 15:02:38 -0500</updated>
                    <resolved>Tue, 12 Oct 2010 19:58:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24263" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/448&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/448&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0448-structural-diff.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dr3uxCZj4r36h-eJe5cbLr/download/dr3uxCZj4r36h-eJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dr3uxCZj4r36h-eJe5cbLr/download/dr3uxCZj4r36h-eJe5cbLr&lt;/a&gt;&lt;br/&gt;
0448-structural-diff-mm.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dXJg-aZlyr35yieJe5cbCb/download/dXJg-aZlyr35yieJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dXJg-aZlyr35yieJe5cbCb/download/dXJg-aZlyr35yieJe5cbCb&lt;/a&gt;&lt;br/&gt;
0448-structural-diff-no-mms.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bkIb2GZnOr363HeJe5cbLr/download/bkIb2GZnOr363HeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bkIb2GZnOr363HeJe5cbLr/download/bkIb2GZnOr363HeJe5cbLr&lt;/a&gt;&lt;br/&gt;
0448-data-diff.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dhs7kcZ88r34I5eJe5cbCb/download/dhs7kcZ88r34I5eJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dhs7kcZ88r34I5eJe5cbCb/download/dhs7kcZ88r34I5eJe5cbCb&lt;/a&gt;&lt;br/&gt;
0448-data-diff-privatized.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b7-JX21Hur36gceJe5cbCb/download/b7-JX21Hur36gceJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b7-JX21Hur36gceJe5cbCb/download/b7-JX21Hur36gceJe5cbCb&lt;/a&gt;&lt;br/&gt;
0448-data-diff-nil-atom.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aoWwgo1Iqr36gceJe5cbCb/download/aoWwgo1Iqr36gceJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aoWwgo1Iqr36gceJe5cbCb/download/aoWwgo1Iqr36gceJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24264" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:dr3uxCZj4r36h-eJe5cbLr&quot;&gt;file:dr3uxCZj4r36h-eJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24265" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Not attached to the namespace or fn names, nor to having this in Clojure as opposed to contrib. Just had to put it somewhere to solicit feedback.&lt;/p&gt;</comment>
                    <comment id="24266" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;laurentpetit said: Did you know about difform before starting this ?  Looks like an interesting implementation :&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/GeorgeJahad/difform&quot;&gt;http://github.com/GeorgeJahad/difform&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24267" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:dXJg-aZlyr35yieJe5cbCb&quot;&gt;file:dXJg-aZlyr35yieJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24268" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Hmm, difform is cool, but coming at the problem from a different direction. I think there is room for both.&lt;/p&gt;</comment>
                    <comment id="24269" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Second patch (using a multimethod) reads better I think.&lt;/p&gt;</comment>
                    <comment id="24270" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:bkIb2GZnOr363HeJe5cbLr&quot;&gt;file:bkIb2GZnOr363HeJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24271" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: third patch (no mms) closes off potential for accidental comparison of unlikes&lt;/p&gt;</comment>
                    <comment id="24272" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;richhickey said: wow, reading patches of patches of patches is difficult&lt;/p&gt;</comment>
                    <comment id="24273" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;richhickey said: is the partitioning the same as for equality? If so it could be split out&lt;/p&gt;

&lt;p&gt;the j.u.Collection ==&amp;gt; sequence case makes me wary - should it be j.u.List?&lt;/p&gt;</comment>
                    <comment id="24274" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:dhs7kcZ88r34I5eJe5cbCb&quot;&gt;file:dhs7kcZ88r34I5eJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24275" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: fourth patch (0448-data-diff.patch) is hopefully final:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;replaces the others in a single clean patch.&lt;/li&gt;
	&lt;li&gt;partitions by List instead of Collection&lt;/li&gt;
	&lt;li&gt;renames the protocol and its fns to (better?) names&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="24276" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;richhickey said: is the partitioning the same as for equality? If so it could be split out&lt;/p&gt;</comment>
                    <comment id="24277" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:b7-JX21Hur36gceJe5cbCb&quot;&gt;file:b7-JX21Hur36gceJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24278" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: 0448-data-diff-privatized.patch subsumes the others. Changes:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;separated a protocol for EqualityPartition&lt;/li&gt;
	&lt;li&gt;marked things as private / implementation detail&lt;/li&gt;
	&lt;li&gt;used correct namespace clojure.data&lt;/li&gt;
	&lt;li&gt;added copyright notice&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="24279" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:aoWwgo1Iqr36gceJe5cbCb&quot;&gt;file:aoWwgo1Iqr36gceJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24280" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: 0448-data-diff-nil-atom subsumes others, and puts nil into the :atom EqualityPartition&lt;/p&gt;</comment>
                    <comment id="24281" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#276, #280, #378, #437, #448)&lt;/p&gt;</comment>
                    <comment id="25923" author="brweber2" created="Fri, 5 Nov 2010 15:02:38 -0500"  >&lt;p&gt;Does this diff include or ignore metadata?  I frequently want to compare structures in unit tests, but I would actually like to take the metadata into account... It would be great to have as an option.&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-447] biginteger fn misses a case for clojure.lang.BigInt</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-447</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(biginteger 13178456923875639284562345789N)&lt;br/&gt;
==&amp;gt;  #&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: Value out of range for long: 13178456923875639284562345789&amp;gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13844">CLJ-447</key>
            <summary>biginteger fn misses a case for clojure.lang.BigInt</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="1" iconUrl="http://dev.clojure.org/jira/images/icons/priority_blocker.gif">Blocker</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>Wed, 29 Sep 2010 05:21:00 -0500</created>
                <updated>Fri, 5 Nov 2010 11:05:12 -0500</updated>
                    <resolved>Fri, 5 Nov 2010 11:05:12 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24260" author="importer" created="Mon, 25 Oct 2010 19:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/447&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/447&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
fixbug447.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dzCDwS2B0r3543eJe5cbLA/download/dzCDwS2B0r3543eJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dzCDwS2B0r3543eJe5cbLA/download/dzCDwS2B0r3543eJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24261" author="importer" created="Mon, 25 Oct 2010 19:25:00 -0500"  >&lt;p&gt;ataggart said: [&lt;a href=&quot;file:dzCDwS2B0r3543eJe5cbLA&quot;&gt;file:dzCDwS2B0r3543eJe5cbLA&lt;/a&gt;]: adds conversion and test&lt;/p&gt;</comment>
                    <comment id="24262" author="importer" created="Mon, 25 Oct 2010 19:25:00 -0500"  >&lt;p&gt;aaron said: reviewed and tested against 09ba677c1dfd8e75cec47d270062558c71aa551d&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-444] Infinite recursion in Keyword.intern leads to stack overflow</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-444</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Keyword.intern keeps a table of SoftReferences to keywords, always preferring the existing one to making a new one. However, if the SoftReference has been pulled, the code tries to recurse as its way of &quot;trying again.&quot; &lt;/p&gt;

&lt;p&gt;Unfortunately, the way the logic is written, the code will work exactly the same way the second time around (and the third... it&apos;s turtles all the way down the stack) and eventually have a stack overflow.&lt;/p&gt;

&lt;p&gt;I found this in a long running web service that was using XML RPC and then &quot;keywordizing&quot; the keys of the result maps. Within an hour or so, it would blow up on this. From my read of the code, there is no work around once you&apos;re in this state since the expired reference is stuck in the keyword table.&lt;/p&gt;

&lt;p&gt;Patch coming momentarily.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13841">CLJ-444</key>
            <summary>Infinite recursion in Keyword.intern leads to stack overflow</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 28 Sep 2010 19:14:00 -0500</created>
                <updated>Tue, 28 Sep 2010 21:30:00 -0500</updated>
                    <resolved>Tue, 28 Sep 2010 21:30:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24251" author="importer" created="Tue, 28 Sep 2010 21:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/444&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/444&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
keyword-intern.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/a1Rf2-YY0r37R9eJe5cbLA/download/a1Rf2-YY0r37R9eJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/a1Rf2-YY0r37R9eJe5cbLA/download/a1Rf2-YY0r37R9eJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24252" author="importer" created="Tue, 28 Sep 2010 21:30:00 -0500"  >&lt;p&gt;tomfaulhaber said: [&lt;a href=&quot;file:a1Rf2-YY0r37R9eJe5cbLA&quot;&gt;file:a1Rf2-YY0r37R9eJe5cbLA&lt;/a&gt;]: bug fix&lt;/p&gt;</comment>
                    <comment id="24253" author="importer" created="Tue, 28 Sep 2010 21:30:00 -0500"  >&lt;p&gt;richhickey said: I don&apos;t think this analysis or patch is quite right.&lt;/p&gt;

&lt;p&gt;The Util.clearCache call at the top of intern should delete the dead entry. I guess there can be a window in which the softreference hasn&apos;t yet been enqueued, if it has any extent you could spin and see your stack overflow.&lt;/p&gt;

&lt;p&gt;But slamming in a new entry without the putIfAbsent logic risks an alias (two keywords with the same name) in a race condition.&lt;/p&gt;

&lt;p&gt;Better to explicitly remove the entry (not waiting on the softref queue) and recur.&lt;/p&gt;

&lt;p&gt;I&apos;ll fix.&lt;/p&gt;</comment>
                    <comment id="24254" author="importer" created="Tue, 28 Sep 2010 21:30:00 -0500"  >&lt;p&gt;richhickey said: (In [&lt;span class=&quot;error&quot;&gt;&amp;#91;r:167a73857a746e8dbeeb6d9ea8f99083aca7dc69&amp;#93;&lt;/span&gt;]) don&apos;t rely on softref queue, explicitly remove dead entry when found, fixes #444&lt;/p&gt;

&lt;p&gt;Branch: master&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-443] Add zero-arity body to comp function</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-443</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The comp function should return the identity function should it be called with zero args. Currently there is no zero-arity form. I talked a little more about this at &lt;a href=&quot;http://blog.fogus.me/2010/08/18/monkeying-with-clojures-comp-function/&quot;&gt;http://blog.fogus.me/2010/08/18/monkeying-with-clojures-comp-function/&lt;/a&gt;. Patch attached.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13840">CLJ-443</key>
            <summary>Add zero-arity body to comp function</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 28 Sep 2010 16:21:00 -0500</created>
                <updated>Mon, 11 Oct 2010 14:25:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 14:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24248" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/443&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/443&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
comp0.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aHXT_cYXqr35r8eJe5cbLr/download/aHXT_cYXqr35r8eJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aHXT_cYXqr35r8eJe5cbLr/download/aHXT_cYXqr35r8eJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24249" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&lt;/p&gt;</comment>
                    <comment id="24250" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&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-442] Fix embedded doc links on clojure.org docs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-442</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;These broke when we moved to clojure org on github. Try WebDAV for bulk edit without having to troll through the pages manually&lt;/p&gt;</description>
                <environment></environment>
            <key id="13839">CLJ-442</key>
            <summary>Fix embedded doc links on clojure.org docs</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 28 Sep 2010 08:06:00 -0500</created>
                <updated>Mon, 15 Nov 2010 12:49:00 -0600</updated>
                    <resolved>Sat, 30 Oct 2010 11:18:21 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24247" author="importer" created="Tue, 28 Sep 2010 08:06:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/442&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/442&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25902" author="stu" created="Sat, 30 Oct 2010 11:18:21 -0500"  >&lt;p&gt;completed by Alex Miller. 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-441] Add unchecked coercions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-441</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Checking in coercions has been added, making them safe, but removing the bit-twiddling power. We need some unchecked (truncating) coercion ops&lt;/p&gt;</description>
                <environment></environment>
            <key id="13838">CLJ-441</key>
            <summary>Add unchecked coercions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="1" iconUrl="http://dev.clojure.org/jira/images/icons/priority_blocker.gif">Blocker</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Tue, 28 Sep 2010 10:36:00 -0500</created>
                <updated>Wed, 8 Dec 2010 15:52:28 -0600</updated>
                    <resolved>Fri, 26 Nov 2010 13:32:33 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24238" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/441&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/441&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
unchecked-casts.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dVK0q-Znmr37hgeJe5cbLA/download/dVK0q-Znmr37hgeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dVK0q-Znmr37hgeJe5cbLA/download/dVK0q-Znmr37hgeJe5cbLA&lt;/a&gt;&lt;br/&gt;
unchecked-casts-without-typo.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/alGr58Znur34SreJe5cbCb/download/alGr58Znur34SreJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/alGr58Znur34SreJe5cbCb/download/alGr58Znur34SreJe5cbCb&lt;/a&gt;&lt;br/&gt;
0441-unchecked-coercions-plus-table.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/c1gyXG1xKr37lweJe5cbLr/download/c1gyXG1xKr37lweJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/c1gyXG1xKr37lweJe5cbLr/download/c1gyXG1xKr37lweJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24239" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;richhickey said: See also #284 which will be addressed by this&lt;/p&gt;</comment>
                    <comment id="24240" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;ataggart said: [&lt;a href=&quot;file:dVK0q-Znmr37hgeJe5cbLA&quot;&gt;file:dVK0q-Znmr37hgeJe5cbLA&lt;/a&gt;]: implementation and tests for unchecked casts&lt;/p&gt;</comment>
                    <comment id="24241" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;ataggart said: Added unchecked casts from every numeric primitive and Object to every numeric primitive.  Character and char can only get cast to int, as per the convention with the checked cast.&lt;/p&gt;

&lt;p&gt;Added tests for the above in clojure.test-clojure.numbers.&lt;/p&gt;</comment>
                    <comment id="24242" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;ataggart said: [&lt;a href=&quot;file:alGr58Znur34SreJe5cbCb&quot;&gt;file:alGr58Znur34SreJe5cbCb&lt;/a&gt;]: Same as above but without the typo in the docs&lt;/p&gt;</comment>
                    <comment id="24243" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:c1gyXG1xKr37lweJe5cbLr&quot;&gt;file:c1gyXG1xKr37lweJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24244" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;stu said: Third patch subsumes previous two and adds a test table for various conversions.&lt;/p&gt;</comment>
                    <comment id="24245" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;richhickey said: I&apos;d be interested in better names than unchecked-*&lt;/p&gt;

&lt;p&gt;any ideas? Think also about unchecked-add et al&lt;/p&gt;</comment>
                    <comment id="24246" author="importer" created="Thu, 30 Sep 2010 23:42:00 -0500"  >&lt;p&gt;richhickey said: let&apos;s create a clojure.unchecked ns and put these and the other unchecked arithmetic ops in there, using same names as normal, e.g. &lt;ins&gt;, inc etc. Only put the long versions in there, we&apos;ll have to decide separately about the truncating int-add etc. Then people can either use unchecked or alias and do uc/&lt;/ins&gt; etc&lt;/p&gt;</comment>
                    <comment id="25883" author="richhickey" created="Fri, 29 Oct 2010 06:58:10 -0500"  >&lt;p&gt;Let&apos;s create a clojure.unchecked ns and put these and the other unchecked arithmetic ops in there, using same names as normal, e.g. &amp;#43;, inc etc. Only put the &amp;#45;long versions in there, we&apos;ll have to decide separately about the truncating int-add etc. Then people can either use unchecked or alias and do uc/+ etc&lt;/p&gt;</comment>
                    <comment id="25955" author="richhickey" created="Thu, 25 Nov 2010 08:50:56 -0600"  >&lt;p&gt;error: patch failed: test/clojure/test_clojure/numbers.clj:31&lt;/p&gt;</comment>
                    <comment id="25961" author="aaron" created="Fri, 26 Nov 2010 12:44:16 -0600"  >&lt;p&gt;Fixed up the patch to merge properly as of 8225407032ea643cbe3db7f35ef97b1230fc65b8&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10028" name="0441-unchecked-coercions.patch" size="12371" author="aaron" created="Fri, 26 Nov 2010 12:41:44 -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-439] Automatic type translation from Integer to Long</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-439</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In some cases types can get lost:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def i1 (&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;. &lt;span class=&quot;code-quote&quot;&gt;&quot;100&quot;&lt;/span&gt;))
(def i2 (&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/valueOf 100))

[(class i1) (class i2)]
==&amp;gt; [java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt; java.lang.&lt;span class=&quot;code-object&quot;&gt;Long&lt;/span&gt;]

;; expected ==&amp;gt; [java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt; java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;]

;; But: (class (&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/valueOf 100)) ==&amp;gt; java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Works correspondingly for Floats, which become Doubles.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13836">CLJ-439</key>
            <summary>Automatic type translation from Integer to Long</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 27 Sep 2010 13:42:00 -0500</created>
                <updated>Tue, 28 Sep 2010 13:39:00 -0500</updated>
                    <resolved>Tue, 28 Sep 2010 13:39:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24235" author="importer" created="Tue, 28 Sep 2010 13:39:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/439&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/439&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24236" author="importer" created="Tue, 28 Sep 2010 13:39:00 -0500"  >&lt;p&gt;richhickey said: (In [&lt;span class=&quot;error&quot;&gt;&amp;#91;r:cc8372f12074b4cccbdd9cde3cfacfae069c57d3&amp;#93;&lt;/span&gt;]) don&apos;t coerce pre-boxed Integers and Floats to Longs/Doubles, fixes #439&lt;/p&gt;

&lt;p&gt;Branch: master&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-437] Bugs in clojure.set/subset? and superset? for sets with false/nil elements</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-437</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.set/subset? and /superset? fail on sets with false or nil elements, since they use the input sets directly as a membership predicates:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (clojure.set/subset? #{nil} #{nil 2 3})&lt;br/&gt;
false&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_frm/thread/c9c2bebd64803959/e61bbc0d148ecd7b#e61bbc0d148ecd7b&quot;&gt;http://groups.google.com/group/clojure-dev/browse_frm/thread/c9c2bebd64803959/e61bbc0d148ecd7b#e61bbc0d148ecd7b&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13834">CLJ-437</key>
            <summary>Bugs in clojure.set/subset? and superset? for sets with false/nil elements</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Sep 2010 15:11:00 -0500</created>
                <updated>Tue, 12 Oct 2010 19:58:00 -0500</updated>
                    <resolved>Tue, 12 Oct 2010 19:58:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24231" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/437&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/437&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
fix-subset.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/arGxjOXBqr3792eJe5cbLA/download/arGxjOXBqr3792eJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/arGxjOXBqr3792eJe5cbLA/download/arGxjOXBqr3792eJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24232" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#429, #437, #397, #420)&lt;/p&gt;</comment>
                    <comment id="24233" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#276, #280, #378, #437, #448)&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-435] stackoverflow exception in printing meta with :type</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-435</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Hi, after expose the problem in clojure irc and the help of @chouser, we thought my problem must be a bug.&lt;br/&gt;
Here the console session&lt;/p&gt;

&lt;p&gt;user&amp;gt; (with-meta {:value 2} {:type Object})&lt;/p&gt;

&lt;p&gt;No message. &lt;span class=&quot;error&quot;&gt;&amp;#91;Thrown class java.lang.StackOverflowError&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;0: clojure.lang.PersistentHashMap$BitmapIndexedNode.index(PersistentHashMap.java:485)&lt;br/&gt;
 1: clojure.lang.PersistentHashMap$BitmapIndexedNode.find(PersistentHashMap.java:571)&lt;br/&gt;
 2: clojure.lang.PersistentHashMap$ArrayNode.find(PersistentHashMap.java:355)&lt;br/&gt;
 3: clojure.lang.PersistentHashMap.entryAt(PersistentHashMap.java:129)&lt;br/&gt;
 4: clojure.lang.Var.getThreadBinding(Var.java:334)&lt;br/&gt;
 5: clojure.lang.Var.deref(Var.java:137)&lt;br/&gt;
 6: clojure.lang.Var.get(Var.java:133)&lt;br/&gt;
 7: clojure.core$pr_on.invoke(core.clj:2810)&lt;br/&gt;
 8: clojure.lang.Var.invoke(Var.java:369)&lt;br/&gt;
 9: clojure.lang.RT.print(RT.java:1270)&lt;br/&gt;
10: clojure.lang.RT.printString(RT.java:1249)&lt;br/&gt;
11: clojure.lang.APersistentMap.toString(APersistentMap.java:20)&lt;/p&gt;

&lt;p&gt;Chouser pointed that is a print error, creation and use of map with meta works fine&lt;/p&gt;

&lt;p&gt;Thank for your help!&lt;/p&gt;</description>
                <environment></environment>
            <key id="13832">CLJ-435</key>
            <summary>stackoverflow exception in printing meta with :type</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Tue, 14 Sep 2010 17:29:00 -0500</created>
                <updated>Fri, 29 Apr 2011 10:34:37 -0500</updated>
                    <resolved>Fri, 29 Apr 2011 10:34:37 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24227" author="importer" created="Fri, 8 Oct 2010 10:36:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/435&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/435&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24228" author="importer" created="Fri, 8 Oct 2010 10:36:00 -0500"  >&lt;p&gt;chouser@n01se.net said: The problem is the print-method for Object calls .toString on the object, clearly expecting some nice tame Java default implementation.  But in this case, the object is actually APersistentMap, which has a .toString that uses print-method.  Oops.&lt;/p&gt;

&lt;p&gt;One possible resolution is simply to say: when you lie about an object&apos;s type, bad things can happen.  :type Object is essentially claiming that the map&apos;s concrete type is Object and that&apos;s simply not true.  Perhaps breakage should be expected.&lt;/p&gt;

&lt;p&gt;On the other hand, if we want to fail more gracefully either with a clearer error or &quot;pre-initialized&quot; print defined in RT.print, I&apos;m not sure I see a solution other than explicit recursion detection.  In this case it could take the form of a private Var set to the object being printed.  If the Var is already equal to the object you&apos;re supposed to print, you&apos;re recursing on a single object and need to break out somehow.&lt;/p&gt;

&lt;p&gt;Can anyone think of a cleaner way to catch this?&lt;/p&gt;</comment>
                    <comment id="26327" author="mbrandmeyer" created="Mon, 21 Mar 2011 13:53:31 -0500"  >&lt;p&gt;Maybe one could check that &lt;tt&gt;(= (type thing) (class thing))&lt;/tt&gt; if the result of &lt;tt&gt;type&lt;/tt&gt; is a &lt;tt&gt;Class&lt;/tt&gt;? Types in meta data should normally be &lt;tt&gt;Keywords&lt;/tt&gt;, no?&lt;/p&gt;</comment>
                    <comment id="26380" author="stu" created="Fri, 22 Apr 2011 09:13:00 -0500"  >&lt;p&gt;I chose to make the minimal change to print-method, rather than changing the &lt;tt&gt;type&lt;/tt&gt; function, which would have been a breaking change to documented behavior.&lt;/p&gt;

&lt;p&gt;Aside: Should &lt;tt&gt;type&lt;/tt&gt; be deprecated?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10193" name="0435-printing-badly-typed-objects.patch" size="852" author="stu" created="Fri, 22 Apr 2011 09:12: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-433] munge should not munge $ (which isJavaIdentifierPart), should munge &apos; (which is not)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-433</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;munge is overeager in converting $ to &lt;em&gt;DOLLARSIGN&lt;/em&gt;, since $ is a valid&lt;br/&gt;
character in Java identifiers:&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; (filter #(&lt;span class=&quot;code-object&quot;&gt;Character&lt;/span&gt;/isJavaIdentifierPart %) (keys
clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;/CHAR_MAP))
(\$)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On a related point, &apos; (single quote) is not admissible in Java&lt;br/&gt;
identifiers, but it is not munged on master:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (&lt;span class=&quot;code-object&quot;&gt;Character&lt;/span&gt;/isJavaIdentifierPart \&apos;)
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (munge &lt;span class=&quot;code-quote&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;)
&lt;span class=&quot;code-quote&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This leads to 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;user=&amp;gt; *&apos;
#&amp;lt;core$_STAR_&apos; clojure.core$_STAR_&apos;@5adf48c4&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(note the &apos; after &lt;em&gt;STAR&lt;/em&gt;). &lt;/p&gt;

&lt;p&gt;Originally reported &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/9caab13eafa10f80&quot;&gt;on the Dev list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See also &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/7753adc5453d7410&quot;&gt;this thread&lt;/a&gt; on the (regular) Clojure ggroup.&lt;/p&gt;

&lt;p&gt;The attached patch applies cleanly against current master.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13830">CLJ-433</key>
            <summary>munge should not munge $ (which isJavaIdentifierPart), should munge &apos; (which is not)</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Thu, 9 Sep 2010 06:03:00 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Wed, 5 Jan 2011 06:49:34 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="24225" author="importer" created="Tue, 28 Sep 2010 16:32:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/433&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/433&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-munge-no-longer-changes-to-&lt;em&gt;DOLLARSIGN&lt;/em&gt;.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dp5tziVaer34yIeJe5cbLr/download/dp5tziVaer34yIeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dp5tziVaer34yIeJe5cbLr/download/dp5tziVaer34yIeJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25905" author="stu" created="Sat, 30 Oct 2010 12:12:08 -0500"  >&lt;p&gt;Patch is clean, the real issue here is doing the right thing. Two concerns:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;was the original choice to munge $ motivated, and if so do we need a more subtle patch that preserves that original intent?&lt;/li&gt;
	&lt;li&gt;presumably this is (yet another) binary-compatibility-breaking change. 1.3 already has major change, so now is a good a time as any...&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="25920" author="richhickey" created="Fri, 5 Nov 2010 08:00:06 -0500"  >&lt;p&gt;This issue mentions two problems but patch fixes only one. Should add the single-quote handling&lt;/p&gt;</comment>
                    <comment id="26010" author="michalmarczyk" created="Wed, 8 Dec 2010 00:12:28 -0600"  >&lt;p&gt;Right, I forgot about that in the patch somehow. Also, I just noticed that &quot; is also not JavaIdentifierPart and yet is not currently munged. The newly attached patch fixes all three issues.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10046" name="0001-fix-munge-handling-of.patch" size="969" author="michalmarczyk" created="Wed, 8 Dec 2010 00:12: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-432] deftype does not work if containing ns contains dashes</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-432</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There&apos;s a problem with the compilation (either live or AOT) of e.g. types, if the namespace containing the type definition cointains dashes.&lt;/p&gt;

&lt;p&gt;It&apos;s quite easy to reproduce: create src/net/yournick/lr_plus.clj , and in this file, have just &quot;(ns net.yournick.lr-plus) (deftype Foo)&quot;&lt;br/&gt;
AOT compile this, and shebang! in your classes/ directory you see the following folder structure: classes/net/yournick/lr-plus/&lt;/p&gt;

&lt;p&gt;lr-plus/ contains the Foo.class file&lt;/p&gt;

&lt;p&gt;folder lr-plus/ should really be lr_plus/&lt;/p&gt;

&lt;p&gt;the problem is that while apparently with Oracle JVMs everything works fine while you don&apos;t try to AOT compile it, it does not work (even if not AOT&apos;ed) with IBM JRE 6:&lt;/p&gt;

&lt;p&gt;Caused by: java.lang.ClassFormatError: JVMCFRE068 class name is invalid; class=compile__stub/net/cgrand/parsley/lr-plus/TableState, offset=0 (lr_plus.clj:8)&lt;/p&gt;</description>
                <environment></environment>
            <key id="13829">CLJ-432</key>
            <summary>deftype does not work if containing ns contains dashes</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="laurentpetit">Laurent Petit</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Sep 2010 13:35:00 -0500</created>
                <updated>Sun, 13 Mar 2011 23:54:53 -0500</updated>
                    <resolved>Mon, 29 Nov 2010 20:42:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="24224" author="importer" created="Fri, 8 Oct 2010 07:35:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/432&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/432&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25948" author="cemerick" created="Fri, 19 Nov 2010 21:23:48 -0600"  >&lt;p&gt;This patch fixes namespace munging for protocols, deftype, and defrecord.&lt;/p&gt;</comment>
                    <comment id="25951" author="laurentpetit" created="Sun, 21 Nov 2010 06:45:33 -0600"  >&lt;p&gt;OK, I&apos;ve tested the patch and it works.&lt;br/&gt;
The correction seems straightforward, too.&lt;/p&gt;</comment>
                    <comment id="26310" author="alexmiller" created="Sun, 13 Mar 2011 23:54:52 -0500"  >&lt;p&gt;This was a breaking change for us in 1.2.1 in this kind of example:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns my.rec-test
  (:use [clojure.test]))

(defrecord Foo [a])

(deftest test-rec 
  ;; 1.2.0 should use my.rec-test.Foo
  ;; 1.2.1 should use my.rec_test.Foo
  (is (= my.rec-test.Foo (class (Foo. 1)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Dropping a note here in case others run into it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10023" name="CLJ-432.diff" size="3876" author="cemerick" created="Fri, 19 Nov 2010 21:23:48 -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-430] clojure.java.io URL Coercion throws java.lang.ClassCastException</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-430</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I noticed a bug in the clojure.java.io namespace at Line 57 in extend-protocol Coercions URL&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;URL
   (as-url [u] u)
   (as-file [u]
     (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (= &lt;span class=&quot;code-quote&quot;&gt;&quot;file&quot;&lt;/span&gt; (.getProtocol u))
       (as-file (.getPath u))
--      (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (IllegalArgumentException. &lt;span class=&quot;code-quote&quot;&gt;&quot;Not a file: &quot;&lt;/span&gt; u))))
++      (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (IllegalArgumentException. (str &lt;span class=&quot;code-quote&quot;&gt;&quot;Not a file: &quot;&lt;/span&gt; u)))))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
Right now it &lt;span class=&quot;code-keyword&quot;&gt;throws&lt;/span&gt; the error:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
Caused by: java.lang.ClassCastException: java.net.URL cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to java.lang.Throwable
        at clojure.java.io $fn__7354.invoke(io.clj:56)
        at clojure.java.io $fn__7328$G__7323__7333.invoke(io.clj:34)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Clojure version: 1.2&lt;/p&gt;</description>
                <environment></environment>
            <key id="13827">CLJ-430</key>
            <summary>clojure.java.io URL Coercion throws java.lang.ClassCastException</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 2 Sep 2010 09:33:00 -0500</created>
                <updated>Mon, 11 Oct 2010 14:25:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 14:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24218" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/430&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/430&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0430-java-io-url-coercion.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cK6UTSZw4r345CeJe5cbLA/download/cK6UTSZw4r345CeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cK6UTSZw4r345CeJe5cbLA/download/cK6UTSZw4r345CeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24219" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:cK6UTSZw4r345CeJe5cbLA&quot;&gt;file:cK6UTSZw4r345CeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24220" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&lt;/p&gt;</comment>
                    <comment id="24221" author="importer" created="Mon, 11 Oct 2010 14:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&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-429] revamp ant build</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-429</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;reduce number of manual steps, improve clarity, add options&lt;/p&gt;</description>
                <environment></environment>
            <key id="13826">CLJ-429</key>
            <summary>revamp ant build</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 26 Aug 2010 09:03:00 -0500</created>
                <updated>Fri, 1 Oct 2010 08:53:00 -0500</updated>
                    <resolved>Fri, 1 Oct 2010 08:53:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24211" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/429&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/429&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0429-revamp-ant-build.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dlWZ16SsSr36B6eJe5cbLr/download/dlWZ16SsSr36B6eJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dlWZ16SsSr36B6eJe5cbLr/download/dlWZ16SsSr36B6eJe5cbLr&lt;/a&gt;&lt;br/&gt;
0429-revamp-ant-build-for-master.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bmkYJaXO4r36NjeJe5cbCb/download/bmkYJaXO4r36NjeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bmkYJaXO4r36NjeJe5cbCb/download/bmkYJaXO4r36NjeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24212" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:dlWZ16SsSr36B6eJe5cbLr&quot;&gt;file:dlWZ16SsSr36B6eJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24213" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;oranenj said: I gave this a quick run on top of 1.2.0 and it seems to work. The patch doesn&apos;t apply to master though. Is it supposed to?&lt;/p&gt;</comment>
                    <comment id="24214" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;richhickey said: Yes, what about master? I thought we were going to patch master and move changes to branch?&lt;/p&gt;</comment>
                    <comment id="24215" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:bmkYJaXO4r36NjeJe5cbCb&quot;&gt;file:bmkYJaXO4r36NjeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24216" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;stu said: first patch is for 1.2.x, second is for master. They both end in the same place, but differ because the 1.2.x branch had some separate (irrelevant going forward) changes in build.xml&lt;/p&gt;</comment>
                    <comment id="24217" author="importer" created="Fri, 1 Oct 2010 08:53:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#429, #437, #397, #420)&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-427] Github URL on clojure.org submission guidelines is out of date</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-427</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Need to update the git clone URLs on this page: &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt; as it still points to git://github.com/richhickey/clojure-contrib.git.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13824">CLJ-427</key>
            <summary>Github URL on clojure.org submission guidelines is out of date</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 18 Aug 2010 19:00:00 -0500</created>
                <updated>Tue, 28 Sep 2010 16:00:00 -0500</updated>
                    <resolved>Tue, 28 Sep 2010 16:00:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24207" author="importer" created="Tue, 28 Sep 2010 16:00:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/427&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/427&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24208" author="importer" created="Tue, 28 Sep 2010 16:00:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#427, #426, #421, #420, #397)&lt;/p&gt;</comment>
                    <comment id="24209" author="importer" created="Tue, 28 Sep 2010 16:00:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#421, #427)&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-426] case should handle hash collision</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-426</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;should generate a branch under the hash to deal with the conflicting values&lt;/p&gt;</description>
                <environment></environment>
            <key id="13823">CLJ-426</key>
            <summary>case 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="stu">Stuart Halloway</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Aug 2010 16:00:00 -0500</created>
                <updated>Fri, 29 Apr 2011 10:34:39 -0500</updated>
                    <resolved>Fri, 29 Apr 2011 10:34:39 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="24204" author="importer" created="Wed, 29 Sep 2010 09:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/426&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/426&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24205" author="importer" created="Wed, 29 Sep 2010 09:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#427, #426, #421, #420, #397)&lt;/p&gt;</comment>
                    <comment id="24206" author="importer" created="Wed, 29 Sep 2010 09:30:00 -0500"  >&lt;p&gt;cemerick said: It would be nice if case were further enhanced to support references to enums and static final fields (and maybe other stably-referenceable values as well?).  A userland workaround is shown &lt;a href=&quot;http://cemerick.com/2010/08/03/enhancing-clojures-case-to-evaluate-dispatch-values/&quot;&gt;here&lt;/a&gt; (added here instead of in a separate ticket at Rich&apos;s request).&lt;/p&gt;</comment>
                    <comment id="26096" author="richhickey" created="Fri, 7 Jan 2011 07:40:09 -0600"  >&lt;p&gt;while in there we should look at special-casing all-int case, and primitive return from case&lt;/p&gt;</comment>
                    <comment id="26113" author="aaron" created="Sun, 9 Jan 2011 14:38:02 -0600"  >&lt;p&gt;I&apos;m gonna give this a shot.  If anyone has any solutions to this please feel free to jump in here while I am working on it.&lt;/p&gt;</comment>
                    <comment id="26247" author="ataggart" created="Mon, 28 Feb 2011 12:59:08 -0600"  >&lt;p&gt;case changes:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;handles hash collisions&lt;/li&gt;
	&lt;li&gt;can emit return type&lt;/li&gt;
	&lt;li&gt;conditionally supports java enums&lt;/li&gt;
	&lt;li&gt;performance path for all-int or all-char test constants&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26252" author="ataggart" created="Tue, 1 Mar 2011 00:02:47 -0600"  >&lt;p&gt;Patch happens to fix &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-438&quot; title=&quot;case* and code walkers&quot;&gt;&lt;del&gt;CLJ-438&lt;/del&gt;&lt;/a&gt; as well.&lt;/p&gt;</comment>
                    <comment id="26255" author="ataggart" created="Wed, 2 Mar 2011 05:05:52 -0600"  >&lt;p&gt;Updated patch so that case is no longer one gigantic ball of code. And fixed some bugs&lt;/p&gt;</comment>
                    <comment id="26256" author="ataggart" created="Wed, 2 Mar 2011 05:28:05 -0600"  >&lt;p&gt;Update to fix a bug.&lt;/p&gt;</comment>
                    <comment id="26258" author="ataggart" created="Wed, 2 Mar 2011 19:55:29 -0600"  >&lt;p&gt;Per cemerick&apos;s request I&apos;m providing a secondary patch which would provide for evaluating test-constant symbols at compile time.  This would allow us to use switches where writing a literal value is difficult.  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; (defn foo [x]
         (case x
           java.lang.Math/PI :pi
           java.lang.Math/E :e
           :oops))
#&apos;user/foo
user=&amp;gt; (foo java.lang.Math/E)
:e
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Quoted symbols are not evaluated, but there are backwards compatibility concerns with evaluating unquoted symbols:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;if evaluation is successful, it might be unintended thus breaking existing code&lt;/li&gt;
	&lt;li&gt;if evaluation is unsucessful
	&lt;ul&gt;
		&lt;li&gt;continuing to treat it as a symbol would preserve partial backwards compatibility&lt;/li&gt;
		&lt;li&gt;throwing an error would break compatability, but allow for a more consistent behavior going forward, i.e., quote symbols when you want symbols&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26262" author="stu" created="Fri, 4 Mar 2011 14:52:56 -0600"  >&lt;p&gt;What&apos;s the basis for deciding when to use tableswitch vs. lookupswitch? I tried the sparse example &lt;span class=&quot;error&quot;&gt;&amp;#91;-100, 0, 100&amp;#93;&lt;/span&gt; from &lt;a href=&quot;http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html&quot;&gt;http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html&lt;/a&gt; and the code produced a tableswitch. Is this desirable?&lt;/p&gt;</comment>
                    <comment id="26263" author="stu" created="Fri, 4 Mar 2011 14:54:20 -0600"  >&lt;p&gt;Rich: screened in this case means only that the tests pass. I am continuing to dig into this patch, adding comments as I go. Let me know if there are specific things I should be investigating.&lt;/p&gt;</comment>
                    <comment id="26264" author="stu" created="Fri, 4 Mar 2011 14:59:51 -0600"  >&lt;p&gt;enum support feels half-baked. For example, an attempt to mix enums and non enums compiles but then cannot find the enum:&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;case&lt;/span&gt; clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$CaseTestEnumABC/a
        clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$CaseTestEnumABC/a 1
        1 2)
IllegalArgumentException No matching clause: a&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26265" author="stu" created="Fri, 4 Mar 2011 15:08:51 -0600"  >&lt;p&gt;The use of &lt;tt&gt;eval&lt;/tt&gt; to detect enums feels icky, and counter to the stated behavior of allowing only compile-time constants.&lt;/p&gt;</comment>
                    <comment id="26266" author="stu" created="Fri, 4 Mar 2011 15:12:25 -0600"  >&lt;p&gt;Rich: to the extent that we believe in testing for things like reflection warnings, it would be nice to have a way to get to that information other than be scraping stderr. If this is of interest let me know and I will make a ticket and/or start a design discussion as appropriate.&lt;/p&gt;</comment>
                    <comment id="26269" author="ataggart" created="Fri, 4 Mar 2011 16:45:08 -0600"  >&lt;p&gt;Regarding the mixed enum/non-enum case:&lt;/p&gt;

&lt;p&gt;The primary patch treats symbols which do not resolve to enums as symbols, but also treats enums as symbols when the set of test-constants was not all-enum.  Both parts were an attempt at backwards compatibility.&lt;/p&gt;

&lt;p&gt;I agree that the better behaviour would be to error on the mixed case, though this would break any code where a test-constant symbol happens to resolve to an enum.&lt;/p&gt;


&lt;p&gt;Regarding eval:&lt;/p&gt;

&lt;p&gt;It doesn&apos;t get around the &quot;compile-time&quot; restriction, but rather the &quot;literal&quot; restriction.&lt;/p&gt;</comment>
                    <comment id="26270" author="richhickey" created="Fri, 4 Mar 2011 17:03:28 -0600"  >&lt;p&gt;Unless someone can provide some simple semantics for enum support, I&apos;d rather not support them.&lt;/p&gt;

&lt;p&gt;Re: lookupswitch - I don&apos;t see any reason to support it - is the tableswitch code in some way wrong?&lt;/p&gt;</comment>
                    <comment id="26271" author="ataggart" created="Fri, 4 Mar 2011 19:39:58 -0600"  >&lt;blockquote&gt;&lt;p&gt;simple semantics for enum support&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;As the updated doc states: &quot;Java enums are supported if all test constants are enums of the same type.&quot;&lt;/p&gt;

&lt;p&gt;Stu&apos;s example violates the above rule.  The issue then becomes what should be the response: error at compile-time, or treat as symbol.  More on this in a following comment.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Re: lookupswitch ... is the tableswitch code in some way wrong?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Not at all, but the current version will throw an exception when it can&apos;t find a sufficient shift-mask:&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; (case 1
         1     :a
         16384 :b
         16385 :c)
IllegalArgumentException No distinct mapping found  clojure.core/min-hash (core.clj:5708)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The lookupswitch bytecode is only used to substitute for throwing that exception.&lt;/p&gt;

&lt;p&gt;The current process of fitting test constants into a switch:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Coerce to int by hashing&lt;/li&gt;
	&lt;li&gt;if shift-mask found, use tableswitch and shift-mask&lt;/li&gt;
	&lt;li&gt;else throw exception&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The process used in the patch:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Coerce to int (hash, enum ordinal, or int value)&lt;/li&gt;
	&lt;li&gt;if &lt;tt&gt;(max-int - min-int) &amp;lt; max-tableswitch-size&lt;/tt&gt;, use tableswitch without shift-mask&lt;/li&gt;
	&lt;li&gt;else if shift-mask found, use tableswitch with shift-mask&lt;/li&gt;
	&lt;li&gt;else use lookupswitch without shift-mask&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Where &lt;tt&gt;max-tableswitch-size&lt;/tt&gt; is simply an explicit consequence of the mask width.&lt;/p&gt;</comment>
                    <comment id="26272" author="richhickey" created="Fri, 4 Mar 2011 19:59:15 -0600"  >&lt;p&gt;Java enums aren&apos;t Clojure constants.&lt;/p&gt;</comment>
                    <comment id="26276" author="ataggart" created="Fri, 4 Mar 2011 21:50:00 -0600"  >&lt;p&gt;Support for enums is really just a degenerate case of supporting named constant values, e.g., &lt;tt&gt;java.lang.Math/PI&lt;/tt&gt;, &lt;tt&gt;(def init-state 0)&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;The basic requirement of &lt;tt&gt;case&lt;/tt&gt; is that the test constants have a known value at compile-time, &lt;em&gt;and that value has consistent hashing&lt;/em&gt;.  The current implementation assumes the latter requirement will be met by restricting test constants to literal types.  This mostly works, but fails with things like regex patterns.&lt;/p&gt;

&lt;p&gt;The above basic requirements can be met while removing the incidental &quot;literal&quot; restriction.  To do so means resolving literal symbols into constant values at compile-time, and then validating that the types are suitable (e.g., number, string).&lt;/p&gt;

&lt;p&gt;The simplest and most consistent approach would be to require quoting test constant symbols when used &lt;em&gt;as symbols&lt;/em&gt;.  Setting aside all other discussion of enums, etc., is this change to the treatment of symbols acceptable?&lt;/p&gt;</comment>
                    <comment id="26277" author="ataggart" created="Fri, 4 Mar 2011 22:39:30 -0600"  >&lt;p&gt;To make life easier, I&apos;m altering the set of patches.&lt;/p&gt;

&lt;p&gt;426-basic.patch:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;handles hash collisions&lt;/li&gt;
	&lt;li&gt;can emit return type&lt;/li&gt;
	&lt;li&gt;performance path for all-int or all-char test constants&lt;/li&gt;
	&lt;li&gt;no documentation change&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;426-supports-named-values.patch:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;all from above, plus...&lt;/li&gt;
	&lt;li&gt;evaluates unquoted test constant symbols at compile-time&lt;/li&gt;
	&lt;li&gt;validates test constants are suitable for case&lt;/li&gt;
	&lt;li&gt;doc change: &quot;The test-constants can be any combination of numbers, chars, strings, keywords, quoted symbols, and (Clojure) composites thereof. Unquoted symbols will be evaluated at compile time, and must resolve to one of the preceding types.&quot;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;426-supports-enums-and-named-values.patch:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;all from above, plus...&lt;/li&gt;
	&lt;li&gt;conditionally supports java enums&lt;/li&gt;
	&lt;li&gt;doc change: &quot;Java enums are supported only if all test constants are enums of the same type.&quot;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26278" author="cemerick" created="Sat, 5 Mar 2011 07:33:00 -0600"  >&lt;p&gt;RH:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Java enums aren&apos;t Clojure constants.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;SH:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The use of eval to detect enums feels icky, and counter to the stated behavior of allowing only compile-time constants.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I assume both of you are actually talking about literals.  Limiting &lt;tt&gt;case&lt;/tt&gt; to literal test values is simply too much of a handicap, even ignoring interop uses.  One should not have to macro their way out of repeating a constant value (e.g. &lt;tt&gt;(def &amp;#42;mole&amp;#42; 6.02214179e23)&lt;/tt&gt;) throughout a codebase that needs to use case extensively.&lt;/p&gt;

&lt;p&gt;Leaving aside questions about mechanics, &lt;tt&gt;static final&lt;/tt&gt; fields and enums are absolutely constants, and not being able to use them within &lt;tt&gt;case&lt;/tt&gt; would be (and is today) a significant pain point.  Yes, their value w.r.t. &lt;tt&gt;case&lt;/tt&gt; can change after a &lt;tt&gt;case&lt;/tt&gt; form has been AOT-compiled &amp;#8211; which exactly mirrors &lt;tt&gt;switch&lt;/tt&gt; (a good thing, IMO, making &lt;tt&gt;case&lt;/tt&gt; a proper superset of &lt;tt&gt;switch&lt;/tt&gt;).  Again, something one can macro out of, but something I don&apos;t think people should &lt;em&gt;have&lt;/em&gt; to macro out of.&lt;/p&gt;</comment>
                    <comment id="26279" author="richhickey" created="Sat, 5 Mar 2011 07:35:16 -0600"  >&lt;p&gt;Thanks for splitting this up. I&apos;m not in favor of anything beyond basic. The enum stuff is a snake pit full of new semantics, contradictions and special cases. I had told Chas as much. Sorry I hadn&apos;t realized the enum thing had crept into this scope sooner.&lt;/p&gt;

&lt;p&gt;Rich&lt;/p&gt;</comment>
                    <comment id="26280" author="cemerick" created="Sat, 5 Mar 2011 07:36:41 -0600"  >&lt;p&gt;I should say that I&apos;d consider it perfectly reasonable if &lt;tt&gt;case&lt;/tt&gt; were kept limited to using literals (if that limitation is considered important enough to retain at some level), but &lt;tt&gt;clojure.core&lt;/tt&gt; provided a &lt;tt&gt;switch&lt;/tt&gt; macro that evaluated symbols as Alexander has been reaching for.&lt;/p&gt;</comment>
                    <comment id="26281" author="richhickey" created="Sat, 5 Mar 2011 08:04:49 -0600"  >&lt;p&gt;Chas, I&apos;m not sure what you mean by &apos;macro their way out of...&quot; - are you saying def is too much work? Or is what you&apos;d want, but doesn&apos;t work?&lt;/p&gt;

&lt;p&gt;What&apos;s missing is not some extension to case, but possibly a broadening of what constitutes a compile time constant. At no point should that involve compile time evaluation in case. A defconst has long been requested and is a fine idea. Ditto static finals as constants. As long as case is defined to work with constants, we can enhance &apos;constants&apos; and case can do more transparently (at least semantically transparently). All of this stuff around unquoted constant symbols, conditional compile time evaluation (when does that otherwise happen?) etc is a mess. Note that case is currently defined in terms of literals because Clojure doesn&apos;t have a strong notion of constant yet.&lt;/p&gt;

&lt;p&gt;Also, I think you are not adequately considering the use of case in symbolic computation. People use case matching of symbols all the time when writing macros and compilers etc in CL, and wouldn&apos;t appreciate having to quote everything. Also, given we can match aggregates, how might one match (quote x), and why wouldn&apos;t that match &apos;x?&lt;/p&gt;

&lt;p&gt;This is scope creep, and insufficiently considered, plain and simple. Let&apos;s leave it as a separate ticket. It&apos;s going to require more thought, in any case &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="26282" author="cemerick" created="Sat, 5 Mar 2011 13:07:07 -0600"  >&lt;p&gt;Well, &lt;em&gt;everything&lt;/em&gt; is scope creep in the end. &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;By &quot;macro their way out&quot;, I meant doing something like I did &lt;a href=&quot;http://cemerick.com/2010/08/03/enhancing-clojures-case-to-evaluate-dispatch-values/&quot;&gt;here&lt;/a&gt; to use non-literal constants in case forms.  When I wrote that comment this morning, I was under the impression that &lt;em&gt;only&lt;/em&gt; Clojure literals were considered acceptable.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Anyway, what follows is either incredibly pedantic, or a draft of a wiki page where a more agreeable solution can be hashed out.&lt;/p&gt;

&lt;p&gt;It occurs to me that being explicit about what constants exist and what&apos;s on the table here would be helpful, at least for me:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Clojure literals and composites thereof, as implemented in 1.2.0 &lt;tt&gt;case&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;static final&lt;/tt&gt; fields&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;def&lt;/tt&gt;&apos;ed values, presumed to be unchanging&lt;/li&gt;
	&lt;li&gt;enums&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;(1) is granted, and it sounds like moving beyond this is not desired at this time without significant further analysis/discussion (implying the application of Alexander&apos;s &quot;basic&quot; patch only).&lt;/p&gt;

&lt;p&gt;(2) appears to be desired (&quot;Ditto static finals as constants&quot;).  However, as soon as we allow for non-literal constant values (whether fields, &lt;tt&gt;def&lt;/tt&gt;&apos;s, enums, or other), I&apos;m very confused as to:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;how what we use to refer to those values (surely symbols?) aren&apos;t turned into a second-class test values&lt;/li&gt;
	&lt;li&gt;how we&apos;re not faced with conditional resolution of those values (there&apos;s no calls anywhere, so it seems there&apos;s little difference between &lt;tt&gt;eval&lt;/tt&gt; and direct usage of &lt;tt&gt;Reflector&lt;/tt&gt;, at least for fields and enums)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Perhaps the &lt;tt&gt;defconst&lt;/tt&gt; variation hinted at in conjunction with (3) would somehow avoid compile-time evaluation for &lt;tt&gt;def&lt;/tt&gt;&apos;ed values?  I&apos;m no longer familiar with CL and the &lt;tt&gt;defconstant&lt;/tt&gt; prior art to reasonably guess at the relevant semantics of &lt;tt&gt;defconst&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;Re: (4) and &quot;The enum stuff is a snake pit full of new semantics, contradictions and special cases&quot;: I&apos;m pretty sure I didn&apos;t know that.  It seems like enum support is as close as:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(.ordinal (Reflector/getStaticField EnumClassName &lt;span class=&quot;code-quote&quot;&gt;&quot;EnumName&quot;&lt;/span&gt;))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&#8230;with all reasonable error-checking and such to ensure the domain of the &lt;tt&gt;case&lt;/tt&gt; form includes only enums of the same type (though again, the issues with resolving symbols remains).&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Anyway, I&apos;m sorry to have encouraged (egged on?) Alexander.  I appear to have misread/misunderstood the desired scope of changes.&lt;/p&gt;</comment>
                    <comment id="26283" author="ataggart" created="Sat, 5 Mar 2011 14:04:06 -0600"  >&lt;p&gt;Chas, no worries.  Being able to use named constant values as test constants makes my life so much easier, especially when dealing with java interop.  Until now I&apos;ve had to use &lt;tt&gt;(condp = x ...)&lt;/tt&gt;.  Regardless of whether it makes it into core, I will still be using it.&lt;/p&gt;</comment>
                    <comment id="26286" author="richhickey" created="Sun, 6 Mar 2011 11:05:20 -0600"  >&lt;p&gt;Chas -&lt;/p&gt;


&lt;p&gt;1) Is all we&apos;ve got right now. Literals compile into themselves. There is no notion of constant in the language.&lt;/p&gt;

&lt;p&gt;2) Treating finals as constants would require the compiler compile MyClass/MY_FINAL into its value, which it does not currently do. It currently generates a getStaticField opcode.&lt;/p&gt;

&lt;p&gt;3) I never suggested treating defs like constants. A defconst would require some notion of constant. Since its value would be compiled into code, it must be different from def, the semantics of which are to compile into a deref of the var. Only the latter currently occurs. Doing otherwise automagically just inside case would be bizarre. Languages typically constrain the initializers of such constants, esp. to constant expressions themselves. CL allows for arbitrary initializers, but requires they be eval-able at compile time, always evaluate to the same value, and with much hand waving about execution order.&lt;/p&gt;

&lt;p&gt;e.g. if as you had suggested:&lt;/p&gt;

&lt;p&gt;(def x (launch-missiles))&lt;/p&gt;

&lt;p&gt;(case foo x ...)&lt;/p&gt;

&lt;p&gt;Would missiles be launched during compilation or loading or both? Would x be nil or the number of missiles launched in the case? What if the case were wrapped in (binding/let &lt;span class=&quot;error&quot;&gt;&amp;#91;x ...&amp;#93;&lt;/span&gt; ...)?&lt;/p&gt;

&lt;p&gt;4) is like 2.&lt;/p&gt;

&lt;p&gt;You are correct, 2,3,4 all conflict with the use of symbols in case, which is why supporting them is a breaking change, glommed on to a ticket that nominally is a bug fix, augmented by a perf optimization.&lt;/p&gt;

&lt;p&gt;Fixing the conflict isn&apos;t as simple as saying &quot;use &apos;x for symbols&quot; in case. You&apos;d need to consider the interaction of constants and all special forms and macros, the relationship between constants and &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;un&amp;#93;&lt;/span&gt;evaluated&apos; positions everywhere. It&apos;s not a trivial thing. CL, FWIW, does not in fact support its own defconstants as keys in its case, considering them constants only in evaluated positions.&lt;/p&gt;

&lt;p&gt;I don&apos;t have the time right now to consider all of that, but I won&apos;t accept a design that hasn&apos;t.&lt;/p&gt;</comment>
                    <comment id="26287" author="stu" created="Sun, 6 Mar 2011 12:03:41 -0600"  >&lt;p&gt;Reviewing the basic patch. The code passed to &lt;tt&gt;case*&lt;/tt&gt; is incorrect for some duplicate hash scenarios. One example:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [f #(&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; % 0 :ZERO -1 :NEG1 2 :TWO :OOPS :OOPS)]
    (doseq [input [0 -1 2 :OOPS]]
      (println (format &lt;span class=&quot;code-quote&quot;&gt;&quot;(f %s) = %s&quot;&lt;/span&gt; input (f input)))))
(f 0) = :ZERO
(f -1) = :NEG1
(f 2) = [2 :TWO]
IllegalArgumentException No matching clause: :OOPS&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It would be a huge help to me in screening if the docstrings for the private helper fns documented expected inputs and outputs.&lt;/p&gt;</comment>
                    <comment id="26291" author="ataggart" created="Sun, 6 Mar 2011 18:25:45 -0600"  >&lt;p&gt;Hash-collision handling function did not properly handle non-colliding test/then entries.  &lt;/p&gt;

&lt;p&gt;426-basic-update-1.patch fixes the above and adds Stu&apos;s example to the test suite.&lt;/p&gt;</comment>
                    <comment id="26292" author="ataggart" created="Sun, 6 Mar 2011 18:26:17 -0600"  >&lt;p&gt;426-basic-update-1.patch also contains additional documentation to the various helper functions.&lt;/p&gt;</comment>
                    <comment id="26302" author="stu" created="Fri, 11 Mar 2011 11:43:32 -0600"  >&lt;p&gt;Alex: There is something weird about characters:&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;case&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt; \uFFFF) \uFFFF 1)
=&amp;gt; 1
(&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; \uFFFF \uFFFF 1)
=&amp;gt; IllegalArgumentException No matching clause: ?  user/eval2253 (NO_SOURCE_FILE:126)
(&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; \a \a 1)
=&amp;gt; IllegalArgumentException No matching clause: a  user/eval2256 (NO_SOURCE_FILE:127)
(&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; (&lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt; \a) \a 1)
=&amp;gt; 1&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(These all return &quot;1&quot; prior to the patch.)&lt;/p&gt;</comment>
                    <comment id="26307" author="ataggart" created="Fri, 11 Mar 2011 14:51:52 -0600"  >&lt;p&gt;Good catch, Stu.&lt;/p&gt;

&lt;p&gt;Causes:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;character literals are analyzed as ConstantExprs which do not emit primitives, thus the case code went into the &quot;hash&quot; branch.&lt;/li&gt;
	&lt;li&gt;character test values (not the case values) were erroneously ints, so the post-switch validation looked like (= \a 97).
	&lt;ul&gt;
		&lt;li&gt;this also meant there was equivalence between numbers and chars, which is not consistent with the rest of clojure.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Fix:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;426-basic-update-2.patch&lt;/tt&gt;: removes support for the all-chars case&lt;/p&gt;


&lt;p&gt;Aside:&lt;/p&gt;

&lt;p&gt;Would it be reasonable to have a CharExpr analogue to NumberExpr?&lt;/p&gt;</comment>
                    <comment id="26318" author="stu" created="Sun, 20 Mar 2011 09:31:47 -0500"  >&lt;p&gt;some inputs (which formerly causes &quot;no distinct mapping found&quot; can now cause negative array access or exhaust memory&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;;; negative array size exception
(defn foo [x]
  (&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; x
        -1993159583054299157 -1993159583054299157
        -4 -4
        0 0
        -1028157349872421032 0
        :nwuhzgv1k4Gl8eyE*+4UT0b1wIlN!ohzv3!snZ-dN6TBWZ7aOpCYjk3cwgKUHDenjBkx*dwIudNqXVHPDSyuB8yE!d1dSDDGGi5_v5FwC+S_Pr+?hXmEdiL2_3ND+_UCVY4IH8bUw 0
        2 2))


;; out of memory
(defn foo [x]
  (&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; x
        -1993159583054299157 -1993159583054299157
        -4 -4
        0 0
        :nwuhzgv1k4Gl8eyE*+4UT0b1wIlN!ohzv3!snZ-dN6TBWZ7aOpCYjk3cwgKUHDenjBkx*dwIudNqXVHPDSyuB8yE!d1dSDDGGi5_v5FwC+S_Pr+?hXmEdiL2_3ND+_UCVY4IH8bUw 0
        2 2))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
</comment>
                    <comment id="26320" author="ataggart" created="Sun, 20 Mar 2011 13:44:59 -0500"  >&lt;p&gt;Both of the above were due to label array creation not taking into account the type of switch being emitted. Fixed in 426-basic-update-3.patch.&lt;/p&gt;</comment>
                    <comment id="26328" author="ataggart" created="Mon, 21 Mar 2011 16:38:45 -0500"  >&lt;p&gt;426-basic-update-4.patch update to apply to current master branch.&lt;/p&gt;</comment>
                    <comment id="26345" author="stu" created="Tue, 5 Apr 2011 20:21:49 -0500"  >&lt;p&gt;update-4 fails for this input:&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
  [x]
  (&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; x
        -1 -1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Maybe an issue with case statements that are all negative ints?&lt;/p&gt;</comment>
                    <comment id="26352" author="ataggart" created="Wed, 6 Apr 2011 03:41:42 -0500"  >&lt;p&gt;Update 5 fixes the above bug.&lt;/p&gt;

&lt;p&gt;In the previous patch, if all the test expressions were ints but the tested expression was not known to be primitive, the hashcode branch was used.  The hashcode of Integers is equal to their value, but for Long&apos;s that&apos;s only true for the positive range. This was the source of the bug you found, namely the value in the switch (-1) didn&apos;t match the hash of Long -1 (0).&lt;/p&gt;

&lt;p&gt;Instead of reusing the hashcode branch, bytecode like the following is now emitted:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (expr &lt;span class=&quot;code-keyword&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;Number&lt;/span&gt;)
  &lt;span class=&quot;code-keyword&quot;&gt;switch&lt;/span&gt;(((&lt;span class=&quot;code-object&quot;&gt;Number&lt;/span&gt;)expr).intValue()){
    &lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; -1:
      &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (Util.equiv(expr, -1))
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; -2;
  }
&lt;span class=&quot;code-comment&quot;&gt;// &lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; IllegalArgumentException();&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that the performance warning is still in place, albeit with a better message:&lt;br/&gt;
&quot;Performance warning, %s:%d - case has int tests, but tested expression is not primitive.\n&quot;&lt;/p&gt;</comment>
                    <comment id="26371" author="redinger" created="Fri, 15 Apr 2011 12:55:00 -0500"  >&lt;p&gt;Please Test patch&lt;/p&gt;</comment>
                    <comment id="26379" author="redinger" created="Thu, 21 Apr 2011 12:17:53 -0500"  >&lt;p&gt;FYI: patch applies cleanly &amp;amp; tests pass against master as of 4/21 (2011)&lt;/p&gt;</comment>
                    <comment id="26387" author="stu" created="Fri, 22 Apr 2011 11:48:37 -0500"  >&lt;p&gt;I am seeing failure for the following input:&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
 [x]
 (&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt; x
   1204766517646190306 9
   1 8 
   -2 6))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Sorry for the screwy formatting in JIRA.&lt;/p&gt;</comment>
                    <comment id="26389" author="ataggart" created="Fri, 22 Apr 2011 14:14:47 -0500"  >&lt;p&gt;Updated patch to fix above.&lt;/p&gt;

&lt;p&gt;Explanation of bug:&lt;/p&gt;

&lt;p&gt;When multiple test constants have a hash collision, the respective thens are combined with a condp, and the colliding hash value is used as the test constant.  Since the combined then performs its own post-switch validation, the normal (non-colliding) behaviour of checking that the original test value equals the tested expression must be skipped.&lt;/p&gt;

&lt;p&gt;The bug occurred because the skip-check set of case ints was not getting the necessary shift-mask applied to it.&lt;/p&gt;

&lt;p&gt;The bug was not caught earlier because there was incomplete test coverage, namely, for the case of both hash collision and shift-mask application.&lt;/p&gt;</comment>
                    <comment id="26393" author="stu" created="Tue, 26 Apr 2011 20:01:39 -0500"  >&lt;p&gt;code now passes &lt;a href=&quot;https://github.com/clojure/test.generative&quot;&gt;test.generative tests&lt;/a&gt;. Test run shows case to be faster than cond (and test code could be improved to more directly compare speed).&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 [*msec* 100000]
  (doseq [v (test-namespaces &apos;clojure.test.core-test)]
    @v))

{:iterations 2204, :msec 33339, :spec #&apos;clojure.test.core-test/cond-spec, :seed 43}
{:iterations 2159, :msec 33353, :spec #&apos;clojure.test.core-test/cond-spec, :seed 42}
{:iterations 3298, :msec 33339, :spec #&apos;clojure.test.core-test/&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt;-spec, :seed 43}
nil
{:iterations 3217, :msec 33338, :spec #&apos;clojure.test.core-test/&lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt;-spec, :seed 42}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is a fairly large patch &amp;#8211; please advise if we need to find a way to break into into smaller chunks, or if there are other perf tests you would like to see.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10197" name="426.patch" size="34626" author="ataggart" created="Fri, 22 Apr 2011 14:14: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>stu</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-425] stop early-loading ancillary libraries</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-425</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In RT.java, doInit loads a bunch of libraries on startup: &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;load(&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure/zip&quot;&lt;/span&gt;, &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;);
 load(&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure/xml&quot;&lt;/span&gt;, &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;);
 load(&lt;span class=&quot;code-quote&quot;&gt;&quot;clojure/set&quot;&lt;/span&gt;, &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is vestigial from before use/require, and Clojure would load faster if it went away. Would be a small breaking change if anyone uses these libraries with full namespace qualification, and without a prior load/use.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13822">CLJ-425</key>
            <summary>stop early-loading ancillary libraries</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Aug 2010 00:29:00 -0500</created>
                <updated>Wed, 22 Sep 2010 14:25:00 -0500</updated>
                    <resolved>Wed, 22 Sep 2010 14:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24202" author="importer" created="Wed, 22 Sep 2010 14:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/425&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/425&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0425-stop-early-loading.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bwUWm2Rg0r349IeJe5cbLA/download/bwUWm2Rg0r349IeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bwUWm2Rg0r349IeJe5cbLA/download/bwUWm2Rg0r349IeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24203" author="importer" created="Wed, 22 Sep 2010 14:25:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:bwUWm2Rg0r349IeJe5cbLA&quot;&gt;file:bwUWm2Rg0r349IeJe5cbLA&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-421] clojure tests can fail because of a race in the pprint tests</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-421</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When I was doing the pprint tests for printing agents, I typod the code that guarded against races. &lt;/p&gt;

&lt;p&gt;Bug was observed by Rasmus Svensson in &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/26b14bcada913247#&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/26b14bcada913247#&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; FAIL in (pprint-datastructures-tests) (test_pretty.clj:226)&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; expected: ((var&lt;br/&gt;
clojure.test-clojure.pprint.test-helper/back-match) (tst-pprint 20&lt;br/&gt;
(failed-agent)) #&quot;#&amp;lt;Agent@&lt;span class=&quot;error&quot;&gt;&amp;#91;0-9a-f&amp;#93;&lt;/span&gt;+ FAILED: \n  \&quot;foo\&quot;&amp;gt;&quot;)&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   actual: nil &lt;/p&gt;

&lt;p&gt;Patch coming momentarily.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13818">CLJ-421</key>
            <summary>clojure tests can fail because of a race in the pprint tests</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 9 Aug 2010 00:00:00 -0500</created>
                <updated>Tue, 28 Sep 2010 13:00:00 -0500</updated>
                    <resolved>Tue, 28 Sep 2010 13:00:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24180" author="importer" created="Tue, 28 Sep 2010 13:00:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/421&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/421&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
bug421-patch.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dzMEaqO-Kr36zXeJe5cbLA/download/dzMEaqO-Kr36zXeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dzMEaqO-Kr36zXeJe5cbLA/download/dzMEaqO-Kr36zXeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24181" author="importer" created="Tue, 28 Sep 2010 13:00:00 -0500"  >&lt;p&gt;tomfaulhaber said: [&lt;a href=&quot;file:dzMEaqO-Kr36zXeJe5cbLA&quot;&gt;file:dzMEaqO-Kr36zXeJe5cbLA&lt;/a&gt;]: The patch to fix the bug&lt;/p&gt;</comment>
                    <comment id="24182" author="importer" created="Tue, 28 Sep 2010 13:00:00 -0500"  >&lt;p&gt;tomfaulhaber said: I&apos;ve added a patch that should fix the bug. I&apos;ll ask Rasmus to confirm.&lt;/p&gt;</comment>
                    <comment id="24183" author="importer" created="Tue, 28 Sep 2010 13:00:00 -0500"  >&lt;p&gt;tomfaulhaber said: Rasmus has confirmed that this indeed fixes the problem. I&apos;d push for this change to go into 1.2 if anything more ends up going in, so that folks can run the tests reliably.&lt;/p&gt;</comment>
                    <comment id="24184" author="importer" created="Tue, 28 Sep 2010 13:00:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#427, #426, #421, #420, #397)&lt;/p&gt;</comment>
                    <comment id="24185" author="importer" created="Tue, 28 Sep 2010 13:00:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#421, #427)&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-410] clojure.xml parse/emit do not round-trip</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-410</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;m not expecting (emit (parse x)) to produce the same characters as originally in x. (That would be canonical form.)&lt;br/&gt;
However, it seems reasonable to expect that (= (parse x) (parse (emit (parse x)))). That&apos;s not currently the case because of #277 and #408.&lt;br/&gt;
It&apos;s not currently possible to demonstrate this bug via a unit test because of #409.&lt;br/&gt;
This fails:&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 parse-and-emit-should-round-trip-data
  (are [s0]
       (let [x1 (str-&amp;gt;xml s0)
             s2 (xml-&amp;gt;str x1)
             x3 (str-&amp;gt;xml s2)]
         (is (= x1 x3)))
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e/&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;content&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e a=&apos;attribute&apos;/&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e a=&apos;attribute&apos;&amp;gt;content&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;&amp;lt;e&amp;gt;&amp;lt;e/&amp;gt;&amp;lt;/e&amp;gt;&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt; &amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;amp;gt;&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
Where:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;(defn xml-&amp;gt;str [x]
  (with-out-str
    (xml/emit-element x)))

(defn str-&amp;gt;xml [s]
  (xml/parse
   (ByteArrayInputStream. (.getBytes s &lt;span class=&quot;code-quote&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or, rather it crashes prematurely in str-&amp;gt;xml because of #409.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13807">CLJ-410</key>
            <summary>clojure.xml parse/emit do not round-trip</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Jul 2010 00:46:00 -0500</created>
                <updated>Mon, 15 Nov 2010 12:49:00 -0600</updated>
                    <resolved>Sat, 30 Oct 2010 14:46:19 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24143" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/410&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/410&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
410-emit-element-no-longer-emits-spurious-new.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b6SULoLZer346_eJe5cbLr/download/b6SULoLZer346_eJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b6SULoLZer346_eJe5cbLr/download/b6SULoLZer346_eJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24144" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;bpsm said: Tests that demonstrate #410 are available at &lt;a href=&quot;http://github.com/bpsm/test-clojure-xml&quot;&gt;http://github.com/bpsm/test-clojure-xml&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="24145" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;bpsm said: [&lt;a href=&quot;file:b6SULoLZer346_eJe5cbLr&quot;&gt;file:b6SULoLZer346_eJe5cbLr&lt;/a&gt;]: see also &lt;a href=&quot;http://github.com/bpsm/clojure/commits/fix408,410,277&quot;&gt;http://github.com/bpsm/clojure/commits/fix408,410,277&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24146" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;stu said: &lt;b&gt;Duplicated&lt;/b&gt; association with ticket #277 was added&lt;/p&gt;</comment>
                    <comment id="24147" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;chouser@n01se.net said: Please consider the solution provided by clojure.contrib.lazy-xml/emit which uses javax.xml.transform classes to fix not only these bugs (#410 and #408) but also support indent, xml-declaration, and encoding options.&lt;/p&gt;</comment>
                    <comment id="25907" author="stu" created="Sat, 30 Oct 2010 14:46:19 -0500"  >&lt;p&gt;emit is not part of Clojure&apos;s public API, and we don&apos;t want to grow a public API via an issue-driven random walk. If you are interested in this issue, please chime in on the design page for a new data.xml library: &lt;a href=&quot;http://dev.clojure.org/display/DXML/Home&quot;&gt;http://dev.clojure.org/display/DXML/Home&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="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-397] better error message when calling macros with arity</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-397</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The two magic arguments to macros lead to weird 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;(defmacro foo [a b] a)
(foo)
java.lang.IllegalArgumentException: Wrong number of args (2) passed to: user$foo (NO_SOURCE_FILE:)0&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13794">CLJ-397</key>
            <summary>better error message when calling macros with arity</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="1" iconUrl="http://dev.clojure.org/jira/images/icons/priority_blocker.gif">Blocker</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 7 Jul 2010 06:59:00 -0500</created>
                <updated>Fri, 5 Nov 2010 11:05:12 -0500</updated>
                    <resolved>Fri, 5 Nov 2010 11:05:12 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24088" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/397&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/397&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
mh-397-arity.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/atduak20Cr35rOeJe5cbLA/download/atduak20Cr35rOeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/atduak20Cr35rOeJe5cbLA/download/atduak20Cr35rOeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24089" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#427, #426, #421, #420, #397)&lt;/p&gt;</comment>
                    <comment id="24090" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;stu said: The choke point here is line 5286 of Compiler.java. At this point, we know we are in macro, but we don&apos;t know we if we have an arity problem. When the arity problem is throw, it is a plain old IllegalArgumentException. Some choices:&lt;/p&gt;

&lt;p&gt;(1) Hack: parse the exception, pull out the number, subtract 2. Yuck.&lt;/p&gt;

&lt;p&gt;(2) Make the exception smarter (subclass the exception as ArityException or some such, catch that here, subtract 2.&lt;/p&gt;

&lt;p&gt;(3) Make AFunction smarter, so that it knows if it is a macro or not (also requires change to defmacro). Then throwArity can do the right thing at the point of the problem.&lt;/p&gt;


&lt;p&gt;Option #2 feels smaller than #3, but maybe knowing when an AFunction is  AMacro will be useful elsewhere.&lt;/p&gt;</comment>
                    <comment id="24091" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;richhickey said: #2 please&lt;/p&gt;</comment>
                    <comment id="24092" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;fogus said: I agree with #2 also, but in general I think in creating a (reasonable) set of exception subclasses we could start down the path of making error reporting and handling more friendly.&lt;/p&gt;</comment>
                    <comment id="24093" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#429, #437, #397, #420)&lt;/p&gt;</comment>
                    <comment id="24094" author="importer" created="Mon, 18 Oct 2010 23:07:00 -0500"  >&lt;p&gt;mikehinchey said: [&lt;a href=&quot;file:atduak20Cr35rOeJe5cbLA&quot;&gt;file:atduak20Cr35rOeJe5cbLA&lt;/a&gt;]: fixes using Stuart&apos;s #2 choice&lt;/p&gt;</comment>
                    <comment id="25889" author="stu" created="Fri, 29 Oct 2010 10:26:25 -0500"  >&lt;p&gt;Second patch (arity-unwrapped) subsumes first, and does not return a wrapped exception. Wrapped exception would defeat the purpose of the patch, by giving REPL root-cause consumers an incorrect message.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10005" name="0397-arity-unwrapped.patch" size="6056" author="stu" created="Fri, 29 Oct 2010 10:26: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-390] sends from agent error-handlers should be allowed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-390</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently if an agent&apos;s error-handler sends to any agent, the sent action is&lt;br/&gt;
silently thrown away.  The send should instead be allowed.&lt;/p&gt;

&lt;p&gt;Originally reported here:&lt;br/&gt;
&lt;a href=&quot;http://groups.google.com/group/clojure/browse_frm/thread/c1d05bdbb50d7d28&quot;&gt;http://groups.google.com/group/clojure/browse_frm/thread/c1d05bdbb50d7d28&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13787">CLJ-390</key>
            <summary>sends from agent error-handlers should be allowed</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="chouser@n01se.net">Chouser</assignee>
                                <reporter username="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Tue, 29 Jun 2010 10:00:00 -0500</created>
                <updated>Wed, 8 Dec 2010 15:52:29 -0600</updated>
                    <resolved>Mon, 29 Nov 2010 20:42:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24062" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/390&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/390&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Allows-agent-error-handler-to-send-successfully.-Ref.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/d9EEI0G4yr36YneJe5cbLr/download/d9EEI0G4yr36YneJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/d9EEI0G4yr36YneJe5cbLr/download/d9EEI0G4yr36YneJe5cbLr&lt;/a&gt;&lt;br/&gt;
0390-agent-error-send-plus-test.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cVNaMc15Wr35VzeJe5cbLr/download/cVNaMc15Wr35VzeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cVNaMc15Wr35VzeJe5cbLr/download/cVNaMc15Wr35VzeJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24063" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;chouser@n01se.net said: [&lt;a href=&quot;file:d9EEI0G4yr36YneJe5cbLr&quot;&gt;file:d9EEI0G4yr36YneJe5cbLr&lt;/a&gt;]: Set nested to null instead of to empty vector before invoking error handler&lt;/p&gt;</comment>
                    <comment id="24064" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;richhickey said: This needs careful analysis&lt;/p&gt;</comment>
                    <comment id="24065" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;chouser@n01se.net said: When the agent&apos;s thread-local &quot;nested&quot; field is non-nil, any sends are queued instead of being sent immediately.  This is its normal state when agent actions are being executed.&lt;/p&gt;

&lt;p&gt;Another piece of thread-local state is &lt;b&gt;agent&lt;/b&gt; which is set to the current agent when an action is being executed.  This state is also checked by &apos;await&apos; so that it can throw if it&apos;s called during an agent action.&lt;/p&gt;

&lt;p&gt;I can think of two options for allowing sends from agent error handlers:&lt;/p&gt;

&lt;p&gt; A. Set &quot;nested&quot; to null before the error handler is invoked, allowing any sends from it to proceed immediately when send is called.&lt;/p&gt;

&lt;p&gt; B. Clear &quot;nested&quot; to an empty vector as it is now, but then after invoking the error handler release any newly pending sends queued by the error handler.&lt;/p&gt;

&lt;p&gt;This patch implements choice (A).  It changes the state of the agent&apos;s &quot;nested&quot; field from an empty vector to null for the period of time between when the action has terminated with an error and the time when &quot;nested&quot; is normally set to null (after the next action, if any, has been queued.  The things that happen during this time are:&lt;/p&gt;

&lt;p&gt; 1. the error handler (if any) is invoked&lt;br/&gt;
 2. the error flag is reset (if error-mode is :continue)&lt;br/&gt;
 3. the current action is popped off the agent&apos;s queue&lt;br/&gt;
 4. the next action is queued&lt;/p&gt;

&lt;p&gt;So this change allows sends from this agent during all of these steps.  It does not change &lt;b&gt;agent&lt;/b&gt;, so &apos;await&apos; is still disallowed throughout these steps.&lt;/p&gt;

&lt;p&gt;Of the 4 things done during this time period, only step 1 calls any user code in the current thread such that thread-local values would have any impact, and none of the others depend on the value of &quot;nested&quot; at all.&lt;/p&gt;

&lt;p&gt;During step 1, the user&apos;s error handler will be called with &lt;b&gt;agent&lt;/b&gt; true and nested nil, which is combination not normally seen.  The reasons that sends from inside actions are normally held until later is prevent them from happening if the action fails to &quot;commit&quot; and update the agent&apos;s value, and to promise to users that any nested actions will see the updated agent&apos;s value (or a subsequent value).  Neither of these reasons apply in this case because the state of the agent will not be updated due to the failed action, so allowing sends to proceed immediately is safe.&lt;/p&gt;</comment>
                    <comment id="24066" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;shoover said: For what it&apos;s worth, I confirm that this patch works for the situations I&apos;ve tested. My desired case of having an error handler send to a supervisor agent works great.&lt;/p&gt;

&lt;p&gt;I tried to break it by having the handler fn send to &lt;b&gt;agent&lt;/b&gt; and await &lt;b&gt;agent&lt;/b&gt;, but it all goes pretty much like you described.&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;;; Sending to *agent* from a handler works fine. Note the &lt;span class=&quot;code-keyword&quot;&gt;outer&lt;/span&gt; deref will not
;; always see the value :handled because the action that returned :handled
;; was sent from a different thread (the action thread).
(let [handler (fn [_ ex]
                (send *agent* (fn [_] :handled)))
      a (agent 42 :error-handler handler)]
  (send a (fn [_] (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (Exception. &lt;span class=&quot;code-quote&quot;&gt;&quot;bad news&quot;&lt;/span&gt;))))
  (await a)
  @a)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;await &lt;b&gt;agent&lt;/b&gt; in a handler throws an exception as expected, and it is silently eaten like any other handler exception.&lt;/p&gt;

&lt;p&gt;The weirdest case is if you mess up in the handler and send &lt;b&gt;agent&lt;/b&gt; an action that awaits &lt;b&gt;agent&lt;/b&gt; : you get an infinite loop through the handler (if error mode is :continue). I wouldn&apos;t recommend sending to &lt;b&gt;agent&lt;/b&gt; in a handler, of course, but it&apos;s possible with this patch in the same way it&apos;s possible to add a watch that performs another send to the same agent. It&apos;ll go all day.&lt;/p&gt;</comment>
                    <comment id="24067" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:cVNaMc15Wr35VzeJe5cbLr&quot;&gt;file:cVNaMc15Wr35VzeJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24068" author="importer" created="Tue, 24 Aug 2010 11:57:00 -0500"  >&lt;p&gt;stu said: I agree with Chouser&apos;s reasoning (in the comments).&lt;/p&gt;</comment>
                    <comment id="25922" author="stu" created="Fri, 5 Nov 2010 11:06:15 -0500"  >&lt;p&gt;Heisenbugs! Test no longer passing, don&apos;t have time to look at it atm. Moving back from OK to Test.&lt;/p&gt;</comment>
                    <comment id="25925" author="chouser@n01se.net" created="Sun, 7 Nov 2010 17:29:27 -0600"  >&lt;p&gt;Test appears to failing because of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-672&quot; title=&quot;*agent* is nil in action fns, regression in Clojure 1.3a3&quot;&gt;&lt;del&gt;CLJ-672&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25928" author="chouser@n01se.net" created="Mon, 8 Nov 2010 00:54:05 -0600"  >&lt;p&gt;The test added previously was failing because &amp;#42;agent&amp;#42; wasn&apos;t bound in the error handler, per &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-672&quot; title=&quot;*agent* is nil in action fns, regression in Clojure 1.3a3&quot;&gt;&lt;del&gt;CLJ-672&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This patch (0003-) subsumes the previous patches and adds a similar test that does &lt;b&gt;not&lt;/b&gt; rely on &amp;#42;agent&amp;#42; being bound.  This would have succeeded all along.  After a fix for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-672&quot; title=&quot;*agent* is nil in action fns, regression in Clojure 1.3a3&quot;&gt;&lt;del&gt;CLJ-672&lt;/del&gt;&lt;/a&gt;, both tests pass.&lt;/p&gt;

&lt;p&gt;Setting this back to Test, but it will fail unless tested after applying the patch from &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-672&quot; title=&quot;*agent* is nil in action fns, regression in Clojure 1.3a3&quot;&gt;&lt;del&gt;CLJ-672&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10016" name="0003-Allows-agent-error-handler-to-send.patch" size="3253" author="chouser@n01se.net" created="Mon, 8 Nov 2010 00:54: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-380] bit-and missing long parameters overload</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-380</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;[Updated: The new primitive support relies on a primitive bit-and operator.  As one doesn&apos;t exist, clojure functions like even? are now using reflective calls and are about 150x slower than in Clojure 1.2)&lt;/p&gt;

&lt;p&gt;JVM has a land instruction and java has &amp;amp; operator that works with longs.&lt;/p&gt;

&lt;p&gt;public static long and(long, long);&lt;br/&gt;
  Code:&lt;br/&gt;
   0:   lload_0&lt;br/&gt;
   1:   lload_2&lt;br/&gt;
   2:   land&lt;br/&gt;
   3:   lreturn&lt;/p&gt;

&lt;p&gt;The attached patch allows Clojure to take advantage of it.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13777">CLJ-380</key>
            <summary>bit-and missing long parameters overload</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="djpowell">David Powell</assignee>
                                <reporter username="djpowell">David Powell</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Jun 2010 10:40:00 -0500</created>
                <updated>Fri, 25 Feb 2011 15:06:28 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 15:06:28 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="24025" author="importer" created="Tue, 24 Aug 2010 11:41:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/380&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/380&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Added-bit-and-with-long-parameters-and-overload-reso.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dciMoWD8ir36WfeJe5cbLA/download/dciMoWD8ir36WfeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dciMoWD8ir36WfeJe5cbLA/download/dciMoWD8ir36WfeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24026" author="importer" created="Tue, 24 Aug 2010 11:41:00 -0500"  >&lt;p&gt;digash said: Just found that Rich is already taking care of this case in the num branch:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/richhickey/clojure/commit/c5d0985af6c17103eaabe523e442f14c29916266#L3R1510&quot;&gt;http://github.com/richhickey/clojure/commit/c5d0985af6c17103eaabe523e442f14c29916266#L3R1510&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The test in the patch could still be useful.&lt;/p&gt;</comment>
                    <comment id="24027" author="importer" created="Tue, 24 Aug 2010 11:41:00 -0500"  >&lt;p&gt;digash said: Is it possible to include this in 1.2? Since the num branch is not going to be included in 1.2.&lt;/p&gt;</comment>
                    <comment id="26165" author="djpowell" created="Mon, 24 Jan 2011 17:21:42 -0600"  >&lt;p&gt;The primitives work means that bit-and, when used with numeric literals, attempts to call the primitive overloads in the Numbers class.&lt;br/&gt;
As these overloads don&apos;t exist, the code makes a reflective + boxed call.  This is extremely slow compared to Clojure 1.2.&lt;/p&gt;

&lt;p&gt;Clojure 1.2.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (time (count (filter even? (range 1e6))))&lt;br/&gt;
&quot;Elapsed time: 248.719099 msecs&quot;&lt;/p&gt;

&lt;p&gt;Clojure 1.3.0-alpha4&lt;br/&gt;
user=&amp;gt; (time (count (filter even? (range 1e6))))&lt;br/&gt;
&quot;Elapsed time: 46679.133155 msecs&quot;&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/a1f0f03e11d90f59&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/a1f0f03e11d90f59&lt;/a&gt;&lt;/p&gt;
</comment>
                    <comment id="26167" author="djpowell" created="Mon, 24 Jan 2011 17:27:16 -0600"  >&lt;p&gt;Attached is a patch which adds missing numeric overloads to:&lt;/p&gt;

&lt;p&gt;and&lt;br/&gt;
andNot&lt;br/&gt;
or&lt;br/&gt;
xor&lt;br/&gt;
divide&lt;/p&gt;
</comment>
                    <comment id="26227" author="stu" created="Tue, 22 Feb 2011 18:21:57 -0600"  >&lt;p&gt;Second patch removes unnecessary overloads of andNot. Performance tested good using code below. At some point it would be good to get documentation on why some fns are inline and others are static.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def test-data (range 1 1e4))

(def fn-sources
  &apos;[(fn [a b] (bit-and a b))
    (fn [a b] (bit-and (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a) b))
    (fn [a b] (bit-and a (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b)))
    (fn [a b] (bit-and (&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)))
    (fn [a b] (bit-and-not a b))
    (fn [a b] (bit-and-not (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a) b))
    (fn [a b] (bit-and-not a (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b)))
    (fn [a b] (bit-and-not (&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)))
    (fn [a b] (bit-or a b))
    (fn [a b] (bit-or (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a) b))
    (fn [a b] (bit-or a (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b)))
    (fn [a b] (bit-or (&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)))
    (fn [a b] (bit-xor a b))
    (fn [a b] (bit-xor (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a) b))
    (fn [a b] (bit-xor a (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b)))
    (fn [a b] (bit-xor (&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)))
    (fn [a b] (/ a b))
    (fn [a b] (/ (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a) b))
    (fn [a b] (/ a (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; b)))
    (fn [a b] (/ (&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)))])

(defn time-numeric-ops
  [fn-sources]
  (doseq [source fn-sources]
    (print source &lt;span class=&quot;code-quote&quot;&gt;&quot;: &quot;&lt;/span&gt;)
    (let [f (eval source)]
      (time
       (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;
         (doall (map f test-data test-data))
         nil)))))

(time-numeric-ops fn-sources)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10092" name="0001-add-missing-overloads-for-numerics-to-prevent-major-.patch" size="2143" author="djpowell" created="Mon, 24 Jan 2011 17:27:16 -0600" />
                    <attachment id="10113" name="0380-numeric-overloads-2.patch" size="3230" author="stu" created="Tue, 22 Feb 2011 18:21: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="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-378] Set thread names on agent thread pools</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-378</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It&#65533;&#65533;&#65533;s a best practice to name the threads in an executor thread pool with a custom ThreadFactory so that the purpose of these threads is clear in thread dumps and other runtime operational tools. By default these threads are currently called something like &quot;pool-%d-thread-%d&quot;, and this is what you&#65533;&#65533;&#65533;ll see for the agent send thread pools.&lt;/p&gt;

&lt;p&gt;I created a patch to do this with thread names like:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;clojure-agent-send-pool-%d &#65533;&#65533;&#65533; should be fixed # of threads&lt;/li&gt;
	&lt;li&gt;clojure-agent-send-off-pool-%d &#65533;&#65533;&#65533; will be added and removed over time&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The patch is attached and I have a signed CA.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13775">CLJ-378</key>
            <summary>Set thread names on agent thread pools</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 9 Jun 2010 09:32:00 -0500</created>
                <updated>Tue, 12 Oct 2010 19:58:00 -0500</updated>
                    <resolved>Tue, 12 Oct 2010 19:58:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24018" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/378&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/378&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
agent-name.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bLEf-eC8Sr373-eJe5cbLA/download/bLEf-eC8Sr373-eJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bLEf-eC8Sr373-eJe5cbLA/download/bLEf-eC8Sr373-eJe5cbLA&lt;/a&gt;&lt;br/&gt;
0378-as-git-patch.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cUhT1C1uCr35jCeJe5cbLA/download/cUhT1C1uCr35jCeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cUhT1C1uCr35jCeJe5cbLA/download/cUhT1C1uCr35jCeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24019" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:cUhT1C1uCr35jCeJe5cbLA&quot;&gt;file:cUhT1C1uCr35jCeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="24020" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Second patch simply recreates first patch in the correct form. Please follow the instructions at &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt; when creating patches.&lt;/p&gt;</comment>
                    <comment id="24021" author="importer" created="Tue, 12 Oct 2010 19:58:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#276, #280, #378, #437, #448)&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-374] print/read syntax for defrecords</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-374</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="13771">CLJ-374</key>
            <summary>print/read syntax for defrecords</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Sat, 5 Jun 2010 11:53:00 -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>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="23999" author="importer" created="Tue, 24 Aug 2010 09:32:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/374&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/374&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24000" author="importer" created="Tue, 24 Aug 2010 09:32:00 -0500"  >&lt;p&gt;stu said: If we are going to use #=, then how about modify record to take an optional metadata map before the keyvals:&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 record
  &quot;Construct an instance of record-type from keyvals.

   record-type is a keyword naming the record.
   keyvals can include *any* keyword/value pairs, and
   can be preceded by an optional metadata map.&quot;
  {:added &lt;span class=&quot;code-quote&quot;&gt;&quot;1.2&quot;&lt;/span&gt;}
  [record-type &amp;amp; keyvals]
  {:pre [(keyword? record-type)]}
  (let [meta (when (map? (first keyvals)) (first keyvals))
        keyvals (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; meta (&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; keyvals) keyvals)]
    (record-implementation-detail-multimethod record-type meta (apply hash-map keyvals))))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;

and then the read syntax can be

&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
#=(record :user.Foo {:some-meta 1} :a nil :c 3)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="24001" author="importer" created="Tue, 24 Aug 2010 09:32:00 -0500"  >&lt;p&gt;richhickey said: I think you need to distinguish between print and print-dup contexts. I don&apos;t like the switch-on-type-of-first-arg in general. We don&apos;t do optional args preceding variadics. Also, normally we don&apos;t see metatadata in print unless &lt;b&gt;print-meta&lt;/b&gt; is true.&lt;/p&gt;

&lt;p&gt;I think a #= ctor call works for print-dup:&lt;/p&gt;

&lt;p&gt;#=(Foo. 1 2 3 {:my :meta} {:other :field})&lt;/p&gt;

&lt;p&gt;eliding the meta and extmap when neither is present:&lt;/p&gt;

&lt;p&gt;#(Foo. 1 2 3)&lt;/p&gt;

&lt;p&gt;not sure about ordinary print yet&lt;/p&gt;</comment>
                    <comment id="24002" author="importer" created="Tue, 24 Aug 2010 09:32:00 -0500"  >&lt;p&gt;stu said: In the above, why isn&apos;t print-dup&apos;s effect recursive, 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;#=(user.Foo 1 2 3 #=(clojure.lang.PersistentArrayMap/create {:my :meta}) 
                                 #=(clojure.lang.PersistentArrayMap/create {:other :field}))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;print-dup on maps certainly behaves that way, including nested maps.&lt;/p&gt;

&lt;p&gt;Also, isn&apos;t a print-dup version that includes metadata only correct when print-meta is false?&lt;/p&gt;</comment>
                    <comment id="24003" author="importer" created="Tue, 24 Aug 2010 09:32:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#370, #366, #374)&lt;/p&gt;</comment>
                    <comment id="26402" author="fogus" created="Fri, 29 Apr 2011 13:30:34 -0500"  >&lt;p&gt;Patch scoped to the discussion in this ticket and at &lt;a href=&quot;http://dev.clojure.org/display/design/defrecord+improvements&quot;&gt;http://dev.clojure.org/display/design/defrecord+improvements&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26403" author="fogus" created="Fri, 29 Apr 2011 13:55:46 -0500"  >&lt;p&gt;Added IRecord patch file. Sorry.&lt;/p&gt;</comment>
                    <comment id="26407" author="stu" created="Fri, 29 Apr 2011 15:14:50 -0500"  >&lt;p&gt;Using primitive type hints seems to break the map-&amp;gt;Record constructor:&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;(defrecord Bar [^&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt; a b])
(map-&amp;gt;Bar {:a 1 :b 2})
=&amp;gt; NullPointerException   clojure.lang.RT.longCast (RT.java:1008)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26409" author="stu" created="Fri, 29 Apr 2011 15:21:10 -0500"  >&lt;p&gt;The patch does not address deftype. It gets (as a freebie) all the new stuff available to arbitrary Java classes, but no create method, positional fn, etc. I think we should do deftype as a separate patch.&lt;/p&gt;</comment>
                    <comment id="26411" author="fogus" created="Fri, 29 Apr 2011 15:45:01 -0500"  >&lt;p&gt;RE: longCast&lt;/p&gt;

&lt;p&gt;I will check that out.  Thanks&lt;/p&gt;

&lt;p&gt;RE: deftype&lt;/p&gt;

&lt;p&gt;deftype does get a create and getBasis method, but the create is breaking because I am assuming a record ctor.  I can fix that if we think that types should have a create that takes a map.  &lt;/p&gt;

&lt;p&gt;(deftype T &lt;span class=&quot;error&quot;&gt;&amp;#91;a&amp;#93;&lt;/span&gt;)&lt;br/&gt;
(user.T/getBasis)&lt;br/&gt;
;=&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;a&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;(user.T/create {:a 1})&lt;br/&gt;
;; NoSuchMethodError &lt;/p&gt;

&lt;p&gt;This is because I&apos;m building a call to the record ctor that takes metadata and an extension map.  Does it make sense to generate such a create that takes a map for types? &lt;/p&gt;

&lt;p&gt;Thanks&lt;br/&gt;
:F&lt;/p&gt;</comment>
                    <comment id="26419" author="fogus" created="Thu, 5 May 2011 17:25:24 -0500"  >&lt;p&gt;minor fixes from last patch set.&lt;/p&gt;</comment>
                    <comment id="26420" author="richhickey" created="Fri, 6 May 2011 07:50:20 -0500"  >&lt;p&gt;deftypes shouldn&apos;t get any map-taking support as they are not mappy (mappish?). They should get positional support. defrecord and deftype stuff should go in together.&lt;/p&gt;</comment>
                    <comment id="26425" author="fogus" created="Tue, 10 May 2011 07:20:48 -0500"  >&lt;p&gt;Latest patch includes changes to support deftype literals and removal of RecordExpr.&lt;/p&gt;</comment>
                    <comment id="26458" author="redinger" created="Wed, 25 May 2011 14:25:25 -0500"  >&lt;p&gt;This patch has already been applied. Updating status of this ticket.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/ac1e8ad9f182dc2e8a5254f3e4b7b77c0258353d&quot;&gt;https://github.com/clojure/clojure/commit/ac1e8ad9f182dc2e8a5254f3e4b7b77c0258353d&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10221" name="CLJ-374-defrecord-literals.patch" size="37374" author="fogus" created="Tue, 10 May 2011 07:20: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>
                                                                                    <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-368] Redefining a function that uses a redifined macro, picks up old macro defintion</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-368</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Redefining a function to use an updated macro definition fails to work correctly, with the function still using the previous macro definiton.  This seems to be a regression.&lt;/p&gt;

&lt;p&gt;Test case: &lt;a href=&quot;http://gist.github.com/420007&quot;&gt;http://gist.github.com/420007&lt;/a&gt;&lt;br/&gt;
Bisection : &lt;a href=&quot;http://gist.github.com/420075&quot;&gt;http://gist.github.com/420075&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13765">CLJ-368</key>
            <summary>Redefining a function that uses a redifined macro, picks up old macro defintion</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 31 May 2010 20:58:00 -0500</created>
                <updated>Mon, 11 Oct 2010 15:25:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 15:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23973" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/368&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/368&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0368-dynamic-redef-regression-test.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aLXklKBE8r36weeJe5cbLA/download/aLXklKBE8r36weeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aLXklKBE8r36weeJe5cbLA/download/aLXklKBE8r36weeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23974" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;cgrand said: This bug is caused by top-level fns not being numbered anymore. Since their name doesn&apos;t change, the classCache in DynamicClassLoader finds the previous defintion, compares the expressions bodies (before macroexpansion) and thus concludes the cache entry is fresh and returns it.&lt;/p&gt;

&lt;p&gt;I see two potential fixes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;use a deeply macroexpanded body as the value of the cache entry, but this would require building this body &amp;#8211; however it isn&apos;t enough, see &lt;a href=&quot;http://gist.github.com/420344:&quot;&gt;http://gist.github.com/420344:&lt;/a&gt; hinting doesn&apos;t change value since it&apos;s metadata so the unhinted version keeps getting pulled from the cache. This is not an acceptable fix.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;use (wrapped) byte arrays as values (eg java.nio.ByteBuffer/wrap creates wrappers with value-based equality) but I don&apos;t know under which conditions a reload would produce two identical byte arrays &amp;#8211; experimentally, types and records Classes are pulled from the cache when reloaded but fns aren&apos;t.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="23975" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:aLXklKBE8r36weeJe5cbLA&quot;&gt;file:aLXklKBE8r36weeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23976" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: This issue was already fixed by &lt;a href=&quot;http://github.com/richhickey/clojure/commit/f47b3d6f028e0370c495383731a449092d0ae451&quot;&gt;http://github.com/richhickey/clojure/commit/f47b3d6f028e0370c495383731a449092d0ae451&lt;/a&gt;, but I wanted to add a regression test.&lt;/p&gt;

&lt;p&gt;Also: the file this regression test lives in is not in the test suite list yet &amp;#8211; I already have a commit fixing that queued up as part of #359.&lt;/p&gt;</comment>
                    <comment id="23977" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: Patch is just a regression test for fix already made.&lt;/p&gt;</comment>
                    <comment id="23978" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&lt;/p&gt;</comment>
                    <comment id="23979" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&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-364] Make PersistentQueue Counted</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-364</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, calling count() on PersistentQueue can take a long time for large queues. PersistentQueue should implement the Counted interface and provide constant time counting by maintaining a count of the number of elements internally.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13761">CLJ-364</key>
            <summary>Make PersistentQueue Counted</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="importer">Assembla Importer</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 May 2010 22:37:00 -0500</created>
                <updated>Fri, 15 Oct 2010 13:30:00 -0500</updated>
                    <resolved>Fri, 15 Oct 2010 13:30:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23959" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/364&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/364&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
persistent-queue-counted.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dNDFA4ADar352MeJe5cbCb/download/dNDFA4ADar352MeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dNDFA4ADar352MeJe5cbCb/download/dNDFA4ADar352MeJe5cbCb&lt;/a&gt;&lt;br/&gt;
0364-count-pq-with-tests.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aGuueU15Gr347DeJe5cbLA/download/aGuueU15Gr347DeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aGuueU15Gr347DeJe5cbLA/download/aGuueU15Gr347DeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23960" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;importer said: [&lt;a href=&quot;file:dNDFA4ADar352MeJe5cbCb&quot;&gt;file:dNDFA4ADar352MeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23961" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;digash said: * This also affects agents performance.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;ul&gt;
		&lt;li&gt;Agents use count method in en-queuing methods.&lt;/li&gt;
		&lt;li&gt;It causes large slow down on sent to agent when queue size is large.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="23962" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:aGuueU15Gr347DeJe5cbLA&quot;&gt;file:aGuueU15Gr347DeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23963" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;stu said: Second patch subsumes first, adds tests&lt;/p&gt;</comment>
                    <comment id="23964" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#263, #305, #315, #364, #453)&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-336] top-level nav for clojure.org</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-336</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="13733">CLJ-336</key>
            <summary>top-level nav for clojure.org</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 4 May 2010 11:20:00 -0500</created>
                <updated>Mon, 15 Nov 2010 12:49:00 -0600</updated>
                    <resolved>Mon, 1 Nov 2010 08:43:11 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23844" author="importer" created="Tue, 24 Aug 2010 07:52:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/336&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/336&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25914" author="stu" created="Mon, 1 Nov 2010 08:43:11 -0500"  >&lt;p&gt;Alex Miller is helping out with clojure.org edits and has added items that were missing from the left nav.&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-320] alias function gives confusing message if using unknown namespace</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-320</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This is really a request for improved error handling.  If you use (alias) with a namespace that is not known it throws an NPE with imho a confusing error message.  &lt;/p&gt;

&lt;p&gt;Example: &lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (alias &apos;R &apos;S) 
java.lang.NullPointerException: Expecting Symbol + Namespace (NO_SOURCE_FILE:0)
user=&amp;gt; (.printStackTrace *e)
nil
user=&amp;gt; java.lang.NullPointerException: Expecting Symbol + Namespace (NO_SOURCE_FILE:0)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5348)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5300)
        at clojure.core$eval__4281.invoke(core.clj:2135)
        at clojure.main$repl__6358$read_eval_print__6366.invoke(main.clj:183)
        at clojure.main$repl__6358.doInvoke(main.clj:200)
        at clojure.lang.RestFn.invoke(RestFn.java:422)
        at clojure.main$repl_opt__6392.invoke(main.clj:254)
        at clojure.main$main__6418.doInvoke(main.clj:347)
        at clojure.lang.RestFn.invoke(RestFn.java:398)
        at clojure.lang.Var.invoke(Var.java:361)
        at clojure.lang.AFn.applyToHelper(AFn.java:161)
        at clojure.lang.Var.applyTo(Var.java:482)
        at clojure.main.main(main.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at jline.ConsoleRunner.main(ConsoleRunner.java:69)
Caused by: java.lang.NullPointerException: Expecting Symbol + Namespace
        at clojure.lang.Namespace.addAlias(Namespace.java:184)
        at clojure.core$alias__4566.invoke(core.clj:2892)
        at user$eval__11.invoke(NO_SOURCE_FILE:7)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5332)
        ... 17 more
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;

And the clj:

&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;(defn alias
  &quot;Add an alias in the current namespace to another
  namespace. Arguments are two symbols: the alias to be used, and
  the symbolic name of the target namespace. Use :as in the ns macro in preference
  to calling &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; directly.&quot;
  [alias namespace-sym]
  (.addAlias *ns* alias (find-ns namespace-sym)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Clearly, the clojure is doing find-ns and the namespace is not known so it passes a null down.  Seems like the code in either the clj or java level could say &quot;Hey dummy, you used an unknown namespace&quot; instead of &quot;Expecting Symbol + Namespace&quot;.  Maybe this would be useful as an additional sentence in the alias doc string too.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13717">CLJ-320</key>
            <summary>alias function gives confusing message if using unknown namespace</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>Wed, 28 Apr 2010 13:32:00 -0500</created>
                <updated>Wed, 8 Dec 2010 15:52:29 -0600</updated>
                    <resolved>Mon, 29 Nov 2010 20:42:57 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23765" author="importer" created="Tue, 26 Oct 2010 23:07:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/320&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/320&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23766" author="importer" created="Tue, 26 Oct 2010 23:07:00 -0500"  >&lt;p&gt;aaron said: Tried to submit a patch but keep getting 500 errors on assembla.  I&apos;ll try again later, but i&apos;ll paste the patch in here so it is somewhere else.&lt;/p&gt;


&lt;p&gt;From 32c32d65ec43598f36872a742bdebec5907d17d7 Mon Sep 17 00:00:00 2001&lt;br/&gt;
From: Aaron Bedra &amp;lt;aaron@aaronbedra.com&amp;gt;&lt;br/&gt;
Date: Tue, 26 Oct 2010 23:34:55 -0400&lt;br/&gt;
Subject: &lt;span class=&quot;error&quot;&gt;&amp;#91;PATCH&amp;#93;&lt;/span&gt; clarifying error message on alias&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
 src/jvm/clojure/lang/Namespace.java |    9 +++++++--&lt;br/&gt;
 1 files changed, 7 insertions&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/add.gif&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;, 2 deletions&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/forbidden.gif&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;diff --git a/src/jvm/clojure/lang/Namespace.java b/src/jvm/clojure/lang/Namespace.java&lt;br/&gt;
index 1936973..87a9082 100644&lt;br/&gt;
&amp;#8212; a/src/jvm/clojure/lang/Namespace.java&lt;br/&gt;
+++ b/src/jvm/clojure/lang/Namespace.java&lt;br/&gt;
@@ -210,8 +210,13 @@ public Namespace lookupAlias(Symbol alias){&lt;br/&gt;
 }&lt;/p&gt;

&lt;p&gt; public void addAlias(Symbol alias, Namespace ns){&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;if (alias == null || ns == null)&lt;/li&gt;
	&lt;li&gt;throw new NullPointerException(&quot;Expecting Symbol + Namespace&quot;);&lt;br/&gt;
+        if (alias == null &amp;amp;&amp;amp; ns == null)&lt;br/&gt;
+            throw new NullPointerException(&quot;Received unknown alias and namespace&quot;);&lt;br/&gt;
+        else if (ns == null)&lt;br/&gt;
+            throw new NullPointerException(&quot;Received unknown namespace&quot;);&lt;br/&gt;
+        else if (alias == null)&lt;br/&gt;
+            throw new NullPointerException(&quot;Received unknown alias&quot;); &lt;br/&gt;
+&lt;br/&gt;
  IPersistentMap map = getAliases();&lt;br/&gt;
  while(!map.containsKey(alias))&lt;br/&gt;
   {
	&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
		&lt;li&gt;&lt;br/&gt;
1.7.3.2&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="25899" author="stu" created="Fri, 29 Oct 2010 15:20:10 -0500"  >&lt;p&gt;If we are going to the trouble of improving the error message, then we should have the error message refer to the arg that caused the problem. &lt;/p&gt;

&lt;p&gt;By handling the error in the internal method &lt;tt&gt;addAlias&lt;/tt&gt; instead of the API fn &lt;tt&gt;alias&lt;/tt&gt;, you lose the value passed in, and cannot say &quot;You said foo, but foo isn&apos;t a namespace.&quot;&lt;/p&gt;

&lt;p&gt;Patch that adds error handling to alias in core.clj would be welcome.&lt;/p&gt;</comment>
                    <comment id="25909" author="davidrupp" created="Sat, 30 Oct 2010 15:43:36 -0500"  >&lt;p&gt;I had some private correspondence with Aaron about this attempt. As he rightly says, it does handle only the case where the aliased namespace is nil, not when the alias itself is nil, but I think that is by far the most likely scenario. On the plus side, it does so in core.clj using existing API. Maybe a good starting point?&lt;/p&gt;</comment>
                    <comment id="25935" author="aaron" created="Fri, 12 Nov 2010 13:15:54 -0600"  >&lt;p&gt;After another review of David&apos;s patch I think it is the way to go here.  Please use his patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10000" name="0320-alias-error-message-clarification.diff" size="1162" author="aaron" created="Wed, 27 Oct 2010 16:36:09 -0500" />
                    <attachment id="10008" name="320_davidrupp.diff" size="1393" author="davidrupp" created="Sat, 30 Oct 2010 15:43:36 -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>aaron</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-315] Add support for running -main namespace from clojure.main without AOT</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-315</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This patch allows clojure.main to accept an argument pointing to a namespace to look for a -main function in. This allows users to write -main functions that will work the same whether the code is AOT-compiled for use in an executable jar or  just run from source.&lt;/p&gt;

&lt;p&gt;Discussed on the mailing list: &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/bcf3c7c0e002601e&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/bcf3c7c0e002601e&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13712">CLJ-315</key>
            <summary>Add support for running -main namespace from clojure.main without AOT</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Sat, 24 Apr 2010 09:04:00 -0500</created>
                <updated>Fri, 15 Oct 2010 04:30:00 -0500</updated>
                    <resolved>Fri, 15 Oct 2010 04:30:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23731" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/315&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/315&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Add-support-for-running-main-namespaces-from-clojure.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/a4lY7et7Sr34T_eJe5dVir/download/a4lY7et7Sr34T_eJe5dVir&quot;&gt;https://www.assembla.com/spaces/clojure/documents/a4lY7et7Sr34T_eJe5dVir/download/a4lY7et7Sr34T_eJe5dVir&lt;/a&gt;&lt;br/&gt;
0002-Add-support-for-running-main-namespaces-from-clojure.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/azCC8mvcmr35JueJe5cbLA/download/azCC8mvcmr35JueJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/azCC8mvcmr35JueJe5cbLA/download/azCC8mvcmr35JueJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23732" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;technomancy said: [&lt;a href=&quot;file:a4lY7et7Sr34T_eJe5dVir&quot;&gt;file:a4lY7et7Sr34T_eJe5dVir&lt;/a&gt;]: Patch to provide above functionality&lt;/p&gt;</comment>
                    <comment id="23733" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;scgilardi said: I like the idea and the code and I&apos;d be happy to see this added to clojure.main. I&apos;ll test this evening and comment again.&lt;/p&gt;</comment>
                    <comment id="23734" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:azCC8mvcmr35JueJe5cbLA&quot;&gt;file:azCC8mvcmr35JueJe5cbLA&lt;/a&gt;]: updated patch with minor doc changes&lt;/p&gt;</comment>
                    <comment id="23735" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;scgilardi said: I tested Phil&apos;s patch and found it to work well. I made some small changes to the documentation strings and the order of function definitions in the source file. I&apos;ve attached my revised patch (which includes Phil&apos;s as a separate commit).&lt;/p&gt;

&lt;p&gt;I think Clojure users will find this a valuable addition and I think it would be a good idea to include it in 1.2 if possible.&lt;/p&gt;</comment>
                    <comment id="23736" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;technomancy said: Steve&apos;s changes make sense. It would be great if this could be merged for the 1.2 RC.&lt;/p&gt;</comment>
                    <comment id="23737" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;technomancy said: Any chance we could move this forward? Considering Steve is the original author of clojure.main, I think it makes sense to apply his patch.&lt;/p&gt;</comment>
                    <comment id="23738" author="importer" created="Fri, 15 Oct 2010 04:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#263, #305, #315, #364, #453)&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-305] *out* has a misleading docstring</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-305</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The docstring for &lt;tt&gt;&lt;b&gt;out&lt;/b&gt;&lt;/tt&gt; reads:&lt;/p&gt;

&lt;p&gt;Defaults to System/out&lt;/p&gt;

&lt;p&gt;Like &lt;tt&gt;&lt;b&gt;in&lt;/b&gt;&lt;/tt&gt;, it should read something like:&lt;/p&gt;

&lt;p&gt;Defaults to System/out, wrapped in an OutputStreamWriter&lt;/p&gt;</description>
                <environment></environment>
            <key id="13702">CLJ-305</key>
            <summary>*out* has a misleading docstring</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 21 Apr 2010 00:50:00 -0500</created>
                <updated>Fri, 15 Oct 2010 13:30:00 -0500</updated>
                    <resolved>Fri, 15 Oct 2010 13:30:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23673" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/305&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/305&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
out_docstring.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aT8Ql0tm8r35jXeJe5cbCb/download/aT8Ql0tm8r35jXeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aT8Ql0tm8r35jXeJe5cbCb/download/aT8Ql0tm8r35jXeJe5cbCb&lt;/a&gt;&lt;br/&gt;
0305-out-docstring-resolved.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cS--Gg16Or36XAeJe5cbLA/download/cS--Gg16Or36XAeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cS--Gg16Or36XAeJe5cbLA/download/cS--Gg16Or36XAeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23674" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:cS--Gg16Or36XAeJe5cbLA&quot;&gt;file:cS--Gg16Or36XAeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23675" author="importer" created="Fri, 15 Oct 2010 13:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#263, #305, #315, #364, #453)&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-300] newline should output platform-specific newline sequence</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-300</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(newline), and (println) currently output \n as the newline sequence, even on Windows, where \r\n is the newline sequence.&lt;br/&gt;
These functions should output the platform specific newline sequence.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13697">CLJ-300</key>
            <summary>newline should output platform-specific newline sequence</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Sat, 17 Apr 2010 11:15:00 -0500</created>
                <updated>Fri, 17 Dec 2010 16:11:24 -0600</updated>
                    <resolved>Fri, 17 Dec 2010 16:11:23 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="23646" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/300&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/300&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-fix-newline-to-use-newline-sequence-appropriate-for-.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/agy8tGsJqr35CCeJe5aVNr/download/agy8tGsJqr35CCeJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/agy8tGsJqr35CCeJe5aVNr/download/agy8tGsJqr35CCeJe5aVNr&lt;/a&gt;&lt;br/&gt;
0300-newline-platform-default.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bn-GzURhKr34gXeJe5cbCb/download/bn-GzURhKr34gXeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bn-GzURhKr34gXeJe5cbCb/download/bn-GzURhKr34gXeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23647" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;rnewman said: It might be nice, then, to introduce &apos;newln&apos; and &apos;newline&apos;, with the former doing platform-specific line breaks, and the latter printing the newline character.&lt;/p&gt;</comment>
                    <comment id="23648" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;djpowell said: If you want an explicit line feed character, then you&apos;re probably best just printing \newline explicitly.  In Java out.newline(), and out.println() always use platform specific newlines.  Also, in C, printf(&quot;\n&quot;) is defined to output the platform specific newline to text streams.&lt;/p&gt;

&lt;p&gt;println and friends operate on characters rather than bytes, so I think it makes sense for you to get newline translation in addition to character encoding.&lt;/p&gt;

&lt;p&gt;Also the patch attached allows an alternative line-separator to be dynamically bound, should you need to write files for other platforms.&lt;/p&gt;</comment>
                    <comment id="23649" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;stu said: This seems reasonable, but I don&apos;t live on Windows. Can you add a pointer to list or IRC discussion and re-set this ticket to test?&lt;/p&gt;

&lt;p&gt;In particular I would like to see discussion of (1) whether any existing code might depend on the current behavior and (2) dynamic binding vs. explicit argument to bypass platform behavior.&lt;/p&gt;</comment>
                    <comment id="23650" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;djpowell said: Started discussion here:&lt;br/&gt;
&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/70f2945110f209e1#&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/70f2945110f209e1#&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don&apos;t think there is much point in an explicit parameter to newline - if you want to be that specific, you may as well use (print &quot;\r\n&quot;)?&lt;/p&gt;

&lt;p&gt;But it is probably reasonable to want non-platform newlines occasionally by dynamic binding, eg to interact with swank (which prefers \n), or HTTP and MIME which prefer \r\n.&lt;/p&gt;</comment>
                    <comment id="23651" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;stu said: 1. Agree that a specific override parameter for newline is bad &amp;#8211; if you want to do something specific, just do it.&lt;/p&gt;

&lt;p&gt;2. But by the same token, I would rather not introduce a new bindable var. I would just change newline to always print the result of (System/getProperty &quot;line.separator&quot;). Not totally sure about this, though. What do others think?&lt;/p&gt;</comment>
                    <comment id="23652" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:bn-GzURhKr34gXeJe5cbCb&quot;&gt;file:bn-GzURhKr34gXeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23653" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;stu said: Second patch wins, per unanimous agreement on dev list at &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/4f1812a1f96a3347&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/4f1812a1f96a3347&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="23654" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;richhickey said: I don&apos;t think we should be looking up a system property on every call to newline&lt;/p&gt;</comment>
                    <comment id="23655" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;richhickey said: Also, what is the relationship between (newline) and \newline ?&lt;/p&gt;</comment>
                    <comment id="23656" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;djpowell said: Re: calling a system property on every call&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;thinking back, that is probably one of the reasons that I made this a dynamic var in the original version of my patch.  I agree, it doesn&apos;t seem elegant to keep checking a system property.  We might be better using a dynamic var, even if we just keep the var private for now if there is any concern about not wanting to support rebindng.  I assume that a dynamic var is faster than a system property?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Re: the relationship between newline and \newline&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;(newline) outputs the platform dependent newline sequence.  It works like System.out.println() in Java, or Console.WriteLine() in C#.  Note that (println) and similar clojure functions call newline to output line endings.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;\newline is simply the constant value of the ASCII 0x0a linefeed character.  This is the same semantics as &quot;\n&quot; in Java and C#.  Note that this is different to stdio in C where &quot;\n&quot; has different semantics depending on whether the stream that it is written to was opened in text or binary mode.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="23657" author="importer" created="Tue, 24 Aug 2010 10:33:00 -0500"  >&lt;p&gt;richhickey said: We can cache the property without a dynamic var and all that that implies&lt;/p&gt;</comment>
                    <comment id="25897" author="stu" created="Fri, 29 Oct 2010 13:13:04 -0500"  >&lt;p&gt;After sleeping on it (in a hammock), I still think that respecting the Java default is the way to go. If you want something different, it is easy enough to do:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;if you want only a single newline, print &lt;tt&gt;\newline&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;if you want something else, then there is no precedent for it in Java or Clojure, so roll-your-own.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The most recent patch (0300-newline-resolved) does this, but breaks some tests of cl_format. Soliciting feeback from Tom Faulhaber before pushing this to screened.&lt;/p&gt;</comment>
                    <comment id="25901" author="tomfaulhaber" created="Fri, 29 Oct 2010 16:59:33 -0500"  >&lt;p&gt;From my email to Stu:&lt;/p&gt;

&lt;p&gt;I think that cl-format &lt;b&gt;should&lt;/b&gt; emit platform specific newlines (this is consistent with the recommendation in CLtL2, section 2.2.2) when confronted the ~% directive. I suspect that that&apos;s where the tests are failing. CLtL2 also specifies that \newline will do the same thing, but I assume that we&apos;re not going there.&lt;/p&gt;

&lt;p&gt;I&apos;ll try to get you an extended patch with improved tests over the weekend.&lt;/p&gt;
</comment>
                    <comment id="25918" author="tomfaulhaber" created="Thu, 4 Nov 2010 23:39:29 -0500"  >&lt;p&gt;This patch includes pprint/cl-format in the change and fixes all the tests so they can run on either Unix or Windows.It replaces (and includes/corrects) previous patches. &lt;/p&gt;</comment>
                    <comment id="25919" author="tomfaulhaber" created="Thu, 4 Nov 2010 23:42:43 -0500"  >&lt;p&gt;OK, this should be ready to go.&lt;/p&gt;</comment>
                    <comment id="25956" author="djpowell" created="Thu, 25 Nov 2010 10:13:59 -0600"  >&lt;p&gt;I think it would be worth caching the value of the system property in a private def.  System.getProperties invokes synchronisation, security managers, and other heavy-weight things.&lt;/p&gt;</comment>
                    <comment id="25975" author="stu" created="Mon, 29 Nov 2010 08:42:42 -0600"  >&lt;p&gt;Two questions about avoiding the system property lookup:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Should a cached value be a public def, a private def, or just a closure?&lt;/li&gt;
	&lt;li&gt;The JDK implementation caches in a private field, but they use a privileged action and a sun-specific class to request the property! Can we just do a simple getProperty?&lt;/li&gt;
&lt;/ol&gt;
</comment>
                    <comment id="26000" author="richhickey" created="Fri, 3 Dec 2010 12:00:07 -0600"  >&lt;p&gt;1) private def&lt;br/&gt;
2) Yes&lt;/p&gt;</comment>
                    <comment id="26041" author="stu" created="Fri, 17 Dec 2010 10:02:53 -0600"  >&lt;p&gt;Dec 17 patch addresses all comments, and includes cleanup of test helpers (coalesce to top of test hieararchy so that committers can find them)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10054" name="0300-newline-local-var-6-commits.patch" size="27577" author="stu" created="Fri, 17 Dec 2010 10:02:53 -0600" />
                    <attachment id="10007" name="0300-newline-resolved.patch" size="885" author="stu" created="Fri, 29 Oct 2010 13:13:28 -0500" />
                    <attachment id="10012" name="0300-newline-with-pprint-and-tests.patch" size="15847" author="tomfaulhaber" created="Thu, 4 Nov 2010 23:39: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-292] LazySeq.sval() nests RuntimeExceptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-292</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When evaluating a LazySeq, if an exception occurs it gets wrapped in a RuntimeException and is thrown.  Unfortunately, the logic does not differentiate between a RuntimeException and a checked exception.  This has what I believe are two unintended side effects.&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;If a function throws a RuntimeException, such as an IllegalArgumentException, it gets wrapped in a RuntimeException unnecessarily.  So, if I am expecting an IllegalArgumentException (as in a test), I will unexpectedly get a RuntimeException instead.&lt;/li&gt;
	&lt;li&gt;When evaluating nested lazy sequences, if an error occurs, the root exception is wrapped over and over again as the exception winds its way up the stack.   In a recent project, this meant having extremely long stack traces that include a half dozen nested RuntimeExceptions.  These just get in the way of getting to the root cause.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Both of these scenarios are illustrated in the attached file.&lt;/p&gt;

&lt;p&gt;My proposed solution is fairly simple:  Instead of indiscriminately wrapping every exceptions a RuntimeException, simply rethrow any RuntimeException.  As a result, any RuntimeException will simply wind its way back up the stack with no wrapping, and checked exceptions will only be wrapped once.  This should make debugging Clojure programs slightly easier as the resulting stack trace will not include as much irrelevant information.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13689">CLJ-292</key>
            <summary>LazySeq.sval() nests RuntimeExceptions</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="dsg">Daniel Solano G&#243;mez</reporter>
                        <labels>
                    </labels>
                <created>Thu, 8 Apr 2010 17:25:00 -0500</created>
                <updated>Wed, 8 Dec 2010 15:50:13 -0600</updated>
                    <resolved>Wed, 8 Dec 2010 15:50:13 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23618" author="importer" created="Tue, 28 Sep 2010 16:56:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/292&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/292&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
wrapped_exception.clj - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/d7u-xuqYir34eneJe5avMc/download/d7u-xuqYir34eneJe5avMc&quot;&gt;https://www.assembla.com/spaces/clojure/documents/d7u-xuqYir34eneJe5avMc/download/d7u-xuqYir34eneJe5avMc&lt;/a&gt;&lt;br/&gt;
fix-292.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/blThXoqYur35a4eJe5afGb/download/blThXoqYur35a4eJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/blThXoqYur35a4eJe5afGb/download/blThXoqYur35a4eJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23619" author="importer" created="Tue, 28 Sep 2010 16:56:00 -0500"  >&lt;p&gt;dsg said: [&lt;a href=&quot;file:blThXoqYur35a4eJe5afGb&quot;&gt;file:blThXoqYur35a4eJe5afGb&lt;/a&gt;]: Proposed fix&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-286] *out* being used as java.io.PrintWriter</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-286</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There seem to be several places in clojure/contrib where &lt;b&gt;out&lt;/b&gt; is being used as a java.io.PrintWriter, despite being documented as of type java.io.Writer&lt;br/&gt;
Examples are: &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;The reflection warnings from the compiler&lt;/li&gt;
	&lt;li&gt;Exception printouts from contrib.sql&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This causes very confusing errors, when &lt;b&gt;out&lt;/b&gt; isn&apos;t actually a PrintWriter, for example in a swank repl where it is a StringWriter.&lt;/p&gt;

&lt;p&gt;I&apos;ve created a patch for the reflection warnings, but can&apos;t submit it here because of political issues.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13683">CLJ-286</key>
            <summary>*out* being used as java.io.PrintWriter</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 29 Mar 2010 16:37:00 -0500</created>
                <updated>Thu, 14 Oct 2010 14:27:00 -0500</updated>
                    <resolved>Thu, 14 Oct 2010 14:27:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23589" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/286&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/286&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-fix-clojure.main-to-not-assume-that-err-is-a-PrintWr.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cEQbXEuiar367beJe5d-aX/download/cEQbXEuiar367beJe5d-aX&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cEQbXEuiar367beJe5d-aX/download/cEQbXEuiar367beJe5d-aX&lt;/a&gt;&lt;br/&gt;
0286-out-writer-and-better-pst.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b4nAPA16Gr34ZzeJe5cbLA/download/b4nAPA16Gr34ZzeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b4nAPA16Gr34ZzeJe5cbLA/download/b4nAPA16Gr34ZzeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23590" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;rnewman said: See&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.assembla.com/spaces/clojure-contrib/tickets/55-clojure-contrib-sql-expects-*err*-to-be-a-printwriter&quot;&gt;https://www.assembla.com/spaces/clojure-contrib/tickets/55-clojure-contrib-sql-expects-*err*-to-be-a-printwriter&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;and the associated discussion on the group.&lt;/p&gt;


&lt;p&gt;Clojure&apos;s &lt;b&gt;out&lt;/b&gt; is actually intended to be a PrintWriter; it&apos;s a documentation issue.&lt;/p&gt;</comment>
                    <comment id="23591" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;djpowell said: [&lt;a href=&quot;file:cEQbXEuiar367beJe5d-aX&quot;&gt;file:cEQbXEuiar367beJe5d-aX&lt;/a&gt;]: Fix for related printwriter issue&lt;/p&gt;</comment>
                    <comment id="23592" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;djpowell said: There was also some discussion that &lt;b&gt;out&lt;/b&gt; should not be assumed to be a PrintWriter:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://groups.google.co.uk/group/clojure-dev/browse_thread/thread/99aa2b3263a0b374?hl=en&quot;&gt;http://groups.google.co.uk/group/clojure-dev/browse_thread/thread/99aa2b3263a0b374?hl=en&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&apos;ve attached a patch for the related issue of &lt;b&gt;err&lt;/b&gt; being assumed to be a PrintWriter.  I think this is the only place in clojure itself, although there are other places in contrib.&lt;/p&gt;</comment>
                    <comment id="23593" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:b4nAPA16Gr34ZzeJe5cbLA&quot;&gt;file:b4nAPA16Gr34ZzeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23594" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;stu said: Second patch subsumes first, plus two additions&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;applies the same fix to the new pst function&lt;/li&gt;
	&lt;li&gt;improves usability of pst. pst&apos;s defaulting for the single-arity case was the opposite of what I expected, and the resulting error message is spectacularly confusing. Since the defaulting could trivially be extended to meet my expectations (pass an exception) without breaking the existing (pass a depth), I made it support both.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I don&apos;t like binding &lt;b&gt;out&lt;/b&gt; to &lt;b&gt;err&lt;/b&gt;, but the entire print plumbing drives you in this direction.&lt;/p&gt;</comment>
                    <comment id="23595" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#182, #286)&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-285] Make it easier to discover the source of compiler exceptions when two files have the same name in different directories</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-285</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Compiler exceptions only print the source name of exceptions, not the path. If you have a source tree with the files a/b/foo.clj and c/d/foo.clj, you&apos;ll get error messages like Error: no such namespace (foo.clj: 100). The attached patch modifies Compiler.java to print SOURCE_PATH rather than SOURCE in several cases.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13682">CLJ-285</key>
            <summary>Make it easier to discover the source of compiler exceptions when two files have the same name in different directories</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="importer">Assembla Importer</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Sat, 27 Mar 2010 00:29:00 -0500</created>
                <updated>Mon, 11 Oct 2010 07:25:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 07:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23584" author="importer" created="Mon, 11 Oct 2010 07:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/285&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/285&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Print-SOURCE_PATH-rather-than-SOURCE-on-exception-so.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/c2LmVioC4r35oMeJe5d-aX/download/c2LmVioC4r35oMeJe5d-aX&quot;&gt;https://www.assembla.com/spaces/clojure/documents/c2LmVioC4r35oMeJe5d-aX/download/c2LmVioC4r35oMeJe5d-aX&lt;/a&gt;&lt;br/&gt;
0285-better-compiler-namespaces-resolved.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aS2y5uZxCr37VFeJe5cbCb/download/aS2y5uZxCr37VFeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aS2y5uZxCr37VFeJe5cbCb/download/aS2y5uZxCr37VFeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23585" author="importer" created="Mon, 11 Oct 2010 07:25:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:aS2y5uZxCr37VFeJe5cbCb&quot;&gt;file:aS2y5uZxCr37VFeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23586" author="importer" created="Mon, 11 Oct 2010 07:25:00 -0500"  >&lt;p&gt;stu said: second patch subsumes first, updated to work on current master&lt;/p&gt;</comment>
                    <comment id="23587" author="importer" created="Mon, 11 Oct 2010 07:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&lt;/p&gt;</comment>
                    <comment id="23588" author="importer" created="Mon, 11 Oct 2010 07:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&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-282] Replace references to duck-streams in clojure.test comments to io</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-282</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;duck-streams was renamed to io back in February, but the references in clojure.test have not been updated. Attached is a patch with this simple fix.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13679">CLJ-282</key>
            <summary>Replace references to duck-streams in clojure.test comments to io</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 15 Mar 2010 00:20:00 -0500</created>
                <updated>Mon, 11 Oct 2010 08:37:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 08:37:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23575" author="importer" created="Mon, 11 Oct 2010 08:37:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/282&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/282&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Replaced-references-to-duck-streams-in-clojure.test-.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/djrTIel_Or3427eJe5aVNr/download/djrTIel_Or3427eJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/djrTIel_Or3427eJe5aVNr/download/djrTIel_Or3427eJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-280] def should support an optional doc-string</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-280</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;To be more consistent across all &quot;operators that introduce names&quot;, def should support an optional docstring after the name.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13677">CLJ-280</key>
            <summary>def should support an optional doc-string</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 11 Mar 2010 08:17:00 -0600</created>
                <updated>Fri, 28 Jan 2011 15:02:08 -0600</updated>
                    <resolved>Tue, 12 Oct 2010 18:58:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="23549" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/280&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/280&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-add-docstring-support-to-def.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cwJXMqr-Kr35PieJe5aVNr/download/cwJXMqr-Kr35PieJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cwJXMqr-Kr35PieJe5aVNr/download/cwJXMqr-Kr35PieJe5aVNr&lt;/a&gt;&lt;br/&gt;
0280-def-docstring-resolved.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bOM0ly1umr36tseJe5cbLA/download/bOM0ly1umr36tseJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bOM0ly1umr36tseJe5cbLA/download/bOM0ly1umr36tseJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23550" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;bsteuber said: [&lt;a href=&quot;file:cwJXMqr-Kr35PieJe5aVNr&quot;&gt;file:cwJXMqr-Kr35PieJe5aVNr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23551" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;bsteuber said: Contributor Agreement coming soon..&lt;/p&gt;</comment>
                    <comment id="23552" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;bsteuber said: Now it arrived&lt;/p&gt;</comment>
                    <comment id="23553" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:bOM0ly1umr36tseJe5cbLA&quot;&gt;file:bOM0ly1umr36tseJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23554" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;stu said: Second patch subsumes first and adds some minor cleanup.&lt;/p&gt;</comment>
                    <comment id="23555" author="importer" created="Tue, 12 Oct 2010 18:58:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#276, #280, #378, #437, #448)&lt;/p&gt;</comment>
                    <comment id="26157" author="bsteuber" created="Sat, 22 Jan 2011 09:50:56 -0600"  >&lt;p&gt;In my initial patch, I forgot to update clojure.repl to have (doc def) mention the optional docstring. I&apos;ve written a patch for this small doc update, but it seems I can&apos;t upload it anymore in a closed issue. Should I just mail it to someone?&lt;/p&gt;</comment>
                    <comment id="26183" author="stu" created="Fri, 28 Jan 2011 09:07:42 -0600"  >&lt;p&gt;I made this change before seeing your comment. &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="26198" author="bsteuber" created="Fri, 28 Jan 2011 15:02:08 -0600"  >&lt;p&gt;I see - funny coincedence &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;br/&gt;
My patch had the additional sentence&lt;/p&gt;

&lt;p&gt;&quot;An optional documentation string can be supplied (only when init is given, too).&quot;&lt;/p&gt;

&lt;p&gt;at the end of the documentation to be clear about what happens when only one of init and doc is given, but I&apos;m not sure this really is necessary.&lt;/p&gt;

&lt;p&gt;Loved your book by the way &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_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-278] replicate could be marked deprecated</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-278</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;replicate has become unnecessary, as repeat is exactly similar when called with two arguments.&lt;br/&gt;
Therefore, it might be marked deprecated.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13675">CLJ-278</key>
            <summary>replicate could be marked deprecated</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Sat, 6 Mar 2010 18:08:00 -0600</created>
                <updated>Mon, 11 Oct 2010 09:25:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 09:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23542" author="importer" created="Mon, 11 Oct 2010 09:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/278&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/278&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-mark-replicate-deprecated-in-favour-of-repeat.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aMFhfqxiyr35m6eJe5cbCb/download/aMFhfqxiyr35m6eJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aMFhfqxiyr35m6eJe5cbCb/download/aMFhfqxiyr35m6eJe5cbCb&lt;/a&gt;&lt;br/&gt;
0278_deprecate_replicate_fix.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/beZ65sZq8r37PweJe5cbLA/download/beZ65sZq8r37PweJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/beZ65sZq8r37PweJe5cbLA/download/beZ65sZq8r37PweJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23543" author="importer" created="Mon, 11 Oct 2010 09:25:00 -0500"  >&lt;p&gt;bsteuber said: [&lt;a href=&quot;file:aMFhfqxiyr35m6eJe5cbCb&quot;&gt;file:aMFhfqxiyr35m6eJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23544" author="importer" created="Mon, 11 Oct 2010 09:25:00 -0500"  >&lt;p&gt;aaron said: This patch does not cleanly apply on the current master.  I am attaching a new patch that gives credit and applies cleanly.&lt;/p&gt;</comment>
                    <comment id="23545" author="importer" created="Mon, 11 Oct 2010 09:25:00 -0500"  >&lt;p&gt;aaron said: [&lt;a href=&quot;file:beZ65sZq8r37PweJe5cbLA&quot;&gt;file:beZ65sZq8r37PweJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23546" author="importer" created="Mon, 11 Oct 2010 09:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&lt;/p&gt;</comment>
                    <comment id="23547" author="importer" created="Mon, 11 Oct 2010 09:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&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-276] Add non-interning keyword lookup function</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-276</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I need a non-interning keyword lookup function.    This is the much delayed patch discussed way back, see this discussion:&lt;br/&gt;
&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/670ab284e86e17fa/22f3ba493a93db8c?lnk=gst&amp;amp;q=keyword+lookup#22f3ba493a93db8c&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/670ab284e86e17fa/22f3ba493a93db8c?lnk=gst&amp;amp;q=keyword+lookup#22f3ba493a93db8c&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Attached is a proposed patch to implement this.  It&apos;s different from the patch in the above thread in three main ways: it&apos;s against a current branch, it includes a clojure wrapper (find-keyword), and it uses the name find in the keyword class instead of lookup.&lt;/p&gt;

&lt;p&gt;It&apos;s currently interning symbols, which I&apos;m not sure about.  It might be better to have the keys of the keyword table be strings instead of symbols, but that&apos;s a more intrusive change.  Also, the find-keyword function is in core, which I&apos;m not sure is the right place for it either.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13673">CLJ-276</key>
            <summary>Add non-interning keyword lookup function</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Feb 2010 10:11:00 -0600</created>
                <updated>Tue, 12 Oct 2010 16:58:00 -0500</updated>
                    <resolved>Tue, 12 Oct 2010 16:58:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23535" author="importer" created="Tue, 12 Oct 2010 16:58:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/276&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/276&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
keyword.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aV_9dsiJKr37FaeJe5afGb/download/aV_9dsiJKr37FaeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aV_9dsiJKr37FaeJe5afGb/download/aV_9dsiJKr37FaeJe5afGb&lt;/a&gt;&lt;br/&gt;
0276-non-interning-keyword-plus-tests.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cX8wGA1uer36T_eJe5cbLr/download/cX8wGA1uer36T_eJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cX8wGA1uer36T_eJe5cbLr/download/cX8wGA1uer36T_eJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23536" author="importer" created="Tue, 12 Oct 2010 16:58:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:cX8wGA1uer36T_eJe5cbLr&quot;&gt;file:cX8wGA1uer36T_eJe5cbLr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23537" author="importer" created="Tue, 12 Oct 2010 16:58:00 -0500"  >&lt;p&gt;stu said: Second patch subsumes first and adds tests. &lt;/p&gt;

&lt;p&gt;Brian: please make sure to create patches with git format-patch (see &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt;). I had to reconstitute your patch before I could edit it.&lt;/p&gt;</comment>
                    <comment id="23538" author="importer" created="Tue, 12 Oct 2010 16:58:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#276, #280, #378, #437, #448)&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-263] Add an optional environment argument to #&apos;resolve and ns-resolve</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-263</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In ns-resolve and resolve add an arity overload with an environment argument before sym.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://groups.google.com/group/clojure-dev/msg/445e31ccd0cb6988&quot;&gt;http://groups.google.com/group/clojure-dev/msg/445e31ccd0cb6988&lt;/a&gt;&lt;br/&gt;
and &lt;a href=&quot;http://clojure-log.n01se.net/date/2010-02-10.html#12:10&quot;&gt;http://clojure-log.n01se.net/date/2010-02-10.html#12:10&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13660">CLJ-263</key>
            <summary>Add an optional environment argument to #&apos;resolve and ns-resolve</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Feb 2010 11:34:00 -0600</created>
                <updated>Fri, 15 Oct 2010 05:30:00 -0500</updated>
                    <resolved>Fri, 15 Oct 2010 05:30:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23462" author="importer" created="Fri, 15 Oct 2010 05:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/263&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/263&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Add-an-optional-environment-argument-to-resolve-and-.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/avsDZWfNmr34eteJe5aVNr/download/avsDZWfNmr34eteJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/avsDZWfNmr34eteJe5aVNr/download/avsDZWfNmr34eteJe5aVNr&lt;/a&gt;&lt;br/&gt;
0263-env-for-resolve-plus-test.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/d9u-mg17yr36vzeJe5cbCb/download/d9u-mg17yr36vzeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/d9u-mg17yr36vzeJe5cbCb/download/d9u-mg17yr36vzeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23463" author="importer" created="Fri, 15 Oct 2010 05:30:00 -0500"  >&lt;p&gt;cgrand said: [&lt;a href=&quot;file:avsDZWfNmr34eteJe5aVNr&quot;&gt;file:avsDZWfNmr34eteJe5aVNr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23464" author="importer" created="Fri, 15 Oct 2010 05:30:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:d9u-mg17yr36vzeJe5cbCb&quot;&gt;file:d9u-mg17yr36vzeJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23465" author="importer" created="Fri, 15 Oct 2010 05:30:00 -0500"  >&lt;p&gt;stu said: Second patch resolves first, and adds test.&lt;/p&gt;</comment>
                    <comment id="23466" author="importer" created="Fri, 15 Oct 2010 05:30:00 -0500"  >&lt;p&gt;cgrand said: (In [&lt;span class=&quot;error&quot;&gt;&amp;#91;r:4b9d7ba4812a9540afcaf256dc2f58da1e173988&amp;#93;&lt;/span&gt;]) Add an optional environment argument to #&apos;resolve and ns-resolve. See #263&lt;/p&gt;

&lt;p&gt;Signed-off-by: Stuart Halloway &amp;lt;stu@thinkrelevance.com&amp;gt;&lt;/p&gt;

&lt;p&gt;Branch: master&lt;/p&gt;</comment>
                    <comment id="23467" author="importer" created="Fri, 15 Oct 2010 05:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#263, #305, #315, #364, #453)&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-249] Add &quot;starting at &lt;line&gt;&quot; to EOF while reading exceptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-249</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Extend some EOF exceptions during read so they look like this:&lt;/p&gt;

&lt;p&gt; java.lang.Exception: EOF while reading, starting at line 7 (bad.clj:15)&lt;/p&gt;

&lt;p&gt;So while bad.clj:15 indicates the file name and the fact that&lt;br/&gt;
line 15 is the last one of the file, &quot;starting at line 7&quot; points&lt;br/&gt;
out the line where the unclosed grouping construct started. &lt;/p&gt;

&lt;p&gt;Discussed: &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/872c5b2ee7af19fe&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/872c5b2ee7af19fe&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13646">CLJ-249</key>
            <summary>Add &quot;starting at &lt;line&gt;&quot; to EOF while reading exceptions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 27 Jan 2010 10:48:00 -0600</created>
                <updated>Sat, 2 Oct 2010 00:48:00 -0500</updated>
                    <resolved>Sat, 2 Oct 2010 00:48:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23415" author="importer" created="Sat, 2 Oct 2010 00:48:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/249&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/249&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Add-starting-at-line-to-readDelimitedList-EOF-er.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cw16NCc3qr34N6eJe5afGb/download/cw16NCc3qr34N6eJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cw16NCc3qr34N6eJe5afGb/download/cw16NCc3qr34N6eJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23416" author="importer" created="Sat, 2 Oct 2010 00:48:00 -0500"  >&lt;p&gt;chouser@n01se.net said: (In [&lt;span class=&quot;error&quot;&gt;&amp;#91;r:a5c2c36cd7f8ddbae68a5071ae7a3d9373b02a01&amp;#93;&lt;/span&gt;]) Add &quot;starting at &amp;lt;line&amp;gt;&quot; to readDelimitedList EOF errors&lt;/p&gt;

&lt;p&gt;Refs #249&lt;br/&gt;
Signed-off-by: Chouser &amp;lt;chouser@n01se.net&amp;gt;&lt;/p&gt;

&lt;p&gt;Branch: master&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-244] walk support for sorted-by collections</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-244</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/51982e4091e3614d&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/51982e4091e3614d&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13641">CLJ-244</key>
            <summary>walk support for sorted-by 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="timothypratley">Timothy Pratley</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 13 Jan 2010 01:52:00 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Wed, 5 Jan 2011 06:49:32 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23395" author="importer" created="Tue, 28 Sep 2010 17:09:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/244&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/244&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
sorted_walk.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b0Y9k2c5Or34IaeJe5afGb/download/b0Y9k2c5Or34IaeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b0Y9k2c5Or34IaeJe5afGb/download/b0Y9k2c5Or34IaeJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23396" author="importer" created="Tue, 28 Sep 2010 17:09:00 -0500"  >&lt;p&gt;timothypratley said: [&lt;a href=&quot;file:b0Y9k2c5Or34IaeJe5afGb&quot;&gt;file:b0Y9k2c5Or34IaeJe5afGb&lt;/a&gt;]: fix and tests&lt;/p&gt;</comment>
                    <comment id="23397" author="importer" created="Tue, 28 Sep 2010 17:09:00 -0500"  >&lt;p&gt;timothypratley said: Ready&lt;/p&gt;</comment>
                    <comment id="26085" author="stu" created="Tue, 4 Jan 2011 20:18:22 -0600"  >&lt;p&gt;Jan 4 patch updated to work with current master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10069" name="0244-sorted-walk-resolved.patch" size="4725" author="stu" created="Tue, 4 Jan 2011 20:18: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-236] Add error checking for defmulti options.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-236</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It would be nice to have some error checking for option map in macros like defmulti. I&apos;ve written a check-options function that can be used for that purpose and used it in defmulti definition in the attached patch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13633">CLJ-236</key>
            <summary>Add error checking for defmulti options.</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 1 Jan 2010 19:50:00 -0600</created>
                <updated>Fri, 29 Apr 2011 10:34:37 -0500</updated>
                    <resolved>Fri, 29 Apr 2011 10:34:37 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23370" author="importer" created="Tue, 28 Sep 2010 06:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/236&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/236&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Added-the-check-options-function-to-warn-about-wrong.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cD6KBS90Kr3RGweJe5afGb/download/cD6KBS90Kr3RGweJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cD6KBS90Kr3RGweJe5afGb/download/cD6KBS90Kr3RGweJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23371" author="importer" created="Tue, 28 Sep 2010 06:44:00 -0500"  >&lt;p&gt;richhickey said: Thanks for this. Should throw IllegalArgumentException I think.&lt;/p&gt;</comment>
                    <comment id="26048" author="stu" created="Fri, 17 Dec 2010 15:01:39 -0600"  >&lt;p&gt;Rich, I have a few design questions before I edit this patch:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;For macros throwing IllegalArgumentException looks right, but I would want basically the same fn as a precondition assertion in normal code.&lt;/li&gt;
	&lt;li&gt;To the extent that the previous argument (or any other kind of option checking) is persuasive, I am reluctant to give out the generic name &quot;check-options&quot; in core without more thought. Maybe make this private for now? Or call it check-macro-options? Put in a different namespace?&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26086" author="richhickey" created="Tue, 4 Jan 2011 20:19:23 -0600"  >&lt;p&gt;I don&apos;t understand&lt;/p&gt;</comment>
                    <comment id="26193" author="stu" created="Fri, 28 Jan 2011 12:45:00 -0600"  >&lt;p&gt;I have two ideas for this patch:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;the thrown error tells you what you should have done (the valid keys) but not what you did (the keys you passed). Should do both.&lt;/li&gt;
	&lt;li&gt;the name &lt;tt&gt;check-options&lt;/tt&gt;. There might be an opposite fn (make sure you &lt;b&gt;did&lt;/b&gt; provide keys) that could claim the same name. Maybe &lt;tt&gt;constrain-options&lt;/tt&gt;? Or, to the extend that it works with any map, could be &lt;tt&gt;constrain-keys&lt;/tt&gt;. ... Which suggests the partner fn &lt;tt&gt;require-keys&lt;/tt&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Thoughts?&lt;/p&gt;</comment>
                    <comment id="26383" author="stu" created="Fri, 22 Apr 2011 09:36:23 -0500"  >&lt;p&gt;Rich: we had discussed making the validation helper a local fn, but I like the idea of making it private instead. I expect there will be other uses in the future. Hope that is ok. If not, let me know and I will make the patch we discussed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10195" name="0236-defmulti-error-checking-with-helper.patch" size="2962" author="stu" created="Fri, 22 Apr 2011 09:36:23 -0500" />
                    <attachment id="10194" name="0236-defmulti-error-checking-with-helper.patch" size="2962" author="stu" created="Fri, 22 Apr 2011 09:36:23 -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_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>richhickey</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-235] clojure.test fixtures don&apos;t work with test-ns-hook</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-235</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I just noticed something about clojure.test that isn&apos;t documented, and might not be by design.&lt;/p&gt;

&lt;p&gt;The docs say:&lt;/p&gt;

&lt;p&gt;   &quot;Fixtures allow you to run code before and after tests, to set up&lt;br/&gt;
   the context in which tests should be run.&quot;&lt;/p&gt;

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

&lt;p&gt;   &quot;By default, these functions will search for all tests defined in&lt;br/&gt;
   a namespace and run them in an undefined order.  However, if you&lt;br/&gt;
   are composing tests, as in the &quot;arithmetic&quot; example above, you&lt;br/&gt;
   probably do not want the &quot;addition&quot; and &quot;subtraction&quot; tests run&lt;br/&gt;
   separately.  In that case, you must define a special function&lt;br/&gt;
   named &quot;test-ns-hook&quot; that runs your tests in the correct order:&lt;/p&gt;

&lt;p&gt;   &lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn test-ns-hook []
     (arithmetic))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&quot;&lt;/p&gt;

&lt;p&gt;The actual behavior is that fixtures are run &lt;b&gt;if you don&apos;t specify your own &lt;tt&gt;test-ns-hook&amp;lt;/code&amp;gt;&lt;/b&gt;. You can figure this out if you read the source, or from the docstring of &amp;lt;code&amp;gt;test-ns&lt;/tt&gt; if you know how fixtures are implemented, but it&apos;s certainly not clear.&lt;/p&gt;

&lt;p&gt;Might I suggest that one of the following be done?&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;The docs are extended or clarified to warn that fixtures will not be run if you define your own &lt;tt&gt;test-ns-hook&lt;/tt&gt;, or&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;test-ns&amp;lt;/code&amp;gt; be extended (and &amp;lt;code&amp;gt;test-all-vars&amp;lt;/code&amp;gt; refactored) to call fixtures prior to calling the &amp;lt;code&amp;gt;test-ns-hook&lt;/tt&gt;, or&lt;/li&gt;
	&lt;li&gt;An exported function be introduced (and test-all-vars refactored to use it) to thread execution via the ns fixtures, so that hooks can use it?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I&apos;m leaning towards the second or third option; the third allows the &lt;tt&gt;test-ns-hook&amp;lt;/code&amp;gt; to optionally invoke the fixtures, which adds flexibility, but of course if you&apos;re defining a &amp;lt;code&amp;gt;test-ns-hook&lt;/tt&gt; you&apos;re at liberty to simply not define the fixtures at all (which lends weight to the second solution).&lt;/p&gt;

&lt;p&gt;Note that it might only make sense to run &quot;once&quot; fixtures around a custom &lt;tt&gt;test-ns-hook&lt;/tt&gt;, unless tests themselves are put in charge of running &quot;each&quot; fixtures.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13632">CLJ-235</key>
            <summary>clojure.test fixtures don&apos;t work with test-ns-hook</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="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 1 Jan 2010 15:55:00 -0600</created>
                <updated>Fri, 5 Nov 2010 11:05:12 -0500</updated>
                    <resolved>Fri, 5 Nov 2010 11:05:12 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23366" author="importer" created="Fri, 1 Oct 2010 13:28:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/235&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/235&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
fix235-1.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bgJ3zGZzOr37CfeJe5cbLA/download/bgJ3zGZzOr37CfeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bgJ3zGZzOr37CfeJe5cbLA/download/bgJ3zGZzOr37CfeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23367" author="importer" created="Fri, 1 Oct 2010 13:28:00 -0500"  >&lt;p&gt;stuart.sierra said: I am hoping to replace clojure.test with lazytest, currently under development.  &lt;a href=&quot;http://github.com/stuartsierra/lazytest&quot;&gt;http://github.com/stuartsierra/lazytest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lazytest will have better support for fixtures, renamed contexts.  Therefore, I am not continuing work on clojure.test.&lt;/p&gt;</comment>
                    <comment id="23368" author="importer" created="Fri, 1 Oct 2010 13:28:00 -0500"  >&lt;p&gt;stuart.sierra said: [&lt;a href=&quot;file:bgJ3zGZzOr37CfeJe5cbLA&quot;&gt;file:bgJ3zGZzOr37CfeJe5cbLA&lt;/a&gt;]: documentation patch only&lt;/p&gt;</comment>
                    <comment id="23369" author="importer" created="Fri, 1 Oct 2010 13:28:00 -0500"  >&lt;p&gt;stuart.sierra said: This is too hard to fix correctly, and test-ns-hook is very rarely used.&lt;/p&gt;

&lt;p&gt;So I have merely updated the documentation to make it clear that fixtures and test-ns-hook are mutually incompatible.&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-234] Adding provenance of deprecation warnings to the LispReader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-234</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The LispReader has some deprecation warnings, but they do not show their provenance. The attached patch provide improved warning messages by modifying the LineNumberingPushbackReader to include the source path of the file being read, so that it can be retrieved by the LispReader.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13631">CLJ-234</key>
            <summary>Adding provenance of deprecation warnings to the LispReader</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 1 Jan 2010 15:30:00 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 31 Dec 2010 15:59:02 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23365" author="importer" created="Tue, 28 Sep 2010 07:02:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/234&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/234&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0002-Modified-the-LineNumberingPushbackReader-to-include-.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bmHcpC9Yur3RGweJe5afGb/download/bmHcpC9Yur3RGweJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bmHcpC9Yur3RGweJe5afGb/download/bmHcpC9Yur3RGweJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26046" author="stu" created="Fri, 17 Dec 2010 14:31:14 -0600"  >&lt;p&gt;Alan: please bounce this if incomplete, or screen if it seems simple enough.&lt;/p&gt;</comment>
                    <comment id="26047" author="alan@thinkrelevance.com" created="Fri, 17 Dec 2010 14:53:37 -0600"  >&lt;p&gt;The patch looks good, but as of 1.2 there are no longer any deprecated reader macros.  This might be worth adding in case any macros are deprecated in the future.&lt;/p&gt;</comment>
                    <comment id="26075" author="stu" created="Fri, 31 Dec 2010 15:59:02 -0600"  >&lt;p&gt;If we ever have another deprecation, we should bring this back along with a test case.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10052" name="0234_LispReader_deprecation_provenance.patch" size="3736" author="aaron" created="Sun, 12 Dec 2010 16:53:57 -0600" />
                    <attachment id="10051" name="0234_LispReader_deprecation_provenance.patch" size="3736" author="aaron" created="Sun, 12 Dec 2010 16:37:13 -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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-199] chunked seqs support &apos;for&apos; byte code can&apos;t be converted to dex for dalvik</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-199</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Commit 306ef6 generates bytecode which can not be covered to dex for dalvik.  See following git-bisect output for details.&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;306ef6d9e47253103ca0e5ae0f4b620d5fa2aeff is first bad commit
commit 306ef6d9e47253103ca0e5ae0f4b620d5fa2aeff (14316ae2110a779ffc8ac9c3da3f1c41852c4289)
Author: Chouser &amp;lt;chouser@n01se.net&amp;gt;
Date:   Sun Aug 23 21:36:41 2009 -0400

    Add support &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; chunked seqs to &apos;&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt;&apos;.  Refs #1

:040000 040000 d48a1b12db408d4bc5843367ea5529678522f57d 7d8717380716feab9ebc84883e60dceea8fb1e08 M src
:040000 040000 0d80fce85701005c13ce13c105524a4fff188396 5daece53b0dd2727dc7ffa9c0b773e7962de900d M test
bisect run success

processing clojure/core$generate_proxy__5911$iter__5947__5953$fn__5954$iter__5949__5956$fn__5957.class...

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type java.lang.&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; using a local variable of type &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;. This is symptomatic of .class transformation tools that ignore local variable information.
 at com.android.dx.cf.code.BaseMachine.throwLocalMismatch(BaseMachine.java:537)
 at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:504)
 at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:472)
 at com.android.dx.cf.code.Simulator.simulate(Simulator.java:96)
 at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:681)
 at com.android.dx.cf.code.Ropper.doit(Ropper.java:636)
 at com.android.dx.cf.code.Ropper.convert(Ropper.java:253)
 at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:252)
 at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
 at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
 at com.android.dx.command.dexer.Main.processClass(Main.java:297)
 at com.android.dx.command.dexer.Main.processFileBytes(Main.java:276)
 at com.android.dx.command.dexer.Main.access$100(Main.java:56)
 at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:228)
 at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
 at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130)
 at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
 at com.android.dx.command.dexer.Main.processOne(Main.java:245)
 at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
 at com.android.dx.command.dexer.Main.run(Main.java:139)
 at com.android.dx.command.dexer.Main.main(Main.java:120)
 at com.android.dx.command.Main.main(Main.java:87)
...at bytecode offset 000000d7
locals[0000]: Lclojure/core$generate_proxy__5911$iter__5947__5953$fn__5954$iter__5949__5956$fn__5957;
locals[0001]: known-&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
locals[0002]: known-&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
locals[0003]: known-&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
locals[0004]: known-&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
locals[0005]: I
locals[0006]: Ljava/lang/&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;;
stack[0003]: Lclojure/lang/IFn;
stack[0002]: Ljava/lang/&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;;
stack[0001]: Ljava/lang/&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;;
stack[top0]: known-&lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
...&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; working on block 00cd
...&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; working on method invoke:()Ljava/lang/&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;;
...&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; processing invoke ()Ljava/lang/&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;;
...&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; processing clojure/core$generate_proxy__5911$iter__5947__5953$fn__5954$iter__5949__5956$fn__5957.class&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13596">CLJ-199</key>
            <summary>chunked seqs support &apos;for&apos; byte code can&apos;t be converted to dex for dalvik</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="aaron">Aaron Bedra</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Sun, 18 Oct 2009 10:07:00 -0500</created>
                <updated>Mon, 15 Nov 2010 12:49:00 -0600</updated>
                    <resolved>Mon, 1 Nov 2010 07:38:25 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23220" author="importer" created="Mon, 25 Oct 2010 23:11:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/199&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/199&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23221" author="importer" created="Mon, 25 Oct 2010 23:11:00 -0500"  >&lt;p&gt;richhickey said: what are the tools/commands needed to reproduce this?&lt;/p&gt;</comment>
                    <comment id="23222" author="importer" created="Mon, 25 Oct 2010 23:11:00 -0500"  >&lt;p&gt;remvee said: Oeps, the SHA1 in this report is not part of the official git repo but&lt;br/&gt;
only in my tree.  I&apos;ve digged around and found it at 14316a.&lt;/p&gt;

&lt;p&gt;Anyway, the problem does not occur in the current master branch but&lt;br/&gt;
persist in 1.1.x branch.  So please close this issue.&lt;/p&gt;

&lt;p&gt;Just for reference, you can reproduce the problem as follows:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;download the android SDK&lt;/li&gt;
	&lt;li&gt;build clojure.jar&lt;/li&gt;
	&lt;li&gt;run: &lt;span class=&quot;error&quot;&gt;&amp;#91;andriod_sdk&amp;#93;&lt;/span&gt;/platforms/android-2.0.1/tools/dx --dex clojure.jar&lt;/li&gt;
	&lt;li&gt;boom&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="23223" author="importer" created="Mon, 25 Oct 2010 23:11:00 -0500"  >&lt;p&gt;aaron said: The current master 09ba677c1dfd8e75cec47d270062558c71aa551d does not cause this issue.  I tested on android-7 and android-8 platforms with fresh downloads of everything.  Should we close this ticket?&lt;/p&gt;</comment>
                    <comment id="25885" author="aaron" created="Fri, 29 Oct 2010 09:44:48 -0500"  >&lt;p&gt;Contacted original poster about closing this issue.&lt;/p&gt;</comment>
                    <comment id="25912" author="aaron" created="Mon, 1 Nov 2010 07:38:26 -0500"  >&lt;p&gt;Orignal ticket creator agreed that this is no longer an issue.  This issue was fixed sometime between 1.1 and 1.2 but since there is no patches or details on what changed here I am marking the resolution declined&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-191] enhance stacktrace: causes like java, syntax like clojure</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-191</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Various enhancements I&apos;d like to make:&lt;br/&gt;
Copy the feature of java stacktrace to print &quot;... 25 more&quot; instead of duplicating stack lines.&lt;br/&gt;
Print java class.method in clojure format: class/method. &lt;/p&gt;

&lt;p&gt;Discussion: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/d03dd16acbe3aa14&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/d03dd16acbe3aa14&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13588">CLJ-191</key>
            <summary>enhance stacktrace: causes like java, syntax like clojure</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Sep 2009 03:25:00 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Fri, 31 Dec 2010 15:55:31 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23189" author="importer" created="Wed, 1 Sep 2010 09:39:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/191&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/191&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
clojure-191-stacktrace.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dz8x6oOqar3PnLeJe5afGb/download/dz8x6oOqar3PnLeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dz8x6oOqar3PnLeJe5afGb/download/dz8x6oOqar3PnLeJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23190" author="importer" created="Wed, 1 Sep 2010 09:39:00 -0500"  >&lt;p&gt;mikehinchey said: [&lt;a href=&quot;file:dz8x6oOqar3PnLeJe5afGb&quot;&gt;file:dz8x6oOqar3PnLeJe5afGb&lt;/a&gt;]: enhance stacktrace&lt;/p&gt;</comment>
                    <comment id="23191" author="importer" created="Wed, 1 Sep 2010 09:39:00 -0500"  >&lt;p&gt;mikehinchey said: Printing causes, abridge duplicated stack lines with ... (same as java printStackTrace does).&lt;br/&gt;
Improve matching and reformatting of stack lines of clj code.&lt;br/&gt;
(e) takes an optional argument. (e) prints all causes.&lt;br/&gt;
Created unit tests for stacktrace (succeeds in repl and ant).&lt;/p&gt;</comment>
                    <comment id="23192" author="importer" created="Wed, 1 Sep 2010 09:39:00 -0500"  >&lt;p&gt;richhickey said: I&apos;m not sure this is the patch, but I&apos;d like to get improved stack traces on the agenda again. See also &lt;a href=&quot;http://github.com/mmcgrana/clj-stacktrace&quot;&gt;http://github.com/mmcgrana/clj-stacktrace&lt;/a&gt; and other ideas.&lt;/p&gt;</comment>
                    <comment id="23193" author="importer" created="Wed, 1 Sep 2010 09:39:00 -0500"  >&lt;p&gt;richhickey said: Some work has been done in master, little feedback at present&lt;/p&gt;</comment>
                    <comment id="26021" author="aaron" created="Fri, 10 Dec 2010 10:10:57 -0600"  >&lt;p&gt;Further discussion on this ticket is at &lt;a href=&quot;http://dev.clojure.org/display/design/Stacktraces&quot;&gt;http://dev.clojure.org/display/design/Stacktraces&lt;/a&gt; and should be the basis for any future discussion and eventual design sign off.&lt;/p&gt;</comment>
                    <comment id="26074" author="stu" created="Fri, 31 Dec 2010 15:55:31 -0600"  >&lt;p&gt;This will be subsumed under the changes being proposed at &lt;a href=&quot;http://dev.clojure.org/display/design/Error+Handling&quot;&gt;http://dev.clojure.org/display/design/Error+Handling&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-184] n-ary bit functions, also inlining of n-ary bit and math operations</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-184</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Add an &amp;amp;more version to the bit operations bit-and bit-or bit-xor bit-and-not (via reduce),&lt;br/&gt;
Inline the n-ary version of the math ops, + - * /, inline the n-ary versions of bit-and bit-or bit-xor bit-and-not&lt;/p&gt;</description>
                <environment></environment>
            <key id="13581">CLJ-184</key>
            <summary>n-ary bit functions, also inlining of n-ary bit and math operations</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="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Aug 2009 17:37:00 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Sat, 14 May 2011 16:21:04 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23159" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/184&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/184&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
inlinemath.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dlFRFQKPyr3RaoeJe5aVNr/download/dlFRFQKPyr3RaoeJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dlFRFQKPyr3RaoeJe5aVNr/download/dlFRFQKPyr3RaoeJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23160" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;Jonathan A Smith said: [&lt;a href=&quot;file:dlFRFQKPyr3RaoeJe5aVNr&quot;&gt;file:dlFRFQKPyr3RaoeJe5aVNr&lt;/a&gt;]: inline math and bit-or patch file&lt;/p&gt;</comment>
                    <comment id="23161" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;Jonathan A Smith said: original math defs stay, new ones get re-defined after proxy is available.&lt;/p&gt;</comment>
                    <comment id="23162" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;mikehinchey said: Applies clean (though has extra whitespace and tabs).  Existing tests still pass.&lt;/p&gt;</comment>
                    <comment id="23163" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;Jonathan A Smith said: The defn functions are within a let, which means that they get tabbed in by Emacs ctrl+alt+Q. Is this the referred to &apos;extra whitespace and tabs&apos;?&lt;/p&gt;

&lt;p&gt;I think that this line: &lt;br/&gt;
&amp;gt;0-arities (rule-set (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (&amp;gt; x 1)))&lt;/p&gt;

&lt;p&gt;might be a mistake, and perhaps should be:&lt;br/&gt;
&amp;gt;0-arities (rule-set (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (&amp;gt; x 0)))&lt;/p&gt;

&lt;p&gt;But I will have to look at it and rebuild it when I get home tonight. resulting tests would still pass as the only effected function would be the single arity subtraction operation.&lt;/p&gt;</comment>
                    <comment id="23164" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;mikehinchey said: &quot;git am&quot; complained about whitespace at the ends of lines.  When I tab on each line to re-indent, emacs replaced tabs with spaces and deleted space at the end.  Also, you could combine the 2 let blocks into 1.&lt;/p&gt;</comment>
                    <comment id="23165" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;richhickey said: This still needs work. I&apos;d like to avoid the need for proxy. It would be easy to make Compiler.isInline() in the compiler presume :inline-arities is an IFn (so sets literals would still work, but so would predicate fns)&lt;/p&gt;</comment>
                    <comment id="23166" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;richhickey said: I&apos;ve made that change, so isInline now treats :inline-arities as a predicate IFn. This should allow for a simpler implementation&lt;/p&gt;</comment>
                    <comment id="26385" author="redinger" created="Fri, 22 Apr 2011 11:40:46 -0500"  >&lt;p&gt;Adding patch from Assembla&lt;/p&gt;</comment>
                    <comment id="26415" author="alan@thinkrelevance.com" created="Sat, 30 Apr 2011 15:59:33 -0500"  >&lt;p&gt;inlining and n-ary bit functions and math ops&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;n-ary versions and inlines of bit-and, bit-or, bit-xor, bit-and-not&lt;/li&gt;
	&lt;li&gt;n-ary inlines for +, +&apos;, *, *&apos;, /, -, -&apos;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This patch doesn&apos;t optimize / such that the &amp;amp; more version expands to equivalent of (/ x (reduce * y more)) rather than (reduce / (/ x y) more).  The original patch had a divide-by-zero bug, and I think adding this should be another ticket.&lt;/p&gt;</comment>
                    <comment id="26416" author="alan@thinkrelevance.com" created="Sat, 30 Apr 2011 16:12:34 -0500"  >&lt;p&gt;Created &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-785&quot; title=&quot;Optimize /&quot;&gt;&lt;del&gt;CLJ-785&lt;/del&gt;&lt;/a&gt; for optimizing n-ary /&lt;/p&gt;</comment>
                    <comment id="26417" author="ataggart" created="Tue, 3 May 2011 13:46:16 -0500"  >&lt;p&gt;You&apos;d have less copypasta using this:&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 ^:private binary-inline
  ([op]
    (fn
      ([x y] `(. clojure.lang.Numbers (~op ~x ~y)))
      ([x y &amp;amp; more]
        (reduce1
          (fn [a b] `(. clojure.lang.Numbers (~op ~a ~b)))
          `(. clojure.lang.Numbers (~op ~x ~y)) more))))
  ([op unchecked-op]
    (if *unchecked-math*
      (binary-inline unchecked-op)
      (binary-inline op))))

(defn ^:private &amp;gt;1? [n] (clojure.lang.Numbers/gt n 1))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also, &lt;tt&gt;^:static&lt;/tt&gt; doesn&apos;t do anything anymore.&lt;/p&gt;

&lt;p&gt;The above was from &lt;a href=&quot;https://github.com/ataggart/clojure/commits/n-ary&quot;&gt;the branch I made&lt;/a&gt;, that I mentioned in &lt;a href=&quot;http://groups.google.com/group/clojure-dev/msg/a9d7d36f3c4f96bb&quot;&gt;the thread on ticket status&lt;/a&gt;.  It also included a fix for the inefficient divide.  &lt;/p&gt;</comment>
                    <comment id="26418" author="alan@thinkrelevance.com" created="Tue, 3 May 2011 20:50:37 -0500"  >&lt;p&gt;Thanks, I&apos;ll extract a patch for this from your branch.&lt;/p&gt;</comment>
                    <comment id="26422" author="alan@thinkrelevance.com" created="Fri, 6 May 2011 12:39:20 -0500"  >&lt;p&gt;This patch incorporates Alex Taggart&apos;s work in the comments, but leaves out the change to &lt;tt&gt;/&lt;/tt&gt;.  It made a call to the nonexistent Numbers/unchecked_divide method and multiplies in the denominator, which is faster but has different overflow behavior than divide/reduce.&lt;/p&gt;</comment>
                    <comment id="26423" author="ataggart" created="Sat, 7 May 2011 00:30:17 -0500"  >&lt;p&gt;One problem with the patch: while the bit-ops fns have n-ary support for their inlines, the fns themselves do not.  They need to be updated to something like:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defn bit-and
  &quot;Bitwise and&quot;
  {:inline (nary-inline &apos;and)
   :inline-arities &amp;gt;1?
   :added &quot;1.0&quot;}
  ([x y] (. clojure.lang.Numbers and x y))
  ([x y &amp;amp; more]
    (reduce1 bit-and (bit-and x y) more)))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26424" author="alan@thinkrelevance.com" created="Mon, 9 May 2011 23:42:31 -0500"  >&lt;p&gt;Attached 184-inlining-nary-math-3.diff. Same as previous patch, but adds n-ary version of bit fns in addition to inlines, which were missing as Alex Taggart pointed out.  Thanks for catching that!&lt;/p&gt;</comment>
                    <comment id="26440" author="alan@thinkrelevance.com" created="Sat, 14 May 2011 16:21:05 -0500"  >&lt;p&gt;Patch is in 1.3-alpha7&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10218" name="184-inlining-nary-math-2.diff" size="4878" author="alan@thinkrelevance.com" created="Fri, 6 May 2011 12:39:20 -0500" />
                    <attachment id="10220" name="184-inlining-nary-math-3.diff" size="5329" author="alan@thinkrelevance.com" created="Mon, 9 May 2011 23:42:30 -0500" />
                    <attachment id="10214" name="184-inlining-nary-math.diff" size="5884" author="alan@thinkrelevance.com" created="Sat, 30 Apr 2011 15:59:33 -0500" />
                    <attachment id="10196" name="inlinemath.patch" size="4322" author="redinger" created="Fri, 22 Apr 2011 11:40: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-182] Make Symbol.create methods intern their args</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-182</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Right now the create methods presume interned strings, but not all users are disciplined about that. Also, Terracotta can correctly identity-share explicitly interned strings but not implicit ones (like string literals). We care because symbol equality is based on string identity.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13579">CLJ-182</key>
            <summary>Make Symbol.create methods intern their args</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="liwp">Lauri Pesonen</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 25 Aug 2009 00:11:00 -0500</created>
                <updated>Thu, 14 Oct 2010 14:27:00 -0500</updated>
                    <resolved>Thu, 14 Oct 2010 14:27:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23148" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/182&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/182&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
intern-symbol-create.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bEWc50RSmr3RYCeJe5afGb/download/bEWc50RSmr3RYCeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bEWc50RSmr3RYCeJe5afGb/download/bEWc50RSmr3RYCeJe5afGb&lt;/a&gt;&lt;br/&gt;
0182-remove-symbol-create.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cq_Zfw17Sr36XAeJe5cbLA/download/cq_Zfw17Sr36XAeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cq_Zfw17Sr36XAeJe5cbLA/download/cq_Zfw17Sr36XAeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23149" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;liwp said: [&lt;a href=&quot;file:bEWc50RSmr3RYCeJe5afGb&quot;&gt;file:bEWc50RSmr3RYCeJe5afGb&lt;/a&gt;]: Fixes namespace and symbol name interning in Symbol/create&lt;/p&gt;</comment>
                    <comment id="23150" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;liwp said: Symbol/create(ns, name) gets called e.g. for def forms with ns == null, so I had to add a null check. I couldn&apos;t find the create() call that was causing this, so the null check was an easier option.&lt;/p&gt;</comment>
                    <comment id="23151" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;technomancy said: +1; this still applies cleanly and looks correct.&lt;/p&gt;</comment>
                    <comment id="23152" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;richhickey said: I think it might be best to get rid of the create methods entirely. It&apos;s only confusing to have both. I can do the refactor of the Clojure code - the patch would be daunting &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="23153" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:cq_Zfw17Sr36XAeJe5cbLA&quot;&gt;file:cq_Zfw17Sr36XAeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23154" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;stu said: second (big!) patch removes create, all callers now use intern.&lt;/p&gt;</comment>
                    <comment id="23155" author="importer" created="Thu, 14 Oct 2010 14:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#182, #286)&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-149] pop does not preserve meta-data</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-149</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As discussed with chouser on irc.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;=&amp;gt; (meta (conj (with-meta &apos;(1 2 3) {:my :meta}) 4))
{:my :meta}
=&amp;gt; (meta (pop (with-meta &apos;(1 2 3) {:my :meta}))) 
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Both calls should yield the same result.&lt;/p&gt;

&lt;p&gt;This occurs in 1.0.0 as well as trunk.  &lt;/p&gt;

&lt;p&gt;This might be part of a larger issue with when meta-data should be preserved (e.g., &lt;tt&gt;butlast&lt;/tt&gt;).&lt;/p&gt;</description>
                <environment></environment>
            <key id="13546">CLJ-149</key>
            <summary>pop does not preserve meta-data</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="aaron">Aaron Bedra</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Jul 2009 15:41:00 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Sat, 19 Mar 2011 10:09:39 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="22992" author="importer" created="Sun, 3 Oct 2010 16:08:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/149&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/149&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22993" author="importer" created="Sun, 3 Oct 2010 16:08:00 -0500"  >&lt;p&gt;chouser@n01se.net said: Alex, sorry if my various statements mislead you.  What you described may be a bug, but I don&apos;t know that for sure.  Rich would have to rule on what the desired behavior is there.&lt;/p&gt;

&lt;p&gt;However, I&apos;m pretty sure that the metadata is getting lost here incorrectly:&lt;/p&gt;

&lt;p&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;
  (let [v (with-meta &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; {:my :meta})]&lt;br/&gt;
    (map meta &lt;span class=&quot;error&quot;&gt;&amp;#91;(conj v 4) (pop v)&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;  returns: (nil nil)&lt;br/&gt;
&amp;lt;/pre&amp;gt;&lt;/p&gt;

&lt;p&gt;Because if you start with a PersistentVector instead of a LazilyPersistentVector, the metadata is preserved:&lt;/p&gt;

&lt;p&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;
  (let [v (with-meta (pop &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;) {:my :meta})]&lt;br/&gt;
    (map meta &lt;span class=&quot;error&quot;&gt;&amp;#91;(conj v 4) (pop v)&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;  returns: ({:my :meta} {:my :meta})&lt;br/&gt;
&amp;lt;/pre&amp;gt;&lt;/p&gt;

&lt;p&gt;The problem seems to be that metadata is lost when the LazilyPersistentVector is converted to a PersistentVector.  I&apos;ll attach a patch to address this.&lt;/p&gt;</comment>
                    <comment id="22994" author="importer" created="Sun, 3 Oct 2010 16:08:00 -0500"  >&lt;p&gt;chouser@n01se.net said: [&lt;a href=&quot;file:dBRCkCBBar3QrKeJe5aVNr&quot;&gt;file:dBRCkCBBar3QrKeJe5aVNr&lt;/a&gt;]: Move metadata from LazilyPersistentVectors to PersistentVectors when the latter are created.&lt;/p&gt;</comment>
                    <comment id="22995" author="importer" created="Sun, 3 Oct 2010 16:08:00 -0500"  >&lt;p&gt;richhickey said: That diff doesn&apos;t seem to be the right one&lt;/p&gt;</comment>
                    <comment id="22996" author="importer" created="Sun, 3 Oct 2010 16:08:00 -0500"  >&lt;p&gt;chouser@n01se.net said: Bother.  I think I deleted my local copy of the correct patch after attaching the incorrect one here.&lt;/p&gt;

&lt;p&gt;It just added .withMeta(meta()) in LazilyPersistentVector&apos;s v() method, plus some related unit tests.  I&apos;ll recreate it when I get a chance.&lt;/p&gt;</comment>
                    <comment id="22997" author="importer" created="Sun, 3 Oct 2010 16:08:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #42, #113, #2, #20, #94, #96, #104, #119, #124, #127, #149, #162)&lt;/p&gt;</comment>
                    <comment id="25933" author="aredington" created="Fri, 12 Nov 2010 10:15:22 -0600"  >&lt;p&gt;Reported behavior is still observed in the latest development sources.&lt;/p&gt;</comment>
                    <comment id="26253" author="ataggart" created="Tue, 1 Mar 2011 01:45:06 -0600"  >&lt;p&gt;PersistentList.pop() will now create a new head of the forthcoming list if it doesn&apos;t share the same metadata instance.&lt;/p&gt;</comment>
                    <comment id="26267" author="stu" created="Fri, 4 Mar 2011 15:27:45 -0600"  >&lt;p&gt;This works as advertised, but I am unclear on what &lt;b&gt;should&lt;/b&gt; happen. Given&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;(a b)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;where both the conses have metadata, what rule specifies which metadata should be left after &lt;tt&gt;pop&lt;/tt&gt;? If there is a rule, we should document it, and I bet there are other breakages.&lt;/p&gt;</comment>
                    <comment id="26296" author="richhickey" created="Thu, 10 Mar 2011 11:32:07 -0600"  >&lt;p&gt;This is a non-problem (but the vector one Chouser found is a real problem). Lists are not going to create new heads to convey metadata on pop. Lists really are chains of things, not encapsulations of chains of things. The metadata of the second link is what it was, and shouldn&apos;t be lost by pop, i.e. pop should not construct a new list as it goes.&lt;/p&gt;</comment>
                    <comment id="26298" author="ataggart" created="Thu, 10 Mar 2011 12:50:55 -0600"  >&lt;p&gt;Very well. Note that the failure example chouser gave no longer occurs:&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; (let [v (with-meta [1 2 3] {:my :meta})]
         (map meta [(conj v 4) (pop v)]))
({:my :meta} {:my :meta})
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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>
                                            <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-139] defmulti should not add {:tag &apos;clojure.lang.MultiFn} to multimethod metatdata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-139</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;defmulti&apos;s current behavior of adding a {:tag &apos;clojure.lang.MultiFn} to the new multimethod&apos;s metadata interferes with providing a type hint for the return value of the multimethod.  This is easily fixed by deleting this behavior, as in the attached patch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13536">CLJ-139</key>
            <summary>defmulti should not add {:tag &apos;clojure.lang.MultiFn} to multimethod metatdata</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 2 Jul 2009 06:49:00 -0500</created>
                <updated>Mon, 11 Oct 2010 15:25:00 -0500</updated>
                    <resolved>Mon, 11 Oct 2010 15:25:00 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22951" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/139&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/139&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0003-Removed-tag-MultiFn-inserted-by-defmulti.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cTOAMyzSmr3QQreJe5aVNr/download/cTOAMyzSmr3QQreJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cTOAMyzSmr3QQreJe5aVNr/download/cTOAMyzSmr3QQreJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22952" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;davidmiller said: [&lt;a href=&quot;file:cTOAMyzSmr3QQreJe5aVNr&quot;&gt;file:cTOAMyzSmr3QQreJe5aVNr&lt;/a&gt;]: Patch to core.clj to fix defmulti behavior&lt;/p&gt;</comment>
                    <comment id="22953" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;aaron said: &lt;b&gt;before patch&lt;/b&gt; as of 167a73857a746e8dbeeb&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defmulti foo &quot;this is foo&quot; {:author &quot;me&quot; :arglists &apos;(&lt;span class=&quot;error&quot;&gt;&amp;#91;bar&amp;#93;&lt;/span&gt;)} type)&lt;br/&gt;
#&apos;user/foo&lt;br/&gt;
user=&amp;gt; (meta (var foo))&lt;br/&gt;
{:ns #&amp;lt;Namespace user&amp;gt;, :name foo, :arglists (&lt;span class=&quot;error&quot;&gt;&amp;#91;bar&amp;#93;&lt;/span&gt;), :author &quot;me&quot;, :doc &quot;this is foo&quot;, :line 1, :file &quot;NO_SOURCE_PATH&quot;, :tag clojure.lang.MultiFn}&lt;/p&gt;

&lt;p&gt;&lt;b&gt;after patch&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defmulti foo &quot;this is foo&quot; {:author &quot;me&quot; :arglists &apos;(&lt;span class=&quot;error&quot;&gt;&amp;#91;bar&amp;#93;&lt;/span&gt;)} type)&lt;br/&gt;
#&apos;user/foo&lt;br/&gt;
user=&amp;gt; (meta (var foo))&lt;br/&gt;
{:ns #&amp;lt;Namespace user&amp;gt;, :name foo, :arglists (&lt;span class=&quot;error&quot;&gt;&amp;#91;bar&amp;#93;&lt;/span&gt;), :author &quot;me&quot;, :doc &quot;this is foo&quot;, :line 1, :file &quot;NO_SOURCE_PATH&quot;}&lt;/p&gt;</comment>
                    <comment id="22954" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&lt;/p&gt;</comment>
                    <comment id="22955" author="importer" created="Mon, 11 Oct 2010 15:25:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#139, #278, #285, #368, #443, #430)&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-31] GC Issue 27: Disallow recur across try</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-31</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;Reported by richhickey, Jan 01, 2009
Right now will allow:

(loop [x 42]
  (when (pos? x)
    (binding [*out* *out*]
      (recur (dec x)))))

but the recur doesn&apos;t (can&apos;t) really happen in the scope of the binding&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13428">CLJ-31</key>
            <summary>GC Issue 27: Disallow recur across try</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="hiredman">Kevin Downey</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 14:06:00 -0500</created>
                <updated>Sat, 18 Dec 2010 08:41:40 -0600</updated>
                    <resolved>Fri, 17 Dec 2010 09:55:39 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22549" author="importer" created="Tue, 26 Oct 2010 00:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/31&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/31&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
31-recur-across-try.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aeZrIo4kWr352reJe5cbCb/download/aeZrIo4kWr352reJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aeZrIo4kWr352reJe5cbCb/download/aeZrIo4kWr352reJe5cbCb&lt;/a&gt;&lt;br/&gt;
31-recur-across-try2.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cffLE64syr369QeJe5cbLA/download/cffLE64syr369QeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cffLE64syr369QeJe5cbLA/download/cffLE64syr369QeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22550" author="importer" created="Tue, 26 Oct 2010 00:30:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                    <comment id="22551" author="importer" created="Tue, 26 Oct 2010 00:30:00 -0500"  >&lt;p&gt;hiredman said: [&lt;a href=&quot;file:aeZrIo4kWr352reJe5cbCb&quot;&gt;file:aeZrIo4kWr352reJe5cbCb&lt;/a&gt;]: patch to disallow recur across try&lt;/p&gt;</comment>
                    <comment id="22552" author="importer" created="Tue, 26 Oct 2010 00:30:00 -0500"  >&lt;p&gt;hiredman said: [&lt;a href=&quot;file:cffLE64syr369QeJe5cbLA&quot;&gt;file:cffLE64syr369QeJe5cbLA&lt;/a&gt;]: try #2, patch to disallow recur across try&lt;/p&gt;</comment>
                    <comment id="22553" author="importer" created="Tue, 26 Oct 2010 00:30:00 -0500"  >&lt;p&gt;hiredman said: did a try one, realized it didn&apos;t work and my tests were wrong, try 2 seems to actually work&lt;/p&gt;</comment>
                    <comment id="25903" author="stu" created="Sat, 30 Oct 2010 11:29:05 -0500"  >&lt;p&gt;Patch does two (related) things:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;throws compile-time exception if you recur across try&lt;/li&gt;
	&lt;li&gt;throws compile-time exception if you recur across dynamic binding&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Rich: is this the desired behavior?&lt;/p&gt;</comment>
                    <comment id="25906" author="richhickey" created="Sat, 30 Oct 2010 14:44:14 -0500"  >&lt;p&gt;It would be nice if the tests confirmed ok things still work, e.g. a full loop/recur inside a try etc&lt;/p&gt;</comment>
                    <comment id="25916" author="hiredman" created="Tue, 2 Nov 2010 15:23:31 -0500"  >&lt;p&gt;well, dynamic bindings are a try/finally pushing and popping the bindings&lt;/p&gt;</comment>
                    <comment id="25950" author="hiredman" created="Fri, 19 Nov 2010 21:46:55 -0600"  >&lt;p&gt;try #3 at the patch, now with some tests to check that things that are ok to do are still possible&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10025" name="31-recur-across-try3.diff" size="6670" author="hiredman" created="Fri, 19 Nov 2010 21:46: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>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-8] GC Issue 3: Re-enable detection of circular loads</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-8</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;Reported by richhickey, Dec 17, 2008
Was made a no-op &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; AOT/gen-class - need to distinguish cases

Comment 1 by richhickey, Dec 17, 2008
(No comment was entered &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; change.)
Owner: ---
Comment 2 by richhickey, Dec 18, 2008
(No comment was entered &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; change.)
Labels: Priority-High
Comment 3 by scgilardi, May 12, 2009
Rich, &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; you have an example of the problem with AOT/gen-class that motivated
disabling detection of circular loads? With that in hand, I&apos;d like to take a look at
fixing &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;.
Comment 4 by richhickey, May 13, 2009
You should just &lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; it out. I&apos;m not sure &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; it is just something I encountered on my
way to the &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; mechanism (and now isn&apos;t needed). However, you should hold off right
at the moment, as I&apos;m working on loading/classloader stuff.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13405">CLJ-8</key>
            <summary>GC Issue 3: Re-enable detection of circular loads</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="scgilardi">Stephen C. Gilardi</assignee>
                                <reporter username="scgilardi">Stephen C. Gilardi</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 14:45:00 -0500</created>
                <updated>Fri, 28 Jan 2011 09:24:22 -0600</updated>
                    <resolved>Fri, 28 Jan 2011 09:24:22 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="22472" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/8&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/8&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
load-tracking.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/arZXq-2qKr3R8teJe5aVNr/download/arZXq-2qKr3R8teJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/arZXq-2qKr3R8teJe5aVNr/download/arZXq-2qKr3R8teJe5aVNr&lt;/a&gt;&lt;br/&gt;
check-cyclic-load.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aUykkoZfSr35wNeJe5cbCb/download/aUykkoZfSr35wNeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aUykkoZfSr35wNeJe5cbCb/download/aUykkoZfSr35wNeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22473" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                    <comment id="22474" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;scgilardi said: I&apos;m working on this now. I plan to have more info by 19 October.&lt;/p&gt;</comment>
                    <comment id="22475" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #42, #113, #2, #20, #94, #96, #104, #119, #124, #127, #149, #162)&lt;/p&gt;</comment>
                    <comment id="22476" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:arZXq-2qKr3R8teJe5aVNr&quot;&gt;file:arZXq-2qKr3R8teJe5aVNr&lt;/a&gt;]: fixes tickets 8, 42, and 113&lt;/p&gt;</comment>
                    <comment id="22477" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;scgilardi said: please see my posting to the developer group&lt;/p&gt;</comment>
                    <comment id="22478" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:aUykkoZfSr35wNeJe5cbCb&quot;&gt;file:aUykkoZfSr35wNeJe5cbCb&lt;/a&gt;]: patch to detect/reject cyclic deps&lt;/p&gt;</comment>
                    <comment id="22479" author="importer" created="Thu, 30 Sep 2010 14:42:00 -0500"  >&lt;p&gt;scgilardi said: fresh patch that detects and rejects cyclic dependencies. based on today&apos;s master. tests included.&lt;/p&gt;</comment>
                    <comment id="26103" author="scgilardi" created="Fri, 7 Jan 2011 13:31:05 -0600"  >&lt;p&gt;I provided a patch for this. Is there anything further I can or must do to to move it along?&lt;/p&gt;</comment>
                    <comment id="26136" author="stu" created="Sat, 15 Jan 2011 15:50:44 -0600"  >&lt;p&gt;Had to recreate the patch almost from scratch. Haven&apos;t seen this problem before--when the git merge failed, it wouldn&apos;t create any .rej files to work with.&lt;/p&gt;

&lt;p&gt;Recreated patch is same as Steve&apos;s, except for a test configuration change to match current MASTER.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10081" name="0008-cyclic-deps-resolved.patch" size="10760" author="stu" created="Sat, 15 Jan 2011 15:50:44 -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>
</channel>
</rss>