<!--
RSS generated by JIRA (4.4#649-r158309) at Fri May 24 15:40:49 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/10004/SearchRequest-10004.xml?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>All inactive Clojure issues (Clojure JIRA)</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?requestId=10004</link>
        <description>All resolved or closed Clojure project issues, sorted by key descending.</description>
                <language>en-us</language>
                        <issue start="0" end="724" total="724"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[CLJ-1203] Fallback to hash-based comparison for non-Comparables in Util.compare()</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1203</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I oftentimes use sorted collections, and my comparator functions usually look like that:&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<item>
            <title>[CLJ-1101] *default-data-reader-fn* should be set!-able in REPL</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1101</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-927&quot; title=&quot;default tagged literal reader&quot;&gt;&lt;del&gt;CLJ-927&lt;/del&gt;&lt;/a&gt;, Nicola Mometto pointed out that &amp;#42;default-data-reader-fn* should be set!-able.  The fix needs to be added to clojure.main/with-bindings.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15813">CLJ-1101</key>
            <summary>*default-data-reader-fn* should be set!-able in REPL</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Sat, 3 Nov 2012 09:28:36 -0500</created>
                <updated>Fri, 24 May 2013 07:55:08 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:08 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29898" author="steveminer@gmail.com" created="Sat, 3 Nov 2012 09:32:36 -0500"  >&lt;p&gt;Add &amp;#42;default-data-reader-fn* to the special bindings in main.clj so that it is set!-able in the REPL&lt;/p&gt;</comment>
                    <comment id="30155" author="steveminer@gmail.com" created="Mon, 3 Dec 2012 10:07:37 -0600"  >&lt;p&gt;This is a one-liner that makes &amp;#42;default-data-reader-fn* convenient to use in the REPL, similar to how &amp;#42;data-readers* works.  I&apos;d like to have this fix in Clojure 1.5.&lt;/p&gt;</comment>
                    <comment id="30750" author="steveminer@gmail.com" created="Tue, 12 Mar 2013 20:10:02 -0500"  >&lt;p&gt;work-around for REPL:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(alter-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;-root #&apos;clojure.core/*&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;-data-reader-fn* (constantly my-&lt;span class=&quot;code-keyword&quot;&gt;default&lt;/span&gt;-reader))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11659" name="CLJ-1101-make-default-data-reader-fn-set-able-in-REPL.patch" size="850" author="steveminer@gmail.com" created="Sat, 3 Nov 2012 09:32:36 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="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-1099] better error message when passing non-seq to seq</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1099</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Design discussion &lt;a href=&quot;http://dev.clojure.org/display/design/Better+Error+Messages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This patch improves Clojure&apos;s error message for a single common error: passing a non-seq where a seq is neede. More importantly, it is intended as a prototype for other similar improvements in the future.&lt;/p&gt;

&lt;p&gt;Error message before:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(cons 1 2)
=&amp;gt; IllegalArgumentException Don&apos;t know how to create ISeq from: java.lang.Long
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Error message after:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (cons 1 2)
ExceptionInfo Don&apos;t know how to create ISeq from: java.lang.Long
user=&amp;gt; (ex-data *e)
{:instance 2}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15809">CLJ-1099</key>
            <summary>better error message when passing non-seq to seq</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="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>Thu, 1 Nov 2012 10:03:14 -0500</created>
                <updated>Fri, 24 May 2013 07:55:08 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:08 -0500</resolved>
                                            <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29932" author="michaelklishin" created="Mon, 12 Nov 2012 10:34:49 -0600"  >&lt;p&gt;Wouldn&apos;t it be better to make it read &quot;Don&apos;t know how to create ISeq from: 2 (java.lang.Long)&quot;? How many beginners will figure&lt;br/&gt;
out ex-data exists and how to use it?&lt;/p&gt;</comment>
                    <comment id="30946" author="stu" created="Fri, 12 Apr 2013 11:36:35 -0500"  >&lt;p&gt;Hi Michael,&lt;/p&gt;

&lt;p&gt;ex-info messages should not, in general, pr-str things into their bodies.  This raises the question of print-length and print-level in a place where the user doesn&apos;t have good control, while the whole point of ex-info is to be in the data business, not the string business. Users can control printing from ex-data any way they like.&lt;/p&gt;

&lt;p&gt;There are two possible ways to make beginners aware of ex-data: Tell them about it in one (or a few places) in docs, or in an infinite number of places saying &quot;This would have been useful here, but we didn&apos;t use it because you might not know about it.&quot;  I prefer the former.&lt;/p&gt;

&lt;p&gt;That said, I think it would be great to increase the visibility of ex-info and ex-data early on in documentation for beginners, and to make sure that things like exception printing in logs are flexible enough not to lose the benefits of ex-info.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11653" name="better-error-message-for-seq.patch" size="4724" author="stu" created="Thu, 1 Nov 2012 10:03:14 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1098] Extend CollFold and IKVReduce to nil</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1098</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, reduce-kv and fold throw when used on nil, because their respective protocols don&apos;t extend to nil. This seems strange, since Clojure tends to handle nils gracefully where possible, especially in places where collections are expected.&lt;/p&gt;

&lt;p&gt;See thread &lt;a href=&quot;https://groups.google.com/d/topic/clojure/tGI8sIKQoh0/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/tGI8sIKQoh0/discussion&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15808">CLJ-1098</key>
            <summary>Extend CollFold and IKVReduce to nil</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Wed, 31 Oct 2012 13:24:54 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 25 Jan 2013 07:40:32 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29882" author="bendlas" created="Wed, 31 Oct 2012 20:44:29 -0500"  >&lt;p&gt;Attached patch with tests&lt;/p&gt;</comment>
                    <comment id="30436" author="jafingerhut" created="Mon, 14 Jan 2013 11:04:24 -0600"  >&lt;p&gt;Another discussion thread: &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/xPDDybYGvmc&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/xPDDybYGvmc&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11648" name="0001-CLJ-1098-Implement-IKVReduce-and-CollFold-for-nil.patch" size="1739" author="bendlas" created="Wed, 31 Oct 2012 20:44:29 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1092] New function re-quote-replacement has incorrect :added metadata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1092</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I created the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-870&quot; title=&quot;clojure.string/replace behaves unexpectedly when \ or $ are part of the result string&quot;&gt;&lt;del&gt;CLJ-870&lt;/del&gt;&lt;/a&gt; that added the function re-quote-replacement before Clojure 1.4 was released, and I was apparently hoping it would get into that release.  It is in now, but incorrectly states that fn re-quote-replacement was added in 1.4.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15770">CLJ-1092</key>
            <summary>New function re-quote-replacement has incorrect :added metadata</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Oct 2012 20:42:38 -0500</created>
                <updated>Sat, 22 Dec 2012 09:53:50 -0600</updated>
                    <resolved>Sat, 22 Dec 2012 09:53:50 -0600</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29771" author="jafingerhut" created="Mon, 22 Oct 2012 21:01:29 -0500"  >&lt;p&gt;And before creating this patch, I did a diff between Clojure 1.4 and 1.5-beta1 source code, and verified that every other function with :added metadata that has been added since 1.4 says &quot;1.5&quot;.  Only re-quote-replacement was mislabeled in this way.&lt;/p&gt;</comment>
                    <comment id="30068" author="redinger" created="Tue, 27 Nov 2012 15:42:07 -0600"  >&lt;p&gt;As you&apos;d expect, this patch applies cleanly and improves the correctness of the documentation.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11603" name="fix-added-metadata-for-re-quote-replacement.txt" size="893" author="jafingerhut" created="Mon, 22 Oct 2012 20:42:38 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1091] update changes.md to include 1.5 changes</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1091</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="15769">CLJ-1091</key>
            <summary>update changes.md to include 1.5 changes</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="halgari">Timothy Baldridge</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Oct 2012 19:50:19 -0500</created>
                <updated>Tue, 11 Dec 2012 13:09:08 -0600</updated>
                    <resolved>Tue, 11 Dec 2012 13:09:08 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29953" author="jafingerhut" created="Thu, 15 Nov 2012 11:01:27 -0600"  >&lt;p&gt;changes-draft-v1.md is not a patch, but an outline of a proposed new changes.md file for Clojure 1.5 with some of the content fleshed out.  It still has lots of occurrences of &quot;TBD&quot; for &quot;To Be Documented&quot; in it.&lt;/p&gt;

&lt;p&gt;It does mention every ticket that had a patch committed since Clojure 1.4.0 until Nov 15 2012.&lt;/p&gt;

&lt;p&gt;I am hoping someone who is more knowledgeable of the &quot;TBD&quot; parts takes this and runs with it.&lt;/p&gt;</comment>
                    <comment id="30008" author="jafingerhut" created="Thu, 22 Nov 2012 19:16:57 -0600"  >&lt;p&gt;changes-draft-v2.md is very similar to the earlier changes-draft-v1.md described above, but has a few additions.&lt;/p&gt;</comment>
                    <comment id="30040" author="halgari" created="Mon, 26 Nov 2012 14:41:58 -0600"  >&lt;p&gt;V3 of the draft...should be almost good to go. Someone with more info on reducers should take a look at that section as have yet to actually use them much. &lt;/p&gt;</comment>
                    <comment id="30044" author="jafingerhut" created="Mon, 26 Nov 2012 20:47:24 -0600"  >&lt;p&gt;Removed V2 of the draft as Timothy&apos;s V3 had all of it and more.&lt;/p&gt;</comment>
                    <comment id="30049" author="halgari" created="Tue, 27 Nov 2012 08:52:19 -0600"  >&lt;p&gt;Fleshed out the reducers section a bit. &lt;/p&gt;</comment>
                    <comment id="30050" author="halgari" created="Tue, 27 Nov 2012 08:53:33 -0600"  >&lt;p&gt;Alright, I think this is ready for a final review by someone besides me. &lt;/p&gt;</comment>
                    <comment id="30077" author="redinger" created="Wed, 28 Nov 2012 12:48:22 -0600"  >&lt;p&gt;Editorial cleanup&lt;/p&gt;</comment>
                    <comment id="30078" author="jafingerhut" created="Wed, 28 Nov 2012 12:56:01 -0600"  >&lt;p&gt;Christopher, isn&apos;t this file intended to be in Markdown format, not HTML?&lt;/p&gt;</comment>
                    <comment id="30079" author="redinger" created="Wed, 28 Nov 2012 12:58:30 -0600"  >&lt;p&gt;uploading the correct md file&lt;/p&gt;</comment>
                    <comment id="30080" author="jafingerhut" created="Wed, 28 Nov 2012 13:12:00 -0600"  >&lt;p&gt;changes-draft-v6.md same as v5, except for a couple of spelling corrections.&lt;/p&gt;</comment>
                    <comment id="30083" author="halgari" created="Thu, 29 Nov 2012 08:38:52 -0600"  >&lt;p&gt;Missing desc on when-&amp;gt;. Fixed in v7 of the doc&lt;/p&gt;</comment>
                    <comment id="30143" author="richhickey" created="Sun, 2 Dec 2012 18:37:58 -0600"  >&lt;p&gt;&quot;1.1 Clojure 1.5 requires Java 1.6 or later&quot;&lt;/p&gt;

&lt;p&gt;did you mean &quot;building Clojure 1.5&quot;?&lt;/p&gt;

&lt;p&gt;I don&apos;t know that anything requires 1.6&lt;/p&gt;</comment>
                    <comment id="30144" author="richhickey" created="Sun, 2 Dec 2012 18:41:29 -0600"  >&lt;p&gt;test-&amp;gt;, let-&amp;gt; when-&amp;gt; &lt;/p&gt;

&lt;p&gt;are now:&lt;/p&gt;

&lt;p&gt;cond-&amp;gt;, as-&amp;gt; and some-&amp;gt;&lt;/p&gt;</comment>
                    <comment id="30145" author="jafingerhut" created="Sun, 2 Dec 2012 18:49:18 -0600"  >&lt;p&gt;I&apos;ll put up an updated version soon, but that headline wasn&apos;t properly updated to match the later occurrence of it in the body, which is: &quot;Clojure 1.5 reducers library requires Java 6 or later&quot;.  Is it true that the ForkJoin library requires Java 6 or later?  If not, how can it be made to work with Java 5?&lt;/p&gt;</comment>
                    <comment id="30146" author="jafingerhut" created="Sun, 2 Dec 2012 20:42:23 -0600"  >&lt;p&gt;changes-draft-v8.md updates the table of contents headings to match those in the body, and updates names of new threading macros.&lt;/p&gt;</comment>
                    <comment id="30152" author="steveminer@gmail.com" created="Mon, 3 Dec 2012 09:40:58 -0600"  >&lt;p&gt;changes-draft-v8.md, section 2.4, needs an update for description of some-&amp;gt;.  The document says &quot;logical true&quot; where it should say &quot;not nil&quot;.  Same comment applies to some-&amp;gt;&amp;gt;.  The point is that false will thread through the forms.  This is a change from the replaced when-&amp;gt; (in 1.5-beta1).&lt;/p&gt;</comment>
                    <comment id="30154" author="halgari" created="Mon, 3 Dec 2012 10:02:39 -0600"  >&lt;p&gt;updated to reflect changes to some-&amp;gt; and some-&amp;gt;&amp;gt;&lt;/p&gt;</comment>
                    <comment id="30156" author="steveminer@gmail.com" created="Mon, 3 Dec 2012 10:15:23 -0600"  >&lt;p&gt;Sorry to nit pick, but there are two more &quot;logical true&quot; phrases in v9 that need to change to &quot;not nil&quot; in those some-&amp;gt; and some-&amp;gt;&amp;gt; descriptions.&lt;/p&gt;</comment>
                    <comment id="30157" author="halgari" created="Mon, 3 Dec 2012 10:22:18 -0600"  >&lt;p&gt;Not a problem. Thanks for looking it over!&lt;/p&gt;</comment>
                    <comment id="30169" author="stu" created="Mon, 3 Dec 2012 13:30:36 -0600"  >&lt;p&gt;I find the following sentence a little vague: &quot;Clojure 1.5 can still be compiled and run with Java 5, but the test suite will not pass due to the lack of support for ForkJoin.&quot;&lt;/p&gt;

&lt;p&gt;The problem is the application of the &quot;but&quot; to both parts of the conjunction. Isn&apos;t the intent actually: &quot;Clojure can run with Java version 1.5 or later. Running the Clojure build requires 1.6, in order to test features that work with ForkJoin.&quot;&lt;/p&gt;</comment>
                    <comment id="30170" author="jafingerhut" created="Mon, 3 Dec 2012 13:52:27 -0600"  >&lt;p&gt;Stuart H, that is almost the intent, and probably close enough for this kind of documentation.&lt;/p&gt;

&lt;p&gt;The full gory details are as follows:&lt;/p&gt;

&lt;p&gt;Clojure can build and run with Java version 1.5 or later.  A Java version 1.5 build of Clojure only works if you do not run the test suite, e.g. by using the command &quot;ant jar&quot;.  To build Clojure including running the test suite, or to use the new reducers library, requires Java 1.6 or later.&lt;/p&gt;

&lt;p&gt;If the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1109&quot; title=&quot;Oracle Java 5 fails to run tests when building Clojure&quot;&gt;&lt;del&gt;CLJ-1109&lt;/del&gt;&lt;/a&gt; is applied, the full gory details become simpler to state:&lt;/p&gt;

&lt;p&gt;Clojure can build and run with Java version 1.5 or later.  Using the new reducers library requires Java 1.6 or later.&lt;/p&gt;</comment>
                    <comment id="30171" author="jafingerhut" created="Mon, 3 Dec 2012 13:59:40 -0600"  >&lt;p&gt;changes-draft-v11.md changes the description of Java 5 limitations to match the current gory details, and hopefully address Stuart H&apos;s concerns raised above.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11739" name="changes-draft-v10.md" size="18448" author="halgari" created="Mon, 3 Dec 2012 10:21:42 -0600" />
                    <attachment id="11744" name="changes-draft-v11.md" size="18550" author="jafingerhut" created="Mon, 3 Dec 2012 13:59:40 -0600" />
                    <attachment id="11719" name="changes-draft-v5.md" size="18318" author="redinger" created="Wed, 28 Nov 2012 12:58:30 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-1089] clojure.java.io/copy interprets read count of 0 as eos</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1089</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;According to the interface &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(&quot;&gt;http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(&lt;/a&gt;)&lt;br/&gt;
InputStream.read() family of methods return -1 when the end of stream is reached.&lt;/p&gt;

&lt;p&gt;do-copy methods currently use a test: (pos? size) to determine whether eos is reached. This mostly works, but the specification is pretty clear in that InputStream implementations are allowed to return reads of zero bytes before returning more bytes.&lt;/p&gt;

&lt;p&gt;##EDIT changed title of ticket from &quot;clojure.java.io/copy should test for -1 instead of 0 for end of stream&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15767">CLJ-1089</key>
            <summary>clojure.java.io/copy interprets read count of 0 as eos</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Oct 2012 15:35:15 -0500</created>
                <updated>Mon, 22 Oct 2012 16:57:16 -0500</updated>
                    <resolved>Mon, 22 Oct 2012 16:57:16 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29758" author="bendlas" created="Mon, 22 Oct 2012 15:40:47 -0500"  >&lt;p&gt;Attached patch changes do-copy methods to test for -1&lt;/p&gt;</comment>
                    <comment id="29759" author="jafingerhut" created="Mon, 22 Oct 2012 16:56:34 -0500"  >&lt;p&gt;Herwig, can you elaborate on &quot;the specification is pretty clear in that InputStream implementations are allowed to return reads of zero bytes before returning more bytes&quot;?&lt;/p&gt;

&lt;p&gt;I ask because in the very InputStream documentation page you link to, it seems to explicitly say the opposite of what you claim: &quot;If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.&quot;&lt;/p&gt;</comment>
                    <comment id="29760" author="bendlas" created="Mon, 22 Oct 2012 16:57:16 -0500"  >&lt;p&gt;I reread the spec for InputStream.read and it clearly says &lt;/p&gt;

&lt;p&gt;&quot;If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.&quot;&lt;/p&gt;

&lt;p&gt;The reason I originally thought of this as an issue was a misbehaving ServletInputStream from Jetty.&lt;/p&gt;

&lt;p&gt;I closed the issue as declined. Sorry for the noise!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11599" name="0001-CLJ-1089-clojure.java.io-do-copy-methods-determine-e.patch" size="1984" author="bendlas" created="Mon, 22 Oct 2012 15:40:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1085] clojure.main/repl unconditionally refers REPL utilities into *ns*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1085</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A number of vars from &lt;tt&gt;clojure.repl&lt;/tt&gt;, &lt;tt&gt;clojure.java.javadoc&lt;/tt&gt;, and &lt;tt&gt;clojure.pprint&lt;/tt&gt; are unconditionally referred into &lt;tt&gt;&amp;#42;ns&amp;#42;&lt;/tt&gt; by &lt;tt&gt;clojure.main/repl&lt;/tt&gt;.  This is fine when it is being used e.g. as the primary driver of a terminal-bound Clojure REPL, but other usages can end up bringing those utility vars into namespaces other than &lt;tt&gt;&apos;user&lt;/tt&gt;.  This can cause problems if &lt;tt&gt;clojure.main/repl&lt;/tt&gt; is used to drive a REPL within namespaces that already have referred or interned vars with the same names as those utility vars, e.g.:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;$ java -jar ~/.m2/repository/org/clojure/clojure/1.5.0-alpha6/clojure-1.5.0-alpha6.jar
Clojure 1.5.0-alpha6
user=&amp;gt; (ns foo)
nil
foo=&amp;gt; (defn pp [] &lt;span class=&quot;code-quote&quot;&gt;&quot;hi!&quot;&lt;/span&gt;)
#&apos;foo/pp
foo=&amp;gt; (pp)
&lt;span class=&quot;code-quote&quot;&gt;&quot;hi!&quot;&lt;/span&gt;
foo=&amp;gt; (clojure.main/repl)
foo=&amp;gt; (pp)
nil
nil
foo=&amp;gt; (defn pp [] &lt;span class=&quot;code-quote&quot;&gt;&quot;whoops&quot;&lt;/span&gt;)
CompilerException java.lang.IllegalStateException: pp already refers to: #&apos;clojure.pprint/pp in namespace: foo, compiling:(NO_SOURCE_PATH:7:1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Worse, nREPL uses &lt;tt&gt;clojure.main/repl&lt;/tt&gt; (in large part to maximize the consistency of REPL behaviour across different Clojure versions), where each user expression is evaluated through a separate &lt;tt&gt;clojure.main/repl&lt;/tt&gt; invocation.  This leads to the same problems as above, but for every nREPL user, session, and expression (reported @ &lt;a href=&quot;http://dev.clojure.org/jira/browse/NREPL-31&quot; title=&quot;REPL utilities are refered into *ns* prior to every expression evaluation&quot;&gt;&lt;del&gt;NREPL-31&lt;/del&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A simple fix for this is to perform these refers only if &lt;tt&gt;&amp;#42;ns&amp;#42;&lt;/tt&gt; is &lt;tt&gt;&apos;user&lt;/tt&gt; (which, AFAICT, was the only intended effect of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-310&quot; title=&quot;clojure.repl namespace&quot;&gt;&lt;del&gt;CLJ-310&lt;/del&gt;&lt;/a&gt;, &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-454&quot; title=&quot;docstrings for special ops&quot;&gt;&lt;del&gt;CLJ-454&lt;/del&gt;&lt;/a&gt;, and &lt;a href=&quot;https://github.com/clojure/clojure/commit/04764db&quot;&gt;https://github.com/clojure/clojure/commit/04764db&lt;/a&gt;, the changes that added these automatic implicit refers to &lt;tt&gt;clojure.main/repl&lt;/tt&gt;).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15744">CLJ-1085</key>
            <summary>clojure.main/repl unconditionally refers REPL utilities into *ns*</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Oct 2012 13:33:36 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29628" author="cemerick" created="Wed, 10 Oct 2012 13:36:52 -0500"  >&lt;p&gt;Patch attached to only refer in the utility vars if in the &lt;tt&gt;user&lt;/tt&gt; namespace.&lt;/p&gt;</comment>
                    <comment id="29629" author="steveminer@gmail.com" created="Wed, 10 Oct 2012 14:03:48 -0500"  >&lt;p&gt;It would probably be better to test with ns-name (as opposed to comparing strings):&lt;/p&gt;

&lt;p&gt;    (= &apos;user (ns-name &lt;b&gt;ns&lt;/b&gt;))&lt;/p&gt;</comment>
                    <comment id="29630" author="hiredman" created="Wed, 10 Oct 2012 14:18:31 -0500"  >&lt;p&gt;I don&apos;t follow how it is required to call `clojure.main/repl` for every input&lt;/p&gt;</comment>
                    <comment id="29631" author="cemerick" created="Wed, 10 Oct 2012 14:19:36 -0500"  >&lt;p&gt;Gah, of course.  :-/  Patch updated.&lt;/p&gt;</comment>
                    <comment id="29632" author="cemerick" created="Wed, 10 Oct 2012 14:32:42 -0500"  >&lt;p&gt;@Kevin: It&apos;s not &lt;em&gt;required&lt;/em&gt;, but I found it far more straightforward to not try to pretend that the underlying transport was stream-based when it&apos;s actually message-based.  It also means that sessions can be very lightweight: unless code is being evaluated within a session, it is not occupying a thread, and takes up only as much space as its map of thread-local bindings.&lt;/p&gt;</comment>
                    <comment id="29649" author="cemerick" created="Mon, 15 Oct 2012 05:10:04 -0500"  >&lt;p&gt;Based on discussion on clojure-dev, I have attached an alternative patch ({{&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1085&quot; title=&quot;clojure.main/repl unconditionally refers REPL utilities into *ns*&quot;&gt;&lt;del&gt;CLJ-1085&lt;/del&gt;&lt;/a&gt;-refactor.diff}}), which:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;breaks out the libspecs specifying the implicit refers into their own var (so that they can be consistently applied by other REPL implementations)&lt;/li&gt;
	&lt;li&gt;moves the default &lt;tt&gt;require&lt;/tt&gt; of the libspecs to be invoked only when REPL is started from &lt;tt&gt;clojure.main&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="29696" author="stu" created="Fri, 19 Oct 2012 14:12:51 -0500"  >&lt;p&gt;Screened and liked the second &quot;refactor&quot; patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11549" name="CLJ-1085.diff" size="1037" author="cemerick" created="Wed, 10 Oct 2012 14:19:36 -0500" />
                    <attachment id="11560" name="CLJ-1085-refactor.diff" size="1844" author="cemerick" created="Mon, 15 Oct 2012 04:47:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1084] (object-array [1]) is ~3x slower than (object-array (rseq [1]))</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1084</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;{{user=&amp;gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 10000000&amp;#93;&lt;/span&gt; (object-array &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;)))&lt;br/&gt;
&quot;Elapsed time: 1178.116257 msecs&quot;&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 10000000&amp;#93;&lt;/span&gt; (object-array (rseq &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;))))&lt;br/&gt;
&quot;Elapsed time: 422.42248 msecs&quot;&lt;br/&gt;
nil}}&lt;/p&gt;


&lt;p&gt;This appears to be because PersistentVector$ChunkedSeq does not implement Counted, so RT.count is iterating the ChunkedSeq to get its count.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15743">CLJ-1084</key>
            <summary>(object-array [1]) is ~3x slower than (object-array (rseq [1]))</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Tue, 9 Oct 2012 14:07:53 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29623" author="pjstadig" created="Tue, 9 Oct 2012 14:11:21 -0500"  >&lt;p&gt;I don&apos;t believe this is Major priority, but I cannot edit the ticket after having created it.&lt;/p&gt;</comment>
                    <comment id="29633" author="tsdh" created="Thu, 11 Oct 2012 10:17:56 -0500"  >&lt;p&gt;This patch makes PersistentVector$ChunkedSeq implement Counted.&lt;/p&gt;

&lt;p&gt;Performance before:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(let [v (vec (range 10000))
      vs (seq v)]
  (time (dotimes [_ 10000]
          (count v)))
  (time (dotimes [_ 10000]
          (count vs))))
;&quot;Elapsed time: 0.862259 msecs&quot;
;&quot;Elapsed time: 7228.72486 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Performance after (with the patch):&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(let [v (vec (range 10000))
      vs (seq v)]
  (time (dotimes [_ 10000]
          (count v)))
  (time (dotimes [_ 10000]
          (count vs))))
;&quot;Elapsed time: 0.967301 msecs&quot;
;&quot;Elapsed time: 0.99391 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also with Paul&apos;s test case.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(time (dotimes [_ 10000000] (object-array [1])))
;&quot;Elapsed time: 1668.346997 msecs&quot;
(time (dotimes [_ 10000000] (object-array (rseq [1]))))
;&quot;Elapsed time: 662.820591 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(time (dotimes [_ 10000000] (object-array [1])))
;&quot;Elapsed time: 757.084577 msecs&quot;
(time (dotimes [_ 10000000] (object-array (rseq [1]))))
;&quot;Elapsed time: 680.602921 msecs&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29693" author="stu" created="Fri, 19 Oct 2012 13:46:44 -0500"  >&lt;p&gt;Two patches to be applied together, the 10/19 patch adds tests and updates to latest test.generative.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11551" name="0001-Make-PersistentVector-ChunkedSeq-implement-Counted.patch" size="1168" author="tsdh" created="Thu, 11 Oct 2012 10:17:56 -0500" />
                    <attachment id="11580" name="CLJ-1084-tests.patch" size="1575" author="stu" created="Fri, 19 Oct 2012 13:46:44 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1075] deftype: compiler error on set! for mutable field</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1075</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The following code demonstrates the error in a minimal example:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defprotocol IBlob (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-sth [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, x]))

(deftype Blob [^{:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} a]
  IBlob
  (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-sth [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, x] 
    (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (/ 1 x) 
      (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Throwable t 
        (set! a (inc a))))
        (inc x)))

(deftype Blob2 [^{:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} a]
  IBlob
  (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-sth [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, x] 
    (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; (/ 1 x) 
      (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Throwable t 
        (set! a (inc a))))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compiling &lt;b&gt;Blob&lt;/b&gt; results in the following exception:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CompilerException java.lang.IllegalArgumentException: Cannot assign to non-mutable: a&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Compiling &lt;b&gt;Blob2&lt;/b&gt; works as expected.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15718">CLJ-1075</key>
            <summary>deftype: compiler error on set! for mutable field</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gv">Gunnar V&#246;lkel</reporter>
                        <labels>
                    </labels>
                <created>Mon, 24 Sep 2012 08:53:01 -0500</created>
                <updated>Mon, 3 Dec 2012 10:52:03 -0600</updated>
                    <resolved>Mon, 3 Dec 2012 10:52:03 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29529" author="chouser@n01se.net" created="Mon, 24 Sep 2012 09:13:35 -0500"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defmethod print-method clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$LocalBinding 
  [^clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$LocalBinding o w]
  (.write w
    (str &lt;span class=&quot;code-quote&quot;&gt;&quot;#&amp;lt;LB &quot;&lt;/span&gt;
      (binding [*print-meta* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
        (pr-str {:sym (.-sym o)
                 :tag (.-tag o)
                 :idx (.-idx o)
                 :name (.-name o)
                 :isArg (.-isArg o)
                 :canBeCleared (.canBeCleared o)
                 :recurMistmatch (.-recurMistmatch o)})) &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;gt;&quot;&lt;/span&gt;)))

(defmacro prn-env []
  (doseq [[_ lb] &amp;amp;env]
    (prn lb)))

(deftype T [^:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable x]
  clojure.lang.IDeref
  (deref [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;]
    (&lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt;
      (&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; Exception e
        (prn-env)
        (set! x 0)))
    1))

#&amp;lt;LB {:sym ^{:&lt;span class=&quot;code-keyword&quot;&gt;volatile&lt;/span&gt;-mutable &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;} x, :tag nil, :idx -1, :name &lt;span class=&quot;code-quote&quot;&gt;&quot;x&quot;&lt;/span&gt;, :isArg &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;, :canBeCleared &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :recurMistmatch &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;}&amp;gt;
#&amp;lt;LB {:sym e, :tag Exception, :idx 3, :name &lt;span class=&quot;code-quote&quot;&gt;&quot;e&quot;&lt;/span&gt;, :isArg &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;, :canBeCleared &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :recurMistmatch &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;}&amp;gt;
#&amp;lt;LB {:sym &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, :tag compile__stub.user.T, :idx 0, :name &lt;span class=&quot;code-quote&quot;&gt;&quot;&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;&quot;&lt;/span&gt;, :isArg &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;, :canBeCleared &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;, :recurMistmatch &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;}&amp;gt;
CompilerException java.lang.IllegalArgumentException: Cannot assign to non-mutable: x, compiling:(NO_SOURCE_PATH:1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29530" author="gv" created="Mon, 24 Sep 2012 09:21:56 -0500"  >&lt;p&gt;As a workaround you can create a setter method for that field, e.g.&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(set-a [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;, na] (set! a na))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29531" author="jafingerhut" created="Mon, 24 Sep 2012 10:06:59 -0500"  >&lt;p&gt;Is this the same issue as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1023&quot; title=&quot;non-tail-position try block breaks mutable fields in deftype&quot;&gt;&lt;del&gt;CLJ-1023&lt;/del&gt;&lt;/a&gt;?&lt;/p&gt;</comment>
                    <comment id="29594" author="gv" created="Thu, 4 Oct 2012 04:15:31 -0500"  >&lt;p&gt;That one looks very similar, yes.&lt;br/&gt;
The &quot;non-tail try-catch as closure&quot; being the problem, would explain the examples above, as well.&lt;/p&gt;</comment>
                    <comment id="30159" author="halgari" created="Mon, 3 Dec 2012 10:52:03 -0600"  >&lt;p&gt;closing as duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1023&quot; title=&quot;non-tail-position try block breaks mutable fields in deftype&quot;&gt;&lt;del&gt;CLJ-1023&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1072] Replace old metadata reader macro syntax</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1072</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;5 files still have old metadata reader syntax hash-caret instead of just caret:&lt;/p&gt;

&lt;p&gt;src/clj/clojure/core.clj&lt;br/&gt;
src/clj/clojure/gvec.clj&lt;br/&gt;
src/clj/clojure/java/browse_ui.clj&lt;br/&gt;
src/clj/clojure/java/io.clj&lt;br/&gt;
src/clj/clojure/repl.clj&lt;/p&gt;</description>
                <environment></environment>
            <key id="15709">CLJ-1072</key>
            <summary>Replace old metadata reader macro syntax</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="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="samaaron">Sam Aaron</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Sep 2012 05:30:17 -0500</created>
                <updated>Fri, 24 May 2013 07:55:10 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:10 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29511" author="stuart.sierra" created="Fri, 21 Sep 2012 07:56:24 -0500"  >&lt;p&gt;Modified this ticket to cover all remaining cases of old metadata syntax. Added patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11515" name="0001-CLJ-1072-Replace-old-metadata-reader-macro-syntax.patch" size="8627" author="stuart.sierra" created="Fri, 21 Sep 2012 07:56:24 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1071] ExceptionInfo does no abstraction</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1071</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There oughtta be an interface&lt;/p&gt;</description>
                <environment></environment>
            <key id="15703">CLJ-1071</key>
            <summary>ExceptionInfo does no abstraction</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Mon, 17 Sep 2012 06:32:54 -0500</created>
                <updated>Fri, 21 Sep 2012 14:21:33 -0500</updated>
                    <resolved>Fri, 21 Sep 2012 14:21:33 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29481" author="stuart.sierra" created="Tue, 18 Sep 2012 08:44:10 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                    <comment id="29482" author="fogus" created="Tue, 18 Sep 2012 08:46:36 -0500"  >&lt;p&gt;Looks fine to me.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11507" name="clj-1071-iexceptioninfo.patch" size="3738" author="stu" created="Mon, 17 Sep 2012 06:45:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1070] PersistentQueue&apos;s hash function does not match its equality</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1070</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There are two issues:&lt;/p&gt;

&lt;p&gt;1) PersistentQueue&apos;s hash function doesn&apos;t match its equiv function:&lt;/p&gt;

&lt;p&gt;(def iq (conj clojure.lang.PersistentQueue/EMPTY (Integer. -1)))&lt;br/&gt;
(def lq (conj clojure.lang.PersistentQueue/EMPTY (Long. -1)))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;(= iq lq) (= (hash iq) (hash lq))&amp;#93;&lt;/span&gt;&lt;br/&gt;
;=&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;true false&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;2) PersistentQueue&apos;s hash function doesn&apos;t match PersistentVector&apos;s hash:&lt;/p&gt;

&lt;p&gt;(def q (conj clojure.lang.PersistentQueue/EMPTY 1 2 3))&lt;br/&gt;
[(= &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; q) (= (hash &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;) (hash q))]&lt;br/&gt;
;=&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;true false&amp;#93;&lt;/span&gt;&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15699">CLJ-1070</key>
            <summary>PersistentQueue&apos;s hash function does not match its equality</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="ppotter">Philip Potter</assignee>
                                <reporter username="ppotter">Philip Potter</reporter>
                        <labels>
                    </labels>
                <created>Sat, 15 Sep 2012 12:26:38 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29450" author="ppotter" created="Sat, 15 Sep 2012 13:52:56 -0500"  >&lt;p&gt;Clojure-dev discussion: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/ME3-Ke-RbNk/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/ME3-Ke-RbNk/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29451" author="ppotter" created="Sat, 15 Sep 2012 14:34:14 -0500"  >&lt;p&gt;Attached patch 001-make-PersistentQueue-hash-match-equiv.diff, 15/Sep/12.&lt;/p&gt;</comment>
                    <comment id="29454" author="ppotter" created="Sat, 15 Sep 2012 16:56:06 -0500"  >&lt;p&gt;Attached 002-make-PersistentQueue-hash-match-equiv.diff, 15/Sep/12. This patch supercedes 001-make-PersistentQueue-hash-match-equiv.diff.&lt;/p&gt;

&lt;p&gt;Replaced test code which calls to Util/hasheq with code which calls hash instead.&lt;/p&gt;

&lt;p&gt;This patch has a minor conflict with my patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1059&quot; title=&quot;PersistentQueue doesn&amp;#39;t implement java.util.List, causing nontransitive equality&quot;&gt;CLJ-1059&lt;/a&gt;, since they both add an interface to PersistentQueue (IHashEq here, List for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1059&quot; title=&quot;PersistentQueue doesn&amp;#39;t implement java.util.List, causing nontransitive equality&quot;&gt;CLJ-1059&lt;/a&gt;).&lt;/p&gt;</comment>
                    <comment id="29477" author="chouser@n01se.net" created="Tue, 18 Sep 2012 01:38:39 -0500"  >&lt;p&gt;Thanks for the patch, Philip, it looks good to me.&lt;/p&gt;

&lt;p&gt;It really is a pity the implementations of hashCode and hasheq are duplicated.  I wonder how important it is to extend Obj?  Regardless, that&apos;s the approach PersistentQueue was already taking, so changing that would be outside the scope of this ticket anyway.&lt;/p&gt;

&lt;p&gt;I can&apos;t apply this patch with &quot;git am&quot;, but &quot;patch -p 1&quot; works fine.  I&apos;m hoping this is a configuration problem on my end, so I&apos;m marking this screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11499" name="001-fix-PersistentQueue-hash.clj" size="2718" author="bronsa" created="Sat, 15 Sep 2012 14:02:04 -0500" />
                    <attachment id="11500" name="001-make-PersistentQueue-hash-match-equiv.diff" size="2539" author="ppotter" created="Sat, 15 Sep 2012 14:34:14 -0500" />
                    <attachment id="11502" name="002-make-PersistentQueue-hash-match-equiv.diff" size="2320" author="ppotter" created="Sat, 15 Sep 2012 16:56:06 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1069] data.priority-map has no artifacts information in the README</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1069</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;data.priority-map README has no artifacts information and does not conform to the Contrib README standards in any way. Because clojure-dev is a closed group, I am filing it here&lt;/p&gt;</description>
                <environment></environment>
            <key id="15696">CLJ-1069</key>
            <summary>data.priority-map has no artifacts information in the README</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 14:07:32 -0500</created>
                <updated>Fri, 14 Sep 2012 15:41:31 -0500</updated>
                    <resolved>Fri, 14 Sep 2012 15:41:31 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29443" author="jafingerhut" created="Fri, 14 Sep 2012 15:41:31 -0500"  >&lt;p&gt;This better belongs as a ticket for the JIRA project specifically for data.priority-map.  It is here: &lt;a href=&quot;http://dev.clojure.org/jira/browse/DPRIMAP&quot;&gt;http://dev.clojure.org/jira/browse/DPRIMAP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have filed a ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/DPRIMAP-2&quot; title=&quot;data.priority-map has no artifacts information in the README&quot;&gt;&lt;del&gt;DPRIMAP-2&lt;/del&gt;&lt;/a&gt; for that project, and will close this one.&lt;/p&gt;

&lt;p&gt;You can find a complete list for all projects here: &lt;a href=&quot;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&quot;&gt;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1068] algo.monads README has no artifacts information</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1068</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;algo.monads README has no artifacts information and does not conform to the Contrib README standards in any way. Because clojure-dev is a closed group, I am filing it here&lt;/p&gt;</description>
                <environment></environment>
            <key id="15695">CLJ-1068</key>
            <summary>algo.monads README has no artifacts information</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 14:06:47 -0500</created>
                <updated>Fri, 14 Sep 2012 15:39:10 -0500</updated>
                    <resolved>Fri, 14 Sep 2012 15:39:10 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29442" author="jafingerhut" created="Fri, 14 Sep 2012 15:38:50 -0500"  >&lt;p&gt;This better belongs as a ticket for the JIRA project specifically for algo.monads.  It is here: &lt;a href=&quot;http://dev.clojure.org/jira/browse/ALGOM&quot;&gt;http://dev.clojure.org/jira/browse/ALGOM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have filed a ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/ALGOM-6&quot; title=&quot;algo.monads README has no artifacts information&quot;&gt;ALGOM-6&lt;/a&gt; for that project, and will close this one.&lt;/p&gt;

&lt;p&gt;You can find a complete list for all projects here: &lt;a href=&quot;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&quot;&gt;http://dev.clojure.org/jira/secure/BrowseProjects.jspa#all&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-1067] Fix error message inconsistencies in Symbol and Keyword</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1067</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;1. There are some ugly and unnecessary &amp;#8211; but harmless &amp;#8211; inconsistencies between Symbol and Keyword:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(.run &apos;foo);    =&amp;gt; ArityException Wrong number of args (0) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)
(.run :foo);    =&amp;gt; UnsupportedOperationException   clojure.lang.Keyword.run (Keyword.java:97)
(.call &apos;foo);   =&amp;gt; ArityException Wrong number of args (0) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)
(.call :foo);   =&amp;gt; IllegalArgumentException Wrong number of args passed to keyword: :foo  clojure.lang.Keyword.throwArity (Keyword.java:88)
(.invoke &apos;foo); =&amp;gt; ArityException Wrong number of args (0) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)
(.invoke :foo); =&amp;gt; IllegalArgumentException Wrong number of args passed to keyword: :foo  clojure.lang.Keyword.throwArity (Keyword.java:88)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;2. Keyword.java contains a lot of code that has already been factored out to AFn.java.&lt;/p&gt;

&lt;p&gt;I propose that Keyword is modified to extend AFn to resolve the above issues.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15694">CLJ-1067</key>
            <summary>Fix error message inconsistencies in Symbol and Keyword</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="qerub">Christoffer Sawicki</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 11:38:28 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Mon, 17 Sep 2012 07:03:26 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29458" author="stu" created="Mon, 17 Sep 2012 07:03:18 -0500"  >&lt;p&gt;At first glance, it appears that there could be some code sharing here. But the attached patch changes the semantics of run, which is a non-starter.&lt;/p&gt;</comment>
                    <comment id="29462" author="qerub" created="Mon, 17 Sep 2012 07:19:38 -0500"  >&lt;p&gt;The only thing that changes is the type of thrown exception.&lt;/p&gt;

&lt;p&gt;Current call tree:&lt;/p&gt;

&lt;p&gt;Keyword.run() -&amp;gt; throw new UnsupportedOperationException()&lt;/p&gt;

&lt;p&gt;Call tree with patch applied:&lt;/p&gt;

&lt;p&gt;Keyword.run() -&amp;gt; AFn.run() -&amp;gt; AFn.invoke() -&amp;gt; AFn.throwArity(0) -&amp;gt; throw new ArityException(...)&lt;/p&gt;

&lt;p&gt;(I.e. Keyword.run() always throws an exception, with and without my patch.)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11496" name="Make-Keyword-extend-AFn-just-like-Symbol.patch" size="6322" author="qerub" created="Fri, 14 Sep 2012 11:40:42 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

<item>
            <title>[CLJ-1066] No dependency on jsr166y</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1066</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The Clojure 1.5.0-alpha4 jars that have been deployed to maven.org seem to have been compiled against JDK6 which causes&lt;br/&gt;
an exception if one tries to use reducers/fold.&lt;/p&gt;

&lt;p&gt;&amp;#8212; snip &amp;#8212;&lt;br/&gt;
Setup:&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (require &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.core.reducers :as r&amp;#93;&lt;/span&gt;)&lt;br/&gt;
    nil&lt;br/&gt;
    user=&amp;gt; (def v (vec (range 10000)))&lt;br/&gt;
    #&apos;user/v&lt;/p&gt;

&lt;p&gt;;; JDK7 + clojure 1.5.0-alpha4 from maven.org&lt;br/&gt;
;; &#8594; :dependencies [&lt;span class=&quot;error&quot;&gt;&amp;#91;org.clojure/clojure &amp;quot;1.5.0-alpha4&amp;quot;&amp;#93;&lt;/span&gt;] in project.clj&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (r/fold + (r/map inc v))&lt;br/&gt;
    ClassNotFoundException jsr166y.ForkJoinTask  java.net.URLClassLoader$1.run (URLClassLoader.java:366)&lt;/p&gt;

&lt;p&gt;;; JDK7 + clojure 1.5.0-alpha4 from maven.org&lt;br/&gt;
;; &#8594; :dependencies [&lt;span class=&quot;error&quot;&gt;&amp;#91;org.clojure/clojure &amp;quot;1.5.0-alpha4&amp;quot;&amp;#93;&lt;/span&gt;&lt;br/&gt;
;;                  &lt;span class=&quot;error&quot;&gt;&amp;#91;org.codehaus.jsr166-mirror/jsr166y &amp;quot;1.7.0&amp;quot;&amp;#93;&lt;/span&gt;]&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (r/fold + (r/map inc v))&lt;br/&gt;
    50005000&lt;/p&gt;

&lt;p&gt;;; JDK7 + clojure 1.5.0-alpha4 locally compiled (mvn install) against OpenJDK7&lt;br/&gt;
;; &#8594; :dependencies [&lt;span class=&quot;error&quot;&gt;&amp;#91;org.clojure/clojure &amp;quot;1.5.0-alpha4&amp;quot;&amp;#93;&lt;/span&gt;] in project.clj&lt;/p&gt;

&lt;p&gt;    user=&amp;gt; (r/fold + (r/map inc v))&lt;br/&gt;
    5000050000&lt;br/&gt;
&amp;#8212; snip &amp;#8212;&lt;/p&gt;

&lt;p&gt;It would be wonderful if this issue could be fixed before the release of 1.5.0.&lt;/p&gt;

&lt;p&gt;Have a nice day&lt;/p&gt;

&lt;p&gt;    Wolodja&lt;/p&gt;</description>
                <environment>$ java -version&lt;br/&gt;
java version &amp;quot;1.7.0_03&amp;quot;&lt;br/&gt;
OpenJDK Runtime Environment (IcedTea7 2.1.2) (7u3-2.1.2-2)&lt;br/&gt;
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)&lt;br/&gt;
$ lein version&lt;br/&gt;
Leiningen 2.0.0-preview10 on Java 1.7.0_03 OpenJDK 64-Bit Server VM&lt;br/&gt;
</environment>
            <key id="15691">CLJ-1066</key>
            <summary>No dependency on jsr166y</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="babilen">Wolodja Wentland</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 11 Sep 2012 10:21:51 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="29427" author="tsdh" created="Wed, 12 Sep 2012 09:44:01 -0500"  >&lt;p&gt;That&apos;s really a nasty problem.  I wrote the code that makes it possible to compile clojure with either a JDK7 and native ForkJoin or an older JDK + jsr166y.  Unfortunately, if you build clojure with a JDK7, reducers&apos; fold requires a JDK7 at runtime, and if you build clojure with a JDK &amp;lt;7 + jsr166y, fold also requires jsr166y at runtime.&lt;/p&gt;

&lt;p&gt;The essential problem is that clojure is AOT-compiled to class-files and those are put into the release jars.  Ordinary clojure libraries are distributed as jar files containing clj files that are compiled when loaded.  There, the implemented approach works just fine.  For example, again your example with 1.5.0-alpha4:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;;; 1.5.0-master4 compiled with JDK6 + jsr166y running on a JDK7
user=&amp;gt; (require &apos;[clojure.core.reducers :as r])
nil
user=&amp;gt; (def v (vec (range 10000)))
#&apos;user/v
user=&amp;gt; (r/fold + (r/map inc v))
ClassNotFoundException jsr166y.ForkJoinTask  java.net.URLClassLoader$1.run (URLClassLoader.java:366)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Now load the reducers.clj source code again, so that it
;; picks the right ForkJoin-impl for the current platform
(load-file &quot;/home/horn/Repos/clj/clojure/src/clj/clojure/core/reducers.clj&quot;)
nil
user=&amp;gt; (r/fold + (r/map inc v))
50005000
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So IMO, the best thing we can do is to omit AOT-compilation for reducers but to include only its clj file so that it&apos;ll be compiled automatically on the platform it eventually runs.&lt;/p&gt;</comment>
                    <comment id="29428" author="tsdh" created="Wed, 12 Sep 2012 11:55:48 -0500"  >&lt;p&gt;This patch removes the clojure.core.reducers namespace from the namespaces to be AOT compiled.  So now this namespace will be JIT-compiled when being required, and at that point either the JDK7 ForkJoin classes or the jsr166y classes need to be there.&lt;/p&gt;</comment>
                    <comment id="29514" author="stu" created="Fri, 21 Sep 2012 13:31:25 -0500"  >&lt;p&gt;Rich: what is the right approach here?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11493" name="0001-Don-t-AOT-compile-clojure.core.reducers.patch" size="929" author="tsdh" created="Wed, 12 Sep 2012 11:55:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1065] Allow duplicate set elements and map keys for all set and map constructors</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1065</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See description here &lt;a href=&quot;http://dev.clojure.org/display/design/Allow+duplicate+map+keys+and+set+elements&quot;&gt;http://dev.clojure.org/display/design/Allow+duplicate+map+keys+and+set+elements&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15685">CLJ-1065</key>
            <summary>Allow duplicate set elements and map keys for all set and map constructors</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sat, 8 Sep 2012 01:15:16 -0500</created>
                <updated>Thu, 4 Oct 2012 10:15:06 -0500</updated>
                    <resolved>Thu, 4 Oct 2012 10:15:06 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29405" author="jafingerhut" created="Sat, 8 Sep 2012 01:19:50 -0500"  >&lt;p&gt;I think that clj-1065-set-map-constructors-allow-duplicates-v1.txt dated Sep 7 2012 updates Clojure for the behavior Rich recommends on the dev Wiki page in the description.  I may have missed something, though.  Perhaps the most questionable part is the way I&apos;ve chosen to implement array-map always taking the last key&apos;s value.  It is no less efficient than the PersistentArrayMap createWithCheck method, i.e. O(n^2). &lt;/p&gt;</comment>
                    <comment id="29409" author="richhickey" created="Sat, 8 Sep 2012 07:10:54 -0500"  >&lt;p&gt;Thanks!&lt;/p&gt;

&lt;p&gt;array-map is ok. I would prefer that the docs strings say &quot;as if by repeated assoc&quot; (or conj for sets). &quot;eliminates&quot; and &quot;last&quot; are less precise e.g. what if you pass equal things, but with different metadata, to hash-set? &quot;Eliminates dupes&quot; doesn&apos;t say.&lt;/p&gt;</comment>
                    <comment id="29412" author="jafingerhut" created="Sat, 8 Sep 2012 15:39:25 -0500"  >&lt;p&gt;clj-1065-set-map-constructors-allow-duplicates-v2.txt dated Sep 8 2012 supersedes yesterday&apos;s -v1.txt patch, which I will remove.&lt;/p&gt;

&lt;p&gt;This one updates doc strings per Rich&apos;s suggestion.&lt;/p&gt;

&lt;p&gt;Also, his mention of metadata and &quot;as if by assoc&quot; led me to beef up the new test cases to check that metadata is correct, and I thus found that my new array-map constructor was not doing the right thing.  This one does.&lt;/p&gt;

&lt;p&gt;There is still no implementation of Rich&apos;s #3 yet.  Just wanted to get this one up there in case someone else builds on it before I do.&lt;/p&gt;</comment>
                    <comment id="29414" author="jafingerhut" created="Sun, 9 Sep 2012 03:07:01 -0500"  >&lt;p&gt;Patch clj-1065-do-map-constant-duplicate-key-checks-compile-time-only-v1.txt only makes changes that should eliminate run-time checks for duplicate map keys, if they are compile-time constants.&lt;/p&gt;

&lt;p&gt;It is currently separate from the changes to those for the set/map constructor functions, since I am less sure about these changes.  I&apos;m not terribly familiar with the compiler internals, and I might be going about this the wrong way.  Better to get separate feedback on these changes alone.  I&apos;m happy to merge them all into one patch if both parts look good.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11488" name="clj-1065-do-map-constant-duplicate-key-checks-compile-time-only-v1.txt" size="8648" author="jafingerhut" created="Sun, 9 Sep 2012 03:07:01 -0500" />
                    <attachment id="11487" name="clj-1065-set-map-constructors-allow-duplicates-v2.txt" size="9261" author="jafingerhut" created="Sat, 8 Sep 2012 15:39:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1064] Broken update-in for empty keys vector</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1064</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using update-in with an empty keys vector produces unexpected results:&lt;br/&gt;
(update-in {:a 10 :b 20} []  dissoc :a)&lt;br/&gt;
&#8658; {nil nil, :a 10, :b 20}&lt;br/&gt;
(update-in {:a 10 :b 20} []  assoc :c 99)&lt;br/&gt;
&#8658; {nil {:c 99}, :a 10, :b 20}&lt;/p&gt;

&lt;p&gt;The empty keys vector occurs in scenarios where you search on nested maps and later want to update the nested map structure at found paths.&lt;/p&gt;

&lt;p&gt;A well-defined behavior is to check the case when the keys vector is empty and then apply only the given function on the given map: (apply f m args)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15683">CLJ-1064</key>
            <summary>Broken update-in for empty keys vector</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gv">Gunnar V&#246;lkel</reporter>
                        <labels>
                    </labels>
                <created>Fri, 7 Sep 2012 05:46:29 -0500</created>
                <updated>Sat, 8 Sep 2012 10:15:38 -0500</updated>
                    <resolved>Sat, 8 Sep 2012 10:15:38 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29394" author="bronsa" created="Fri, 7 Sep 2012 06:37:55 -0500"  >&lt;p&gt;I think passing in an empty vector should rather be considered an error, since the doc specifies that `ks should be a sequence of keys`.&lt;/p&gt;

&lt;p&gt;The same wrong (in my opinion) behaviour is shown by assoc-in&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;user=&amp;gt; (assoc-in {} [] 1)&lt;/p&gt;
&lt;div class=&quot;error&quot;&gt;&lt;span class=&quot;error&quot;&gt;Unknown macro: {nil 1}&lt;/span&gt; &lt;/div&gt;&lt;/blockquote&gt;</comment>
                    <comment id="29395" author="gv" created="Fri, 7 Sep 2012 07:47:16 -0500"  >&lt;p&gt;Specifying an empty vector is no error in case the vector is not manually specified but computed as in the scenario I mentioned above.&lt;br/&gt;
&quot;(apply f m args)&quot; in case of an empty vector is the natural continuation of the usual behavior of update-in:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;update-in with 2 keys the second level map is updated&lt;/li&gt;
	&lt;li&gt;update-in with 1 key the first level map (child of given map) is updated&lt;/li&gt;
	&lt;li&gt;update-in with no key the given map (zero level) is updated.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Otherwise, you will always have to wrap update-in in something like the following when the keys vector is computed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(if (seq keys) (update-in m keys f args) (apply f m args))&lt;/p&gt;&lt;/blockquote&gt;</comment>
                    <comment id="29397" author="jafingerhut" created="Fri, 7 Sep 2012 11:01:21 -0500"  >&lt;p&gt;I believe this is a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-373&quot; title=&quot;update-in with empty key paths&quot;&gt;CLJ-373&lt;/a&gt;.  Please add your comments and/or suggested patches to that ticket rather than this one.  This one should likely be closed as a duplicate.  Let me know if you can think of any reason why this one covers new ground that &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-373&quot; title=&quot;update-in with empty key paths&quot;&gt;CLJ-373&lt;/a&gt; does not.&lt;/p&gt;</comment>
                    <comment id="29406" author="gv" created="Sat, 8 Sep 2012 06:02:24 -0500"  >&lt;p&gt;Yes, you are right - it is a duplicate.&lt;/p&gt;</comment>
                    <comment id="29410" author="jafingerhut" created="Sat, 8 Sep 2012 10:15:38 -0500"  >&lt;p&gt;Closed, as it is a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-373&quot; title=&quot;update-in with empty key paths&quot;&gt;CLJ-373&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1062] CLJ-940 breaks compilation of namespaces that don&apos;t have any public functions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1062</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-940&quot; title=&quot;Passing a non-sequence to refer :only results in uninformative exception&quot;&gt;&lt;del&gt;CLJ-940&lt;/del&gt;&lt;/a&gt; that was recently committed to master break compilation of namespaces that don&apos;t have any public functions in them&lt;br/&gt;
(for example, like &lt;a href=&quot;https://github.com/michaelklishin/monger/blob/master/src/clojure/monger/json.clj&quot;&gt;https://github.com/michaelklishin/monger/blob/master/src/clojure/monger/json.clj&lt;/a&gt; that only extends&lt;br/&gt;
a protocol).&lt;/p&gt;

&lt;p&gt;This affects several of clojurewerkz.org projects that no longer can compile with 1.5.0-master-SNAPSHOT.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15677">CLJ-1062</key>
            <summary>CLJ-940 breaks compilation of namespaces that don&apos;t have any public functions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="michaelklishin">Michael Klishin</reporter>
                        <labels>
                    </labels>
                <created>Wed, 5 Sep 2012 20:36:29 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Fri, 21 Sep 2012 08:28:35 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29383" author="michaelklishin" created="Wed, 5 Sep 2012 20:39:06 -0500"  >&lt;p&gt;To be more correct: it breaks compilation of namespaces that require/load such ns without any public functions.&lt;/p&gt;</comment>
                    <comment id="29384" author="michaelklishin" created="Wed, 5 Sep 2012 20:46:19 -0500"  >&lt;p&gt;An example project that reproduces the issue (see in the README):&lt;br/&gt;
&lt;a href=&quot;https://github.com/michaelklishin/clj1062&quot;&gt;https://github.com/michaelklishin/clj1062&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29512" author="stuart.sierra" created="Fri, 21 Sep 2012 08:28:35 -0500"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11484" name="0001-CLJ-1062-fix-require-1.patch" size="954" author="stuart.sierra" created="Fri, 7 Sep 2012 11:43:53 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1061] when-first double evaluation</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1061</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The when-first macro will evaluate the xs expression twice.  Admittedly, it does exactly what the doc string says, but that seems undesirable to me.  Even without side effects, there&apos;s a potential performance issue if xs is some expensive operation.&lt;/p&gt;

&lt;p&gt;Patch attached. The main diff is:&lt;/p&gt;

&lt;p&gt;&amp;#45;    `(when (seq ~xs)&lt;br/&gt;
&amp;#45;       (let &lt;span class=&quot;error&quot;&gt;&amp;#91;~x (first ~xs)&amp;#93;&lt;/span&gt;&lt;br/&gt;
&amp;#45;         ~@body))))&lt;br/&gt;
+    `(when-let &lt;a href=&quot;#(seq ~xs)&quot;&gt;xs# (seq ~xs)&lt;/a&gt;&lt;br/&gt;
+       (let &lt;a href=&quot;#)&quot;&gt;~x (first xs#)&lt;/a&gt;&lt;br/&gt;
+         ~@body))))&lt;/p&gt;</description>
                <environment>Mac OS X 10.8.1, Java 1.7.0_06</environment>
            <key id="15674">CLJ-1061</key>
            <summary>when-first double evaluation</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 4 Sep 2012 15:14:37 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29509" author="stuart.sierra" created="Fri, 21 Sep 2012 07:39:03 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11477" name="0001-avoid-double-evaluation-in-when-first.patch" size="1140" author="steveminer@gmail.com" created="Tue, 4 Sep 2012 15:14:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1055] &quot;be come&quot; should be &quot;become&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1055</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There is a typo in core.clj in the docs for &quot;agent&quot;, &quot;ref&quot;, and &quot;atom&quot;: it should be &quot;become&quot; instead of &quot;be come&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15663">CLJ-1055</key>
            <summary>&quot;be come&quot; should be &quot;become&quot;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dho">Daniel Hofstetter</reporter>
                        <labels>
                    </labels>
                <created>Sat, 1 Sep 2012 10:39:26 -0500</created>
                <updated>Mon, 17 Sep 2012 07:11:51 -0500</updated>
                    <resolved>Mon, 17 Sep 2012 07:11:51 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29461" author="stu" created="Mon, 17 Sep 2012 07:11:46 -0500"  >&lt;p&gt;Thanks!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-1054] Syntax quoted form produces a sequence, not a list</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1054</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Syntax quote returns clojure.lang.Cons instead of IPersistenList.&lt;br/&gt;
But simple quote always returns list.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(list? &apos;(1))     =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
(list? &apos;(1 2 3)) =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
(list? `(1))     =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
(list? `(1 2 3)) =&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15658">CLJ-1054</key>
            <summary>Syntax quoted form produces a sequence, not a list</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="azhlobich">Andrei Zhlobich</reporter>
                        <labels>
                    </labels>
                <created>Fri, 31 Aug 2012 08:17:26 -0500</created>
                <updated>Tue, 18 Sep 2012 06:42:46 -0500</updated>
                    <resolved>Tue, 18 Sep 2012 06:42:46 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29478" author="stu" created="Tue, 18 Sep 2012 06:42:46 -0500"  >&lt;p&gt;It is unusual in Clojure to expect/rely on concrete list? checks, particularly given the prevalence of seq?&lt;/p&gt;

&lt;p&gt;If the behavior documented here is causing problems, please discuss use case on mailing list, and then we can open a ticket.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1052] assoc should throw exception if missing val for last key</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1052</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/k2R4OdPUCzg&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/k2R4OdPUCzg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suggested by Ambrose Bonnaire-Sergeant:&lt;/p&gt;

&lt;p&gt;I think assoc should throw an error when applied with uneven arguments.&lt;/p&gt;

&lt;p&gt;Currently, the &quot;missing&quot; value is just replaced with nil.&lt;/p&gt;

&lt;p&gt;(assoc {} :a 1 :b)&lt;br/&gt;
;=&amp;gt; {:a 1, :b nil}&lt;/p&gt;</description>
                <environment></environment>
            <key id="15653">CLJ-1052</key>
            <summary>assoc should throw exception if missing val for last key</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Wed, 29 Aug 2012 16:40:24 -0500</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>8</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29286" author="jafingerhut" created="Wed, 29 Aug 2012 16:42:49 -0500"  >&lt;p&gt;Patch clj-1052-assoc-should-throw-exc-if-missing-val-patch1.txt dated Aug 29 2012 makes assoc throw an IllegalArgumentException if more than one key is given, but the last key has no value.  It includes a few simple test cases with correct and incorrect arguments to assoc.&lt;/p&gt;</comment>
                    <comment id="29287" author="ambrosebs" created="Wed, 29 Aug 2012 17:14:13 -0500"  >&lt;p&gt;IMO if the error message included something like &quot;assoc expects even number of arguments after target, found odd number&quot;, or some mention of the number of arguments the error would be clearer to me.&lt;/p&gt;</comment>
                    <comment id="29288" author="jafingerhut" created="Wed, 29 Aug 2012 18:06:59 -0500"  >&lt;p&gt;clj-1052-assoc-should-throw-exc-if-missing-val-patch2.txt is identical to the now-removed -patch1.txt, except for the text of the exception thrown, updated as per Ambrose&apos;s suggestion.&lt;/p&gt;</comment>
                    <comment id="29479" author="stu" created="Tue, 18 Sep 2012 06:51:53 -0500"  >&lt;p&gt;The patch appears correct. It does introduce a single extra (next) per iteration into the success path, although that seems unlikely to dominate the work. Wouldn&apos;t hurt to add as assessment showing this is no slower for correct programs.&lt;/p&gt;
</comment>
                    <comment id="29497" author="jafingerhut" created="Wed, 19 Sep 2012 02:03:45 -0500"  >&lt;p&gt;Test platform: Mac OS X 10.6.8 + Oracle/Apple Java 1.6.0_35 Java HotSpot(TM) 64-Bit Server VM&lt;/p&gt;

&lt;p&gt;With latest Clojure master as of Sep 19 2012:&lt;/p&gt;

&lt;p&gt;Clojure 1.5.0-master-SNAPSHOT&lt;br/&gt;
user=&amp;gt; (set! &lt;b&gt;unchecked-math&lt;/b&gt; true)&lt;br/&gt;
true&lt;br/&gt;
(defn count-maps &lt;span class=&quot;error&quot;&gt;&amp;#91;n&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (let &lt;span class=&quot;error&quot;&gt;&amp;#91;base {:a 1}&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (loop [i n&lt;br/&gt;
           sum 0]&lt;br/&gt;
      (if (zero? i)&lt;br/&gt;
        sum&lt;br/&gt;
        (let &lt;span class=&quot;error&quot;&gt;&amp;#91;m1 (assoc base :b 2 :c 3 :d 4 :e 5 :f 6 :g 7 :h 8 :i 9 :j 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
          (recur (dec i) (+ sum (count m1))))))))&lt;br/&gt;
#&apos;user/count-maps&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 48784.077 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 49028.52 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 50314.729 msecs&quot;&lt;br/&gt;
100000000&lt;/p&gt;

&lt;p&gt;Same Clojure version, plus the patch that was screened:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 49576.191 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 49957.866 msecs&quot;&lt;br/&gt;
100000000&lt;br/&gt;
user=&amp;gt; (time (count-maps 10000000))&lt;br/&gt;
&quot;Elapsed time: 52149.998 msecs&quot;&lt;br/&gt;
100000000&lt;/p&gt;

&lt;p&gt;(average of 3 times after patch) / (average of 3 times before patch) = 1.0240&lt;/p&gt;

&lt;p&gt;So 2.4% slowdown on average for that test case.  I should add that I&apos;m not a statistician, but note that this 2.4% difference is less than the variation in run time from one run to the next of the same experiment.  Likely any real statistician would recommend collecting a lot more data before asserting there is a change in performance.&lt;/p&gt;</comment>
                    <comment id="29601" author="jafingerhut" created="Fri, 5 Oct 2012 07:38:05 -0500"  >&lt;p&gt;clj-1052-assoc-should-throw-exc-if-missing-val-patch3.txt dated Oct 5 2012 is the same as the previous patch clj-1052-assoc-should-throw-exc-if-missing-val-patch2.txt dated Aug 29 2012 except some context lines have been updated so that it applies cleanly using git.  The older version will be removed in a minute.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11536" name="clj-1052-assoc-should-throw-exc-if-missing-val-patch3.txt" size="1816" author="jafingerhut" created="Fri, 5 Oct 2012 07:38:05 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1051] Recursive function raises &quot;call unbound fn&quot; exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1051</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve tried to reduce the code to the minimum that will reproduce the problem. This is a parser combinator library that uses the &quot;list of successes&quot; method. The test is a simple expression for adding one-digit integers with support for parens; sample input might be &quot;1+(2+3)+4&quot;.&lt;/p&gt;

&lt;p&gt;Having declared the parsers (see attached file), the expression parser is this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(declare expr)

(def factor
  (choice (between (match \() (match \)) expr)
	  integer))

(def expr
  (bind factor
       (fn [t]
	 (choice (bind (match \+) (fn [_] (bind expr (fn [e] (result (+ t e))))))
	         (result t)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With the above, I get this error:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Clojure 1.4.0
user=&amp;gt; (load-file &lt;span class=&quot;code-quote&quot;&gt;&quot;expr.clj&quot;&lt;/span&gt;)
#&apos;user/expr
user=&amp;gt; (run expr &lt;span class=&quot;code-quote&quot;&gt;&quot;(3)&quot;&lt;/span&gt;)      
IllegalStateException Attempting to call unbound fn: #&apos;user/expr  clojure.lang.Var$Unbound.throwArity (Var.java:43)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I can, however, avoid this error if I code the (factor) function by expanding the code of the parser (between):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(declare expr)

(def factor*
  (choice (bind (match \() (fn [_]
          (bind expr       (fn [e]
	  (bind (match \)) (fn [_] (result e)))))))
	  integer))

(def expr
  (bind factor*
       (fn [t]
	 (choice (bind (match \+) (fn [_] (bind expr (fn [e] (result (+ t e))))))
	         (result t)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And now I can do:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Clojure 1.4.0
user=&amp;gt; (load-file &lt;span class=&quot;code-quote&quot;&gt;&quot;expr.clj&quot;&lt;/span&gt;)
#&apos;user/expr
user=&amp;gt; (run expr &lt;span class=&quot;code-quote&quot;&gt;&quot;(3)&quot;&lt;/span&gt;)      
3
user=&amp;gt; (run expr &lt;span class=&quot;code-quote&quot;&gt;&quot;1+(2+3)+(4+5)&quot;&lt;/span&gt;)
15&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The ability to reuse parser and add conveniences like (between) is key for this style of parsing.&lt;/p&gt;</description>
                <environment>OSX</environment>
            <key id="15649">CLJ-1051</key>
            <summary>Recursive function raises &quot;call unbound fn&quot; exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ablancas">Armando Blancas</reporter>
                        <labels>
                    </labels>
                <created>Mon, 27 Aug 2012 16:46:37 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:51:02 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29272" author="hiredman" created="Mon, 27 Aug 2012 18:03:42 -0500"  >&lt;p&gt;this is not a bug in clojure.&lt;/p&gt;

&lt;p&gt;declare creates an unbound var then your def tries to use the value of the var before you have given it a value.&lt;/p&gt;

&lt;p&gt;declare does not let you use a value of a var before you have given it one (via def or whatever).&lt;/p&gt;</comment>
                    <comment id="29273" author="hiredman" created="Mon, 27 Aug 2012 18:05:17 -0500"  >&lt;p&gt;meta comment:&lt;br/&gt;
I would close this as &quot;Declined&quot;, but I am not sure if that is kosher for me to do.&lt;/p&gt;</comment>
                    <comment id="29277" author="ablancas" created="Mon, 27 Aug 2012 22:28:22 -0500"  >&lt;p&gt;Thanks for looking into this.&lt;/p&gt;

&lt;p&gt;Just want to point out that as far as the declare and the use of expr as a forward reference, the second scenario I&apos;ve presented (with factor*) uses (declare) the same way, yet it works: the var &quot;expr&quot; in (factor*) ends up pointing to the root value set later, but before it runs.&lt;/p&gt;

&lt;p&gt;Seems to me similar to this case, where f is defined in terms of itself and it works fine, having the var &quot;f&quot; obtained its root binding after the def form runs:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (def f (fn [n] (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (&amp;lt; n 1) 1 (* n (f (- n 1))))))
#&apos;user/f
user=&amp;gt; (f 6)
720&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Given that I&apos;ve got a usage that works, I would suspect that there&apos;s something about the first case that prevents the root binding to be visible to the declared var. &lt;/p&gt;</comment>
                    <comment id="29278" author="hiredman" created="Tue, 28 Aug 2012 03:25:48 -0500"  >&lt;p&gt;the formatting of the second case makes it hard to read, but it looks like expr is referenced inside a function, so the var #&apos;expr will not be derefed until the function is run.&lt;/p&gt;</comment>
                    <comment id="29280" author="ablancas" created="Tue, 28 Aug 2012 12:32:33 -0500"  >&lt;p&gt;Though the difference isn&apos;t quite apparent to me, I kind of grasp the idea that the var may be in one case deref&apos;ed earlier in one case than the other because calls to (bind) are eager and in the case of the additional call to (between) the var is inside the function. I&apos;ll ask the board for advice on this and this ticket can be closed. Thanks.&lt;/p&gt;</comment>
                    <comment id="29921" author="stuart.sierra" created="Fri, 9 Nov 2012 08:51:02 -0600"  >&lt;p&gt;Closed based on discussion in comments.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11456" name="expr.clj" size="1213" author="ablancas" created="Mon, 27 Aug 2012 16:46:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1050] Remove a lock in the common case of  deref of delay</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1050</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, when deref is called in Delay.java, a lock on the Delay is always acquired.&lt;br/&gt;
This is wasteful as most of the time you just want to read the val.&lt;/p&gt;

&lt;p&gt;The attached patch changes this behaviour to the following:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;val is initialised to a known secret value. (During its constructor so it is visible from any thread).&lt;/li&gt;
	&lt;li&gt;When deref is called, val is checked to the known secret value.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;If it is not the secret value, then it has to be the value computed by the function and we return it.&lt;/li&gt;
	&lt;li&gt;If it is the secret value, then we lock this object and revert to the current behaviour.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is faster than what is done currently and can be very much faster if there is contention on the delay.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15645">CLJ-1050</key>
            <summary>Remove a lock in the common case of  deref of delay</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="nicolasoury">Nicolas Oury</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                        <label>performance</label>
                    </labels>
                <created>Sun, 26 Aug 2012 13:24:00 -0500</created>
                <updated>Tue, 18 Sep 2012 06:53:01 -0500</updated>
                    <resolved>Tue, 18 Sep 2012 06:53:01 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29270" author="nicolasoury" created="Mon, 27 Aug 2012 02:37:12 -0500"  >&lt;p&gt;Please close and reject. The patch is not working if val has non final fields.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11454" name="0001-No-lock-in-the-common-path-for-delays.patch" size="1177" author="nicolasoury" created="Sun, 26 Aug 2012 13:24:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1048] add test.generative to Clojure&apos;s tests</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1048</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The 0.1.5 release of test generative includes data generators and specs based on data generation, plus a runner that can run both c.t and c.t.g. tests under the same umbrella.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15640">CLJ-1048</key>
            <summary>add test.generative to Clojure&apos;s tests</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Aug 2012 22:23:34 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Fri, 7 Sep 2012 11:34:35 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29250" author="stu" created="Tue, 21 Aug 2012 22:26:07 -0500"  >&lt;p&gt;Note that this patch also removes the cyclic load tests. Those tests relied on leaving broken code on the test classpath, which is very hostile to tooling (in this case the test runner&apos;s ability to walk the code in the test directory.)  &lt;/p&gt;

&lt;p&gt;I believe such tests are an antipattern, and should be implemented differently or e.g. placed in an ancillary test suite.&lt;/p&gt;
</comment>
                    <comment id="29252" author="fogus" created="Wed, 22 Aug 2012 10:32:12 -0500"  >&lt;p&gt;I agree with you position on the cyclic load tests.  The patch looks sane to me and ran without hitch. A couple points of note:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;This requires one to re-run &lt;tt&gt;antsetup&lt;/tt&gt; &amp;#8211; not a problem, but it might trip a few people&lt;/li&gt;
	&lt;li&gt;The final output of the test run is different than before.  In the case of a successful run we now see only the generative success stats. Is the regular clojure.test stats included?  It&apos;s not clear to me, but I don&apos;t think they are.  In the fail case we see something like the following.  I actually like the map output better, but one advantage to the stack trace output was that it sometimes helped identify code bugs.  In any case, it would be nice to see an aggregate score at the end.  This is a test.generative feature request I know.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;
     [java] {:clojure.test/vars (test-equality),
     [java]  :thread/name &quot;main&quot;,
     [java]  :pid 8682,
     [java]  :thread 1,
     [java]  :type :assert/fail,
     [java]  :level :warn,
     [java]  :test/actual (not (not true)),
     [java]  :test/expected (not (= nil nil)),
     [java]  :line 28,
     [java]  :tstamp 1345649256308,
     [java]  :file &quot;data_structures.clj&quot;}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In all, I like this! Now we need to start thinking up more specs.&lt;/p&gt;</comment>
                    <comment id="29253" author="stu" created="Wed, 22 Aug 2012 11:51:33 -0500"  >&lt;p&gt;The stats reports are aggregate, i.e. they rollup both the generative and clojure.test stats. It would be straightforward to separate these in the report. I will look at doing that in the next drop of c.t.g.&lt;/p&gt;

&lt;p&gt;The output already includes stack traces for errors, but not for test failures. I thought this was consistent with clojure.test, but maybe I missed something.&lt;/p&gt;</comment>
                    <comment id="29254" author="fogus" created="Wed, 22 Aug 2012 12:59:47 -0500"  >&lt;p&gt;Thanks for the clarification Stu. You&apos;re right that the exception behavior is consistent, the confusion was my own.&lt;/p&gt;</comment>
                    <comment id="29400" author="stuart.sierra" created="Fri, 7 Sep 2012 11:34:35 -0500"  >&lt;p&gt;Patches have been applied as of September 1, 2012.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11452" name="add-test-generative.patch" size="17914" author="stu" created="Tue, 21 Aug 2012 22:23:34 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1042] [PATCH] Allow negative substring indices for (subs)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1042</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This adds Python-style negative string indices for (subs), e.g.:&lt;/p&gt;

&lt;p&gt;(subs &quot;foo bar&quot; -3) ;; -&amp;gt; &quot;bar&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15629">CLJ-1042</key>
            <summary>[PATCH] Allow negative substring indices for (subs)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ieure">Ian Eure</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                    </labels>
                <created>Tue, 14 Aug 2012 13:11:40 -0500</created>
                <updated>Wed, 19 Sep 2012 13:34:50 -0500</updated>
                    <resolved>Mon, 17 Sep 2012 07:07:57 -0500</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29196" author="jafingerhut" created="Thu, 16 Aug 2012 19:17:19 -0500"  >&lt;p&gt;Ian, thanks for the patch.  It is Rich Hickey&apos;s policy only to consider applying patches to Clojure from those who have signed a Clojure contributor agreement: &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Were you interested in doing so, or perhaps it is already in progress?&lt;/p&gt;</comment>
                    <comment id="29232" author="ieure" created="Mon, 20 Aug 2012 11:44:04 -0500"  >&lt;p&gt;I wasn&apos;t aware that this was necessary. I&apos;m mailing the form in.&lt;/p&gt;</comment>
                    <comment id="29275" author="jafingerhut" created="Mon, 27 Aug 2012 19:56:00 -0500"  >&lt;p&gt;Patch clj-1042-negative-subs-patch2.txt dated Aug 27 2012 is identical to Ian Eure&apos;s negative-subs.patch, except it is in the desired git format.&lt;/p&gt;

&lt;p&gt;Ian, for future reference on creating patches in the desired format, see the instructions under the heading &quot;Development&quot; on this page: &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29279" author="ieure" created="Tue, 28 Aug 2012 11:47:43 -0500"  >&lt;p&gt;Thanks, will do.&lt;/p&gt;</comment>
                    <comment id="29358" author="steveminer@gmail.com" created="Tue, 4 Sep 2012 15:53:22 -0500"  >&lt;p&gt;If Clojure decides to support Python-style negative indices, you should also consider adding support to subvec.&lt;/p&gt;</comment>
                    <comment id="29386" author="ieure" created="Thu, 6 Sep 2012 12:17:30 -0500"  >&lt;p&gt;Patch extended to support negative indices on  (subvec) as well.&lt;/p&gt;</comment>
                    <comment id="29396" author="abp" created="Fri, 7 Sep 2012 08:01:17 -0500"  >&lt;p&gt;The arg to rindex should probably be tagged with ^clojure.lang.Counted instead of ^String now.&lt;/p&gt;</comment>
                    <comment id="29401" author="steveminer@gmail.com" created="Fri, 7 Sep 2012 13:31:44 -0500"  >&lt;p&gt;Regarding the previous comment, String is a Java class so it isn&apos;t a clojure.lang.Counted.  Is the type hint necessary?  Maybe it should be on the call rather than the defn.  &lt;/p&gt;

&lt;p&gt;Ignoring the type hinting, I&apos;ll suggest a slightly simpler way to implement the rindex logic:&lt;/p&gt;

&lt;p&gt;(defn rindex &lt;span class=&quot;error&quot;&gt;&amp;#91;coll i&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (if (neg? i) (+ (count coll) i) i))&lt;/p&gt;

&lt;p&gt;In any case, I&apos;m not sure rindex should be public even if you want the subs and subvec enhancements.  Someone needs to make the case for adding a new function to core.&lt;/p&gt;

&lt;p&gt;The Pythonic negative index is a debatable feature since it&apos;s pretty easy to implement for yourself if you want it.&lt;/p&gt;</comment>
                    <comment id="29404" author="abp" created="Fri, 7 Sep 2012 23:05:07 -0500"  >&lt;p&gt;Sorry, the type hint on rindex args isn&apos;t necessary at all. Just looked up in the source, calling count should never be reflective, since (count ..) emits calls to clojure.lang.RT/count.&lt;/p&gt;

&lt;p&gt;Your solution looks good.&lt;/p&gt;</comment>
                    <comment id="29460" author="stu" created="Mon, 17 Sep 2012 07:07:45 -0500"  >&lt;p&gt;Negative indices were considered and rejected a long time ago. (I am merely conveying information--I have no strong opinion on this one.)&lt;/p&gt;</comment>
                    <comment id="29467" author="jafingerhut" created="Mon, 17 Sep 2012 12:07:56 -0500"  >&lt;p&gt;Note: If some people really like negative index behavior as in Perl or Python, it is straightforward to create a library of functions in a different namespace, perhaps with different names, that can do it.  Perhaps a &quot;pythonisms&quot; library?&lt;/p&gt;</comment>
                    <comment id="29485" author="ieure" created="Tue, 18 Sep 2012 12:31:06 -0500"  >&lt;p&gt;Would this be accepted as part of clojure.string instead? I considered putting it there, but thought it would be confusing to have multiple substring functions in different namespaces.&lt;/p&gt;

&lt;p&gt;This is very helpful in practice, and I&apos;d really like to see at least the (subs) stuff in Clojure.&lt;/p&gt;</comment>
                    <comment id="29486" author="jafingerhut" created="Tue, 18 Sep 2012 14:52:23 -0500"  >&lt;p&gt;Disclaimer: I&apos;m no Clojure/core member, so can&apos;t speak authoritatively on whether something would or would not be accepted into clojure.string.&lt;/p&gt;

&lt;p&gt;However, given that clojure.string is distributed with clojure.core, my guess is it would not be accepted.  You&apos;d be able to get things like this out for you and others as a separate library distributed on Clojars.  That would also make it easy to include other Python-like things that you don&apos;t find in Clojure already.&lt;/p&gt;</comment>
                    <comment id="29489" author="ieure" created="Tue, 18 Sep 2012 16:02:24 -0500"  >&lt;p&gt;This isn&apos;t about &quot;python-like things,&quot; this is about a useful feature. Lots of languages support this: Perl, PHP, Ruby, Python, JavaScript, to name a few. Are you really suggesting that I should create a whole package for a version of a function in clojure.core with slightly different semantics? That&apos;s insane.&lt;/p&gt;

&lt;p&gt;Anyway, I&apos;m done wasting my time trying to navigate this hopelessly broken process. Maybe it would have been accepted if I included yet another way to interoperate with Java types.&lt;/p&gt;</comment>
                    <comment id="29490" author="michaelklishin" created="Tue, 18 Sep 2012 17:09:44 -0500"  >&lt;p&gt;Stuart, do you remember why specifically negative indexes were rejected? Developing a separate library for a minor improvement to an existing function sounds unreasonable.&lt;/p&gt;</comment>
                    <comment id="29491" author="holo" created="Tue, 18 Sep 2012 17:10:23 -0500"  >&lt;p&gt;some explanation about this topic was given by Rich Hickey himself here: &lt;a href=&quot;http://news.ycombinator.com/item?id=2053908&quot;&gt;http://news.ycombinator.com/item?id=2053908&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;citation:&lt;br/&gt;
&quot;...Yes, there is a backlog from when it was just me, and it will take a while to whittle down. We have finite resources and have to prioritize. I can assure you we have more important things to concentrate on than your negative index substring enhancement, and are doing so. You&apos;ll just have to be patient. Or, if you insist, I&apos;ll just reject it now because a) IMO it&apos;s goofy, b) you can make your own function that works that way c) we don&apos;t get a free ride from j.l.String, d) it begs the question of negative indices elsewhere...&quot;&lt;/p&gt;

&lt;p&gt;i&apos;ve been following this thread hoping this feature would be included. but whatever the reason was for the rejection, i&apos;m sure it was thoughtful. great thanks for this wonderful language, and thanks Ian Eure for his effort.&lt;/p&gt;</comment>
                    <comment id="29492" author="steveminer@gmail.com" created="Tue, 18 Sep 2012 17:25:41 -0500"  >&lt;p&gt;That HN link eventually leads back to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-688&quot; title=&quot;subs function should count back from the end of the string when given negative offset&quot;&gt;&lt;del&gt;CLJ-688&lt;/del&gt;&lt;/a&gt; which was rejected.&lt;/p&gt;</comment>
                    <comment id="29499" author="stu" created="Wed, 19 Sep 2012 12:03:38 -0500"  >&lt;p&gt;Michael: A proposal for negative indexes would need to be systematic in considering implications for all functions that have index arguments.&lt;/p&gt;

&lt;p&gt;Ian: Clojure is driven by design, not incremental piling of features.&lt;/p&gt;

&lt;p&gt;All: clojure.string is incomplete in more important and fundamental ways than negative indexes. This sucks now, and will suck worse as more code is written in different dialects. I find myself wishing string was a contrib, so we could iterate faster.&lt;/p&gt;</comment>
                    <comment id="29500" author="jafingerhut" created="Wed, 19 Sep 2012 13:34:50 -0500"  >&lt;p&gt;Stuart: Any specific proposals for how you&apos;d like to see clojure.string improve?  If it can be made a contrib, that would be cool, but understood if that would be considered too breaking of a change.  Even if it isn&apos;t made a contrib, having tickets for improvement ideas you are willing to see means patches might get written, and they&apos;ll get in some time.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11480" name="clj-1042-negative-indices-patch3.txt" size="6402" author="ieure" created="Thu, 6 Sep 2012 12:17:30 -0500" />
                    <attachment id="11425" name="negative-subs.patch" size="3266" author="ieure" created="Tue, 14 Aug 2012 13:11:40 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-1041] reduce-kv on sorted maps should stop on seeing a Reduced value</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1041</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The current implementation is dereferencing Reduced and returning them up the chain; but that means that parent nodes don&apos;t know the reduction has completed, so the reduction might continue along other paths down the tree.&lt;/p&gt;

&lt;p&gt;This patch touches the same areas of code as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1040&quot; title=&quot;reduce-kv on sorted maps should reduce, in sorted order&quot;&gt;&lt;del&gt;CLJ-1040&lt;/del&gt;&lt;/a&gt; so will have conflicts if both patches are merged separately. However, as noted in my comment on &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1040&quot; title=&quot;reduce-kv on sorted maps should reduce, in sorted order&quot;&gt;&lt;del&gt;CLJ-1040&lt;/del&gt;&lt;/a&gt;, I don&apos;t think the patch there is correct yet, so I&apos;ve also included a commit (7beb14256) to fix the issue in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1040&quot; title=&quot;reduce-kv on sorted maps should reduce, in sorted order&quot;&gt;&lt;del&gt;CLJ-1040&lt;/del&gt;&lt;/a&gt;. Thus, this patch can be merged independently of 1040&apos;s patch, solving both issues without a merge conflict.&lt;/p&gt;

&lt;p&gt;This patch also includes tests for both issues, which fail before my commits are applied, and pass afterwards.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15622">CLJ-1041</key>
            <summary>reduce-kv on sorted maps should stop on seeing a Reduced value</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Aug 2012 15:17:49 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="29144" author="aaron" created="Tue, 14 Aug 2012 19:46:39 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter confirmed on the CA list.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11420" name="sorted-map-kvreduce.patch" size="4081" author="amalloy" created="Fri, 10 Aug 2012 15:17:49 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1040] reduce-kv on sorted maps should reduce, in sorted order</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1040</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently reduces, but not in sorted order. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15620">CLJ-1040</key>
            <summary>reduce-kv on sorted maps should reduce, in sorted order</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Aug 2012 10:47:08 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Wed, 15 Aug 2012 12:25:35 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29109" author="amalloy" created="Fri, 10 Aug 2012 15:09:10 -0500"  >&lt;p&gt;Stuart, your patch doesn&apos;t check for Reduced after calling f on the current node; I think you need to move that check along with the call to f.&lt;/p&gt;</comment>
                    <comment id="29111" author="amalloy" created="Fri, 10 Aug 2012 15:18:52 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1041&quot; title=&quot;reduce-kv on sorted maps should stop on seeing a Reduced value&quot;&gt;&lt;del&gt;CLJ-1041&lt;/del&gt;&lt;/a&gt; is a related issue, and its patch also includes a commit that I think would fix your patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11418" name="fix-reduce-kv-for-sorted-maps.patch" size="1171" author="stu" created="Fri, 10 Aug 2012 10:55:08 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-1038] Docstring for deliver doesn&apos;t match behavior</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1038</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The docstring for deliver doesn&apos;t match the actual behavior. It says an exception gets thrown on multiple delivers, but that&apos;s no longer the case, as of 1.3 (hat tip to clgv on irc).&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (doc deliver)
-------------------------
clojure.core/deliver
([promise val])
  Alpha - subject to change.
  Delivers the supplied value to the promise, releasing any pending
  derefs. A subsequent call to deliver on a promise will &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; an exception.
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [p (promise)] 
  (deliver p &lt;span class=&quot;code-quote&quot;&gt;&quot;hi&quot;&lt;/span&gt;) 
  (deliver p &lt;span class=&quot;code-quote&quot;&gt;&quot;bye&quot;&lt;/span&gt;) 
  @p)
;=&amp;gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;hi&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This patch updates the docstring to reflect actual behavior: &quot;will throw an exception.&quot; -&amp;gt; &quot;will have no effect.&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15615">CLJ-1038</key>
            <summary>Docstring for deliver doesn&apos;t match behavior</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="trptcolin">Colin Jones</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Tue, 7 Aug 2012 16:47:29 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 24 Aug 2012 07:41:47 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29107" author="stu" created="Fri, 10 Aug 2012 13:48:57 -0500"  >&lt;p&gt;Both patches are correct. Colin&apos;s patch documents the side effect, my variant also commits to the return values. Take your pick.&lt;/p&gt;</comment>
                    <comment id="29110" author="richhickey" created="Fri, 10 Aug 2012 15:09:35 -0500"  >&lt;p&gt;Don&apos;t doc return&lt;/p&gt;</comment>
                    <comment id="29259" author="stuart.sierra" created="Fri, 24 Aug 2012 07:41:47 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1038&quot; title=&quot;Docstring for deliver doesn&amp;#39;t match behavior&quot;&gt;&lt;del&gt;CLJ-1038&lt;/del&gt;&lt;/a&gt; Update docstring for deliver&apos;s actual behavior (patch applied Aug 15, 2012) &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11413" name="0001-Update-docstring-for-deliver-s-actual-behavior.patch" size="847" author="trptcolin" created="Tue, 7 Aug 2012 16:47:29 -0500" />
                    <attachment id="11419" name="correct-deliver-docstring.patch" size="945" author="stu" created="Fri, 10 Aug 2012 13:48:57 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1035] Remove the need to use &quot;:import&quot; of a record</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1035</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Right now if I need to use a record defined in another name space, I need to do this:&lt;/p&gt;

&lt;p&gt;(ns myproj.test.xyz&lt;br/&gt;
  (:use &lt;span class=&quot;error&quot;&gt;&amp;#91;myproj.xyz&amp;#93;&lt;/span&gt;)&lt;br/&gt;
  (:import &lt;span class=&quot;error&quot;&gt;&amp;#91;myproj.xyz MyRecord&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;Hope we can remove the need of &quot;:import&quot; clause.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15603">CLJ-1035</key>
            <summary>Remove the need to use &quot;:import&quot; of a record</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="wrn.lynn">Warren Lynn</reporter>
                        <labels>
                    </labels>
                <created>Sun, 29 Jul 2012 13:46:18 -0500</created>
                <updated>Fri, 10 Aug 2012 14:19:55 -0500</updated>
                    <resolved>Fri, 10 Aug 2012 12:44:03 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29100" author="stu" created="Fri, 10 Aug 2012 12:44:03 -0500"  >&lt;p&gt;Hi Warren,&lt;/p&gt;

&lt;p&gt;Importing a Java class and using a record are two logically distinct ideas, hence two separate steps in your code. Note that using a namespace makes the defrecord constructor fns (e.g. &lt;del&gt;&amp;gt;MyRecord and map&lt;/del&gt;&amp;gt;MyRecord) available without a second step.&lt;/p&gt;

&lt;p&gt;Please discuss ideas on the mailing list before using JIRA to make suggestions.&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;</comment>
                    <comment id="29108" author="wrn.lynn" created="Fri, 10 Aug 2012 14:19:55 -0500"  >&lt;p&gt;Thanks for giving it a thought.&lt;/p&gt;

&lt;p&gt;I think it is conceptually simple/consistent to say &quot;if you use a namespace, then all the public symbols in that namespace is available without namespace qualification&quot;. It is unnecessary to remind people &quot;Hey, record is an &lt;b&gt;actually&lt;/b&gt; a Java class so the rules do not apply&quot;. I think it is the right choice for Clojure to integrate closely with the host language, but it is not the objective to expose the host details when not needed. If you say &quot;this is a compromise due to some implementation consideration&quot;, then I can understand. But I disagree with the rationale you mentioned. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1034] &quot;Conflicting data-reader mapping&quot; triggered when the same data_readers.clj is on the classpath twice</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1034</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you have two data_readers.clj files on the classpath that agree with one another about the mapping of a given literal, Clojure still claims there is a conflict.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15601">CLJ-1034</key>
            <summary>&quot;Conflicting data-reader mapping&quot; triggered when the same data_readers.clj is on the classpath twice</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Thu, 26 Jul 2012 16:04:32 -0500</created>
                <updated>Sat, 1 Sep 2012 08:37:48 -0500</updated>
                    <resolved>Sat, 1 Sep 2012 08:37:48 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>10</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="29126" author="jkkramer" created="Mon, 13 Aug 2012 09:59:43 -0500"  >&lt;p&gt;This comes up when using checkout dependencies in Leiningen. If the checked-out project contains data_readers.clj, Clojure will throw an exception.&lt;/p&gt;

&lt;p&gt;To reproduce:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;user=&amp;gt;&lt;/b&gt; (spit &quot;/tmp/data_readers.clj&quot; &quot;{foo/bar foo.core/bar}&quot;)&lt;br/&gt;
&lt;em&gt;nil&lt;/em&gt;&lt;br/&gt;
&lt;b&gt;user=&amp;gt;&lt;/b&gt; (with-redefs [clojure.core/data-reader-urls (constantly &lt;span class=&quot;error&quot;&gt;&amp;#91;(java.net.URL. &amp;quot;file:/tmp/data_readers.clj&amp;quot;)&amp;#93;&lt;/span&gt;)] (#&apos;clojure.core/load-data-readers))&lt;br/&gt;
&lt;em&gt;{foo/bar #&apos;foo.core/bar}&lt;/em&gt;&lt;br/&gt;
&lt;b&gt;user=&amp;gt;&lt;/b&gt; (with-redefs [clojure.core/data-reader-urls (constantly &lt;span class=&quot;error&quot;&gt;&amp;#91;(java.net.URL. &amp;quot;file:/tmp/data_readers.clj&amp;quot;)&amp;#93;&lt;/span&gt;)] (#&apos;clojure.core/load-data-readers))&lt;br/&gt;
&lt;em&gt;ExceptionInfo Conflicting data-reader mapping  clojure.core/ex-info (core.clj:4227)&lt;/em&gt;&lt;/p&gt;</comment>
                    <comment id="29127" author="jkkramer" created="Mon, 13 Aug 2012 10:21:19 -0500"  >&lt;p&gt;Attached clj_1034_data_readers_fix.diff with simple fix: checks that new mappings actually point to different vars before claiming a conflict.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11421" name="clj_1034_data_readers_fix.diff" size="1383" author="jkkramer" created="Mon, 13 Aug 2012 10:21:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-1032] seque leaks threads from the send-off pool</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1032</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Because a new (fill) action is created every time an item is (drain)ed, the LBQ gets loaded up with piles of EOS markers. If the output seq is consumed faster than the input sequence can produce items, then the original agent action does all of the filling in a single action, while the agent&apos;s queue continues to back up with (fill) actions. Eventually the entire sequence is consumed, and each queued action does a blocking .put of an EOS marker; once the queue has filled up, one of these actions blocks forever, since nobody will ever .take from the queue again.&lt;/p&gt;

&lt;p&gt;The attached patch does two things: &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Make sure to put exactly one EOS marker in the stream, by setting the agent&apos;s state to nil if and only if a .offer of EOS has been accepted.&lt;/li&gt;
	&lt;li&gt;Replace all occurrences of .put with .offer (and appropriate checking of the return value). This is necessary because if .put ever blocks, it&apos;s possible for the system to remain in that state forever (say, because the client stops consuming the queue), thus leading to the same leaked-thread scenario.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The diff is a little bit inconvenient to read because of indentation changes; &lt;a href=&quot;https://gist.github.com/b7ecd4395a0d3d473de6&quot;&gt;https://gist.github.com/b7ecd4395a0d3d473de6&lt;/a&gt; is an ignore-whitespace view of the patch for convenience.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15598">CLJ-1032</key>
            <summary>seque leaks threads from the send-off pool</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Wed, 25 Jul 2012 18:03:50 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Sun, 19 Aug 2012 20:11:44 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>5</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29046" author="jafingerhut" created="Thu, 26 Jul 2012 03:50:14 -0500"  >&lt;p&gt;Sorry for me just triggering on the function &quot;seque&quot; without a deep understanding, but is this by any chance the same issue as described in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-823&quot; title=&quot;Piping seque into seque can deadlock&quot;&gt;CLJ-823&lt;/a&gt;?  If so, since this one has a patch and that one doesn&apos;t, might be nice to mark &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-823&quot; title=&quot;Piping seque into seque can deadlock&quot;&gt;CLJ-823&lt;/a&gt; as a duplicate of this one.&lt;/p&gt;</comment>
                    <comment id="29047" author="amalloy" created="Thu, 26 Jul 2012 04:48:35 -0500"  >&lt;p&gt;No, these are separate issues. &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-823&quot; title=&quot;Piping seque into seque can deadlock&quot;&gt;CLJ-823&lt;/a&gt; is just a special case of the general problem that seque is not usable from within an agent action. I have an implementation of seque using futures instead of agents so that this isn&apos;t a problem, but that has other problems of its own, specifically if you don&apos;t fully consume the seque you wind up leaking a future object.&lt;/p&gt;</comment>
                    <comment id="29231" author="amalloy" created="Sun, 19 Aug 2012 20:11:44 -0500"  >&lt;p&gt;Marking as resolved since the patch has been applied in master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11398" name="seque.patch" size="3525" author="amalloy" created="Wed, 25 Jul 2012 18:03:51 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1031] Website documentation for evaluation has misleading information about &quot;load&quot;</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1031</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In the documentation at &lt;a href=&quot;http://clojure.org/evaluation&quot;&gt;http://clojure.org/evaluation&lt;/a&gt; the documentation says &quot;(load reader)&quot; and the verbiage below mentions loading from a stream or file. This is misleading since &quot;load&quot; doesn&apos;t take a reader, but a resource. It would also be great to have pointers to load-reader and load-string here. (Where is the source for the website generated from? Is it possible to create a patch/pull request for it?)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15594">CLJ-1031</key>
            <summary>Website documentation for evaluation has misleading information about &quot;load&quot;</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="olabini">Ola Bini</reporter>
                        <labels>
                    </labels>
                <created>Wed, 25 Jul 2012 12:25:41 -0500</created>
                <updated>Fri, 10 Aug 2012 13:08:50 -0500</updated>
                    <resolved>Fri, 10 Aug 2012 13:08:50 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29103" author="stu" created="Fri, 10 Aug 2012 13:08:50 -0500"  >&lt;p&gt;Ola:&lt;/p&gt;

&lt;p&gt;Thanks for the report. The website is wikispaces, no easy patch approach AFAIK.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1028] (compile) crashes with NullPointerException if public function &apos;load&apos; is defined</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1028</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When performing AOT compilation, if the namespace being compiled or one of the namespaces :required by it defines a public function named &apos;load&apos;, the compiler will crash with a NullPointerException.&lt;/p&gt;

&lt;p&gt;The following code demonstrates this:&lt;/p&gt;

&lt;p&gt;(ns ca.ancilla.kessler.core (:gen-class)) (defn load &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x) (defn -main &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt; 0)&lt;/p&gt;

&lt;p&gt;When run directly, with &apos;clojure -m ca.ancilla.kessler.core&apos; or &apos;clojure ca/ancilla/kessler/core.clj&apos;, it runs as expected. When loaded with &apos;clojure -i&apos; and (compile)d, however, or when automatically compiled by &apos;lein run&apos;, it results in a NullPointerException (the complete stack trace is attached).&lt;/p&gt;

&lt;p&gt;This occurs whether or not &apos;load&apos; or actually called. It does not, however, occur if &apos;load&apos; is private.&lt;/p&gt;</description>
                <environment>Linux, OpenJDK 1.6.0 64bit</environment>
            <key id="15584">CLJ-1028</key>
            <summary>(compile) crashes with NullPointerException if public function &apos;load&apos; is defined</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="toxicfrog">Ben Kelly</reporter>
                        <labels>
                        <label>Compiler</label>
                        <label>bug</label>
                    </labels>
                <created>Fri, 20 Jul 2012 12:40:30 -0500</created>
                <updated>Fri, 20 Jul 2012 22:06:22 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:35:47 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29007" author="toxicfrog" created="Fri, 20 Jul 2012 12:43:33 -0500"  >&lt;p&gt;If you add (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;load&amp;#93;&lt;/span&gt;) to the (ns), it works fine:&lt;/p&gt;

&lt;p&gt;(ns ca.ancilla.kessler.core (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;load&amp;#93;&lt;/span&gt;) (:gen-class))&lt;br/&gt;
(defn load &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; x)&lt;br/&gt;
(defn -main &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt; 0)&lt;/p&gt;

&lt;p&gt;Thanks to llasram on IRC for discovering this.&lt;/p&gt;</comment>
                    <comment id="29010" author="stu" created="Fri, 20 Jul 2012 16:35:38 -0500"  >&lt;p&gt;You should not replace functions in clojure.core.  This is left legal (with a loud CONSOLE warning) for compatibility, but programs that do it are in error.&lt;/p&gt;</comment>
                    <comment id="29015" author="toxicfrog" created="Fri, 20 Jul 2012 22:06:22 -0500"  >&lt;p&gt;So, just to make sure that I have this right, then...&lt;/p&gt;

&lt;p&gt;If I want to create a namespace with a public function that shares a name with a function in clojure.core, the only supported way of doing this is to (:refer-clojure :exclude &lt;span class=&quot;error&quot;&gt;&amp;#91;list of all such functions&amp;#93;&lt;/span&gt;)?&lt;/p&gt;

&lt;p&gt;If so, it would be nice if the warning were replaced with an error, rather than having the compiler emit an error and then &lt;b&gt;crash&lt;/b&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11391" name="stack-trace" size="1541" author="toxicfrog" created="Fri, 20 Jul 2012 12:40:30 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1025] Enable support for \x.. escaped characters.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1025</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;see: &lt;a href=&quot;https://groups.google.com/d/topic/clojure/Kl3WVtEE3FY/discussion&quot;&gt;https://groups.google.com/d/topic/clojure/Kl3WVtEE3FY/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;\x.. characters (which are the same as \u00.. characters) are produced by some systems. in particular clojurescript &lt;/p&gt;

&lt;p&gt;Inability to read these characters hinders data interchange&lt;/p&gt;

&lt;p&gt;After a quick look, I believe this capability can be easily introduced by adding a case to this &lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L445&quot;&gt;https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L445&lt;/a&gt; function.&lt;br/&gt;
Mirroring &apos;u&apos; case and reading only 2 chars.&lt;/p&gt;
</description>
                <environment>All</environment>
            <key id="15577">CLJ-1025</key>
            <summary>Enable support for \x.. escaped characters.</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="davesann">Dave Sann</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Jul 2012 22:35:59 -0500</created>
                <updated>Fri, 19 Oct 2012 19:59:47 -0500</updated>
                    <resolved>Fri, 19 Oct 2012 13:55:36 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="28992" author="jafingerhut" created="Thu, 19 Jul 2012 11:46:15 -0500"  >&lt;p&gt;Thanks for the patch, Dave.  It is Rich Hickey&apos;s policy only to include code in Clojure written by those who have signed a Contributor Agreement (CA).  See here for more details: &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;  Have you signed one, or were considering it?&lt;/p&gt;</comment>
                    <comment id="28995" author="jafingerhut" created="Thu, 19 Jul 2012 15:57:22 -0500"  >&lt;p&gt;Can someone find some documentation or spec somewhere that defines this \x.. format?&lt;/p&gt;

&lt;p&gt;It is definitely different than the \x{...} syntax that exists in Perl, which permits one to insert an arbitrary Unicode character code point into a string (note: even supplementary ones that don&apos;t fit into a single UTF-16 code unit, as Java&apos;s and Clojure&apos;s \u.... is restricted to).  &lt;a href=&quot;http://perldoc.perl.org/perlunicode.html#Effects-of-Character-Semantics&quot;&gt;http://perldoc.perl.org/perlunicode.html#Effects-of-Character-Semantics&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29021" author="davesann" created="Sun, 22 Jul 2012 02:19:14 -0500"  >&lt;p&gt;&lt;a href=&quot;http://es5.github.com/x7.html#x7.8.4&quot;&gt;http://es5.github.com/x7.html#x7.8.4&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29061" author="davesann" created="Tue, 31 Jul 2012 04:35:44 -0500"  >&lt;p&gt;I am happy to sign the CA in principle. Just need to read and understand any implications for me.&lt;/p&gt;</comment>
                    <comment id="29271" author="davesann" created="Mon, 27 Aug 2012 03:31:21 -0500"  >&lt;p&gt;CA will be with you shortly.&lt;/p&gt;</comment>
                    <comment id="29663" author="davesann" created="Tue, 16 Oct 2012 03:11:01 -0500"  >&lt;p&gt;Can this go into 1.5?&lt;/p&gt;
</comment>
                    <comment id="29687" author="cemerick" created="Fri, 19 Oct 2012 08:10:20 -0500"  >&lt;p&gt;I&apos;m hitting this now as well.  But, adding support for JavaScript&apos;s flavour of &lt;tt&gt;\x..&lt;/tt&gt; escapes to the Clojure reader makes no sense to me.  If escapes are to be used, then the &lt;tt&gt;\u....&lt;/tt&gt; format seems preferable (it supersets &lt;tt&gt;\x..&lt;/tt&gt;).&lt;/p&gt;

&lt;p&gt;However, all of the readers in play (Clojure reader, ClojureScript reader, edn) all play nice with Unicode, so there&apos;s no reason to be escaping anything except for &lt;tt&gt;\t&lt;/tt&gt;, &lt;tt&gt;\n&lt;/tt&gt;, and so on.&lt;/p&gt;

&lt;p&gt;It looks like tweaking cljs&apos; string implementations of &lt;tt&gt;IPrintWithWriter&lt;/tt&gt; and &lt;tt&gt;IPrintable&lt;/tt&gt; so that only those characters are escaped would be fairly easy.  Right now, they&apos;re using &lt;tt&gt;goog.string.escape&lt;/tt&gt;, which &quot;encloses a string in double quotes and escapes characters so that the string is a valid JS string&quot;; whatever escaping is appropriate for a &quot;valid JavaScript string&quot; seems irrelevant to what e.g. &lt;tt&gt;pr-str&lt;/tt&gt; should produce.&lt;/p&gt;

&lt;p&gt;I propose closing this ticket and moving the party to CLJS.&lt;/p&gt;</comment>
                    <comment id="29694" author="stu" created="Fri, 19 Oct 2012 13:55:30 -0500"  >&lt;p&gt;Following Chas&apos;s lead and closing this one. \x doesn&apos;t appear in the JSON spec, and a quick search of StackOverflow shows people stumbling over it from a bunch of other language platforms. I think we should root it out of ClojureScript.&lt;/p&gt;</comment>
                    <comment id="29695" author="cemerick" created="Fri, 19 Oct 2012 13:58:22 -0500"  >&lt;p&gt;Great, I&apos;ll open a CLJS ticket with a patch tonight or tomorrow.&lt;/p&gt;</comment>
                    <comment id="29697" author="ivan" created="Fri, 19 Oct 2012 14:39:17 -0500"  >&lt;p&gt;Re: &quot;no reason to be escaping anything except for \t, \n&quot;: sometimes it is difficult or impossible to transmit all of Unicode (e.g. sending non-Character codepoints through XDomainRequest, or sending U+0000/U+FFFE/U+FFFF through many XHR implementations), so it might be nice to have an ASCII-only printing mode.  Probably for another ticket, though.&lt;/p&gt;</comment>
                    <comment id="29719" author="cemerick" created="Fri, 19 Oct 2012 19:59:47 -0500"  >&lt;p&gt;Here&apos;s the new ticket: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-400&quot;&gt;http://dev.clojure.org/jira/browse/CLJS-400&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;@Ivan: I agree that options in this area would be good.  There are a lot of edge cases where the defaults aren&apos;t right (e.g. I think escaping all nonprintables is a no-brainer for readably-printed strings).&lt;/p&gt;

&lt;p&gt;I suspect planning out such details should probably happen &lt;span class=&quot;error&quot;&gt;&amp;#91;here&amp;#93;&lt;/span&gt;(&lt;a href=&quot;http://dev.clojure.org/pages/viewpage.action?pageId=4063586&quot;&gt;http://dev.clojure.org/pages/viewpage.action?pageId=4063586&lt;/a&gt;) or &lt;span class=&quot;error&quot;&gt;&amp;#91;here&amp;#93;&lt;/span&gt;(&lt;a href=&quot;https://github.com/edn-format/edn/issues&quot;&gt;https://github.com/edn-format/edn/issues&lt;/a&gt;).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11382" name="0001-adding-support-for-x-escape-characters.patch" size="3012" author="davesann" created="Fri, 13 Jul 2012 23:53:35 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

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

<item>
            <title>[CLJ-1024] Varargs protococol impls can be defined but not called</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1024</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The compiler accepts this:&lt;/p&gt;

&lt;p&gt;(deftype foo []&lt;br/&gt;
  clojure.lang.IFn&lt;br/&gt;
  (invoke &lt;span class=&quot;error&quot;&gt;&amp;#91;this &amp;amp; xs&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;However calling ((foo.) :bar) will throw an AbstractMethodError. Wouldn&apos;t some checking be desirable?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15574">CLJ-1024</key>
            <summary>Varargs protococol impls can be defined but not called</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="vemv">V&#237;ctor M. Valenzuela</reporter>
                        <labels>
                        <label>patch</label>
                    </labels>
                <created>Tue, 10 Jul 2012 10:09:45 -0500</created>
                <updated>Thu, 14 Feb 2013 10:03:07 -0600</updated>
                    <resolved>Wed, 13 Feb 2013 21:22:42 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28971" author="tsdh" created="Wed, 11 Jul 2012 01:20:22 -0500"  >&lt;p&gt;First of all, clojure.lang.IFn is no protocol but an interface.  And it does not declare a&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;  public Object invoke(Object... obs)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;method.  It has an `invoke` method with 20 Object parameters followed by an Object... parameter, but to give an implementation for that, you have to specify every parameter separately, and the last Object... arg is just a normal argument that must be an Object[].  That&apos;s because Java-varags Type... parameters are just Java syntax sugar, but in the byte-code its simply a Type-array.&lt;/p&gt;

&lt;p&gt;What your example does is provide an `invoke` implementation for the 2-args version, where the first parameter happens to be named `&amp;amp;`, which has no special meaning here.  Take that example:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(deftype MyFoo []
  clojure.lang.IFn
  (invoke [this &amp;amp; xs]
    [&amp;amp; xs]))

((MyFoo.) 1 2)
=&amp;gt; [1 2]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But you are right in that `deftype`, `defrecord`, `defprotocol`, and `definferface` probably should error if user&apos;s seem to try to use varargs or destructuring.&lt;/p&gt;</comment>
                    <comment id="28972" author="vemv" created="Wed, 11 Jul 2012 01:55:22 -0500"  >&lt;p&gt;Cheers for a most clarifying response.&lt;/p&gt;

&lt;p&gt;The fact that the meaning of &amp;amp; gets &apos;subverted&apos; makes the issue only (slightly) worse, in my opinion.&lt;/p&gt;

&lt;p&gt;Just for the record, destructuring seems to work, at least for interface impls.&lt;/p&gt;</comment>
                    <comment id="28973" author="tsdh" created="Wed, 11 Jul 2012 02:42:33 -0500"  >&lt;p&gt;&amp;gt; The fact that the meaning of &amp;amp; gets &apos;subverted&apos; makes the issue only (slightly) worse, in my opinion.&lt;/p&gt;

&lt;p&gt;I agree.  I&apos;ll attach a patch which checks for those invalid usages soon.&lt;/p&gt;

&lt;p&gt;&amp;gt; Just for the record, destructuring seems to work, at least for interface impls.&lt;/p&gt;

&lt;p&gt;Could you please provide a complete example demonstrating your statement?&lt;/p&gt;

&lt;p&gt;I&apos;m rather sure that varargs and destructuring don&apos;t work for any of defprotocol, definterface, deftype, defrecord, and reify.  But you can use varargs and destructuring when providing dynamic implementations via `extend` (or `extend-protocol`, `extend-type`), because those impls are real functions in contrast to methods.&lt;/p&gt;</comment>
                    <comment id="28974" author="tsdh" created="Wed, 11 Jul 2012 02:43:31 -0500"  >&lt;p&gt;I attached a patch.  Here&apos;s the commit message:&lt;/p&gt;

&lt;p&gt;Check for invalid varags/destrucuring uses.&lt;/p&gt;

&lt;p&gt;Protocol, interface method declarations and implementations don&apos;t allow for&lt;br/&gt;
varags and destructuring support.  Currently, for example&lt;/p&gt;

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

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

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

&lt;p&gt;So this patch makes defprotocol, definterface, defrecord, deftype, and reify&lt;br/&gt;
throw an IllegalArgumentException if any argument vector contains a&lt;br/&gt;
destructuring form or varargs argument.&lt;/p&gt;</comment>
                    <comment id="28975" author="vemv" created="Thu, 12 Jul 2012 03:13:58 -0500"  >&lt;p&gt;Glad you&apos;ve considered my request.&lt;/p&gt;

&lt;p&gt;As for destructuring, I was speaking after this example, which may or may not work like it looks like - I don&apos;t know.&lt;/p&gt;

&lt;p&gt;(deftype foo []&lt;br/&gt;
  clojure.lang.IFn&lt;br/&gt;
  (invoke [this &lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt; c] (println a b c)))&lt;/p&gt;

&lt;p&gt;((foo.) &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2&amp;#93;&lt;/span&gt; 3)&lt;/p&gt;</comment>
                    <comment id="28978" author="tsdh" created="Thu, 12 Jul 2012 08:22:47 -0500"  >&lt;p&gt;Indeed, descructuring seems to work for method implementations.  I&apos;ll adapt my patch...&lt;/p&gt;</comment>
                    <comment id="28979" author="tsdh" created="Thu, 12 Jul 2012 08:42:32 -0500"  >&lt;p&gt;Revamped patch.  Here&apos;s the commit message:&lt;/p&gt;

&lt;p&gt;Protocol, interface method declarations don&apos;t allow for varags and&lt;br/&gt;
destructuring support.  Currently, for example&lt;/p&gt;

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

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

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

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

&lt;p&gt;Similarly, defrecord, deftype, and reify throw an IllegalArgumentException if&lt;br/&gt;
any method implementation arglist contains a varargs argument.&lt;/p&gt;</comment>
                    <comment id="28983" author="jafingerhut" created="Thu, 12 Jul 2012 15:43:58 -0500"  >&lt;p&gt;Tassilo, with your patch 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1024&quot; title=&quot;Varargs protococol impls can be defined but not called&quot;&gt;&lt;del&gt;CLJ-1024&lt;/del&gt;&lt;/a&gt;-Check-for-invalid-varags-destrucuring-uses.patch dated July 12, 2012, I get the following error message while testing, apparently because some metadata is missing on the new functions your patch adds to core:&lt;/p&gt;

&lt;p&gt;     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Testing clojure.test-clojure.metadata&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; &lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; FAIL in (public-vars-with-docstrings-have-added) (metadata.clj:45)&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; expected: (= [] (remove (comp :added meta) public-vars-with-docstrin&lt;br/&gt;
gs-not-generated))&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   actual: (not (= [] (#&apos;clojure.core/throw-on-varargs-and-destr #&apos;cl&lt;br/&gt;
ojure.core/throw-on-varargs)))&lt;/p&gt;</comment>
                    <comment id="28984" author="tsdh" created="Fri, 13 Jul 2012 02:10:35 -0500"  >&lt;p&gt;Hi Andy, this updated patch declares the two new checking fns private which makes the tests pass again.&lt;/p&gt;

&lt;p&gt;Stupid mistake by me:  Of course, I&apos;ve tested the last version, too, but afterwards I decided it wouldn&apos;t be bad to add some docstrings, and of course, adding docstrings cannot break anything. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/wink.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="29145" author="aaron" created="Tue, 14 Aug 2012 19:58:32 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter confirmed as a CA signer. &lt;/p&gt;</comment>
                    <comment id="29146" author="aaron" created="Tue, 14 Aug 2012 20:02:17 -0500"  >&lt;p&gt;This looks ok to me, but it seems like a fair amount of duplication to accomplish the task. It seems like we should just be able to ask if it is ok to proceed, instead of having to pick which function needs to be called in what case.&lt;/p&gt;</comment>
                    <comment id="29160" author="tsdh" created="Wed, 15 Aug 2012 01:23:49 -0500"  >&lt;p&gt;Aaron, can you please elaborate?  I don&apos;t get what you mean with duplication and asking if it is ok to proceed.&lt;/p&gt;</comment>
                    <comment id="29311" author="tsdh" created="Fri, 31 Aug 2012 01:40:51 -0500"  >&lt;p&gt;Rebased to apply cleanly on master again.&lt;/p&gt;</comment>
                    <comment id="29313" author="vemv" created="Fri, 31 Aug 2012 07:11:55 -0500"  >&lt;p&gt;Pardon the silly contribution, but the added methods&apos; usage of double-negations (when-not ...) seems unnecessary.&lt;/p&gt;</comment>
                    <comment id="29314" author="tsdh" created="Fri, 31 Aug 2012 08:03:25 -0500"  >&lt;p&gt;Hi Victor, this revamped patch removes the double-negation and is more concise and clearer as a result.  So your comment wasn&apos;t as silly as you thought. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="30594" author="tsdh" created="Thu, 14 Feb 2013 01:36:12 -0600"  >&lt;p&gt;Hey Stu, do you mind to explain why you&apos;ve declined the patch?&lt;/p&gt;</comment>
                    <comment id="30595" author="mnicky" created="Thu, 14 Feb 2013 08:52:03 -0600"  >&lt;p&gt;@Tassilo: &lt;a href=&quot;https://groups.google.com/forum/#!topic/clojure-dev/qjkW-cv8nog&quot;&gt;https://groups.google.com/forum/#!topic/clojure-dev/qjkW-cv8nog&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30597" author="tsdh" created="Thu, 14 Feb 2013 10:03:07 -0600"  >&lt;p&gt;@Marek, Stu: Thanks, I&apos;ve left a reply there: &lt;a href=&quot;https://groups.google.com/d/msg/clojure-dev/qjkW-cv8nog/rMNFqbjNj-EJ&quot;&gt;https://groups.google.com/d/msg/clojure-dev/qjkW-cv8nog/rMNFqbjNj-EJ&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11463" name="0001-CLJ-1024-Check-for-invalid-varags-destrucuring-uses.patch" size="3640" author="tsdh" created="Fri, 31 Aug 2012 08:03:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

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

<item>
            <title>[CLJ-1023] non-tail-position try block breaks mutable fields in deftype</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1023</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;:unsynchronized-mutable&lt;/tt&gt; fields of a &lt;tt&gt;deftype&lt;/tt&gt; cannot be &lt;tt&gt;set!&lt;/tt&gt; inside a &lt;tt&gt;try&lt;/tt&gt; block that is not in tail position of the method.&lt;/p&gt;

&lt;p&gt;See file *&lt;b&gt;demonstration.clj&lt;/b&gt;* for an complete code example.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15573">CLJ-1023</key>
            <summary>non-tail-position try block breaks mutable fields in deftype</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Sun, 8 Jul 2012 16:20:25 -0500</created>
                <updated>Mon, 3 Dec 2012 10:55:08 -0600</updated>
                    <resolved>Mon, 3 Dec 2012 10:55:08 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29376" author="richhickey" created="Wed, 5 Sep 2012 07:07:09 -0500"  >&lt;p&gt;I looked at this. The problem is that non-tail try blocks turn into closures, and thus the field gets propagated as a constant. IOW this can&apos;t work:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftype Foo4 [^:unsynchronized-mutable x]
  MutableX
  (set-x [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; v]
    ((fn [] (set! x v)))
    v))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;I&apos;m not going to re-evaluate the try/closure approach right now, so I recommend you make a helper method that just does the assignment and then call that in the bigger context, as a workaround.&lt;/p&gt;</comment>
                    <comment id="30160" author="halgari" created="Mon, 3 Dec 2012 10:55:08 -0600"  >&lt;p&gt;Closing this as it requires more than a simple bug fix. If you feel that Rich&apos;s work-around is unsatisfactory please create a clojure-dev discussion about rewriting try-catch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11370" name="demonstration.clj" size="928" author="stuart.sierra" created="Sun, 8 Jul 2012 16:20:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1019] ns-resolve doc has a typo</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1019</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc string for ns-resolve has a typo: environement should be environment.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15560">CLJ-1019</key>
            <summary>ns-resolve doc has a typo</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cldwalker">Gabriel Horner</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Sat, 30 Jun 2012 09:10:00 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:52 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:52 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28980" author="jafingerhut" created="Thu, 12 Jul 2012 12:54:11 -0500"  >&lt;p&gt;clj-1019-ns-resolve-doc-string-misspelling-patch1.txt dated July 12, 2012 is identical to fix_ns-resolve.patch of June 30, 2012, except it is in git format.  It includes Gabriel&apos;s name and email address for proper attribution.&lt;/p&gt;</comment>
                    <comment id="29147" author="aaron" created="Tue, 14 Aug 2012 20:07:17 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11378" name="clj-1019-ns-resolve-doc-string-misspelling-patch1.txt" size="860" author="jafingerhut" created="Thu, 12 Jul 2012 12:54:11 -0500" />
                    <attachment id="11355" name="fix_ns-resolve.patch" size="540" author="cldwalker" created="Sat, 30 Jun 2012 09:10:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1018] range&apos;s behavior is inconsistent</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1018</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Problem statement: The current behavior of range is inconsistent. (range 0 9 0) has always produced (). (range 0 9 -1) has always produced (). (range 9 0 1) has always produced (). However, (range 9 0 0) produces (9 9 9 9 ...), and (range 0 0 0) produces &apos;(0 0 0 0 ...)&lt;/p&gt;

&lt;p&gt;Proposal: Make the behavior of range consistent when using a step of 0 to make it produce an empty list.&lt;/p&gt;

&lt;p&gt;Please see attached code and patch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15557">CLJ-1018</key>
            <summary>range&apos;s behavior is inconsistent</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="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="devn">Devin Walters</reporter>
                        <labels>
                        <label>patch</label>
                        <label>range</label>
                    </labels>
                <created>Fri, 29 Jun 2012 16:25:03 -0500</created>
                <updated>Fri, 24 May 2013 07:34:58 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:34:58 -0500</resolved>
                            <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28925" author="mikera" created="Sun, 1 Jul 2012 04:08:00 -0500"  >&lt;p&gt;Agree it is good to fix the inconsistency, but I think an infinite sequence of zeros is the correct result, as implied by the current docstring definition.&lt;/p&gt;

&lt;p&gt;It&apos;s also mathematically cleanest: range should produce an arithmetic progression until the end value is equalled or exceeded.&lt;/p&gt;

&lt;p&gt;Empty lists only seem to make sense as a return value when start &amp;gt;= end.&lt;/p&gt;</comment>
                    <comment id="28928" author="devn" created="Sun, 1 Jul 2012 12:36:08 -0500"  >&lt;p&gt;Hi Mike,&lt;/p&gt;

&lt;p&gt;Could you explain how you think the docstring definition implies this behavior? Maybe I&apos;m missing something, but I was surprised. For instance, in the case of (range 3 9 0), if start were truly inclusive as the docstring says, the result would be (3), not ().&lt;/p&gt;

&lt;p&gt;You mentioned that you think the infinite sequence of 0&apos;s is consistent and in keeping with the definition of range. I&apos;m not sure I agree. (0,0] is an empty set of length zero, and [0,0) is an empty set of length zero.&lt;/p&gt;

&lt;p&gt;You state that empty list only makes sense for start &amp;gt;= end, except this is not the current behavior. Could you help me understand what you believe the appropriate behavior would be in each of the following three cases? (range 0 10 0), (range 10 0 0), and (range 0 0 0)?&lt;/p&gt;

&lt;p&gt;A few options to consider:&lt;br/&gt;
1) Fix the docstring to reflect the actual behavior of range.&lt;br/&gt;
2) Handle the case of (range 9 3 0) =&amp;gt; (9 9 9 ...) to make it consistent with the behavior of (range 3 9 0) =&amp;gt; ()&lt;br/&gt;
3) Stop allowing a step of zero altogether.&lt;/p&gt;

&lt;p&gt;Editing to Add (Note: I don&apos;t think the way someone else did something is always the right way, just wanted to do some digging on how other people have handled this in the past):&lt;br/&gt;
&lt;a href=&quot;http://docs.python.org/library/functions.html#range&quot;&gt;http://docs.python.org/library/functions.html#range&lt;/a&gt; (0 step returns ValueError)&lt;br/&gt;
&lt;a href=&quot;http://www2.tcl.tk/10797&quot;&gt;http://www2.tcl.tk/10797&lt;/a&gt; (range returns empty list for a zero step)&lt;br/&gt;
&lt;a href=&quot;http://www.scala-lang.org/api/2.7.7/scala/Range.html&quot;&gt;http://www.scala-lang.org/api/2.7.7/scala/Range.html&lt;/a&gt; (zero step is not allowed)&lt;/p&gt;</comment>
                    <comment id="28956" author="jimpil" created="Thu, 5 Jul 2012 16:13:22 -0500"  >&lt;p&gt;It does make sense NOT to allow a step of zero (at least to me)... I wasn&apos;t going to say anything about this but if other popular languages do not allow 0, then I guess it makes more sense than I originally gave myself credit for... However, if we want to be mathematically correct then the answer would be to return an infinte seq with the start value like below. After all, what  is a step of 0? does it  make any difference how many steps you take if with every step you cover 0 distance? obviously not...you start from x and you stay at x forever...we do have repeat for this sort of thing though... &lt;/p&gt;

&lt;p&gt;(take 5 (range 3 9 0)) =&amp;gt; (3 3 3 3 3)&lt;/p&gt;

&lt;p&gt;+1 for not allowing 0 step&lt;/p&gt;</comment>
                    <comment id="28958" author="mikera" created="Sun, 8 Jul 2012 08:49:11 -0500"  >&lt;p&gt;@Devin quite simple: a lazy sequence of nums starting from x with step 0.0 until it reaches an end value of y (where y &amp;gt; x) is an infinite sequence of x.&lt;/p&gt;

&lt;p&gt;Consider the case where start is 0 and end is infinity (the default), you would expect sequences to go as follows:&lt;/p&gt;

&lt;p&gt;step +2 : 0  2  4  6  8....&lt;br/&gt;
step +1 : 0  1  2  3  4....&lt;br/&gt;
step +0 : 0  0  0  0  0....&lt;/p&gt;

&lt;p&gt;It would be inconsistent to make 0 a special case, all of these are valid arithmetic progressions. And all of these are consistent with the current docstring.&lt;/p&gt;

&lt;p&gt;If you make 0 a special case, then people will need to write special case code to handle it. Consider the code to create a multiplication table for example:&lt;/p&gt;

&lt;p&gt;(for &lt;span class=&quot;error&quot;&gt;&amp;#91;x (range 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
     (take 10 (range 0 Long/MAX_VALUE x)))&lt;/p&gt;

&lt;p&gt;This works fine if you produce an infinite sequence of zeros for step 0, but fails if you create an empty list as a special case for step 0.&lt;/p&gt;

&lt;p&gt;As a related issue, I&apos;d personally also favour negative step sizes also producing an infinite sequence. If we don&apos;t want to allow this though, then at least the docstring should be changed to say &quot;a lazy seq of non-decreasing nums&quot; and a negative step should throw an error.&lt;/p&gt;</comment>
                    <comment id="28959" author="devn" created="Mon, 9 Jul 2012 19:09:16 -0500"  >&lt;p&gt;Carrying over a message from the clojure-dev list by Stuart Sierra:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;I called the ticket a defect. Does that seem reasonable?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;yes&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Does anyone actually use the 0 step behavior in their programs?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;not if they have any sense&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Has anyone been bitten by this in the past?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;not me&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Is this behavior intentional for some historical reason I don&apos;t know about or understand?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I doubt it.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Has this been brought up before? I couldn&apos;t find any reference to it via Google.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Not that I know of.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Are there performance implications to my patch?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I doubt it. Lazy seqs are not ideal for high-performance code anyway.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Am I addressing a symptom rather than the problem?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I think the &lt;b&gt;problem&lt;/b&gt; is that the result of `range` with a step of 0 was never specified. Don&apos;t assume that the tests are specifications. Many of the tests in Clojure were written by over-eager volunteers who defined the tests based on whatever the behavior happened to be. The only specification from the language designer is the docstring. By my reading, that means that `range` with a step of 0 should return an infinite seq of the start value, unless the start and end values are equal.&lt;/p&gt;

&lt;p&gt;-S&lt;/p&gt;</comment>
                    <comment id="28960" author="devn" created="Mon, 9 Jul 2012 19:10:24 -0500"  >&lt;p&gt;Carrying over a message by Michal Marczyk:&lt;/p&gt;

&lt;p&gt;With a negative step, the comparison is reversed, so that e.g.&lt;/p&gt;

&lt;p&gt;(range 3 0 -1)&lt;/p&gt;

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

&lt;p&gt;(3 2 1)&lt;/p&gt;

&lt;p&gt;I think this is the useful behaviour; the docstring should perhaps be&lt;br/&gt;
adjusted to match it.&lt;/p&gt;

&lt;p&gt;Agreed on zero step.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Micha&#322;&lt;/p&gt;</comment>
                    <comment id="29014" author="devn" created="Fri, 20 Jul 2012 17:10:19 -0500"  >&lt;p&gt;Adding a new patch after hearing comments. This patch makes (range 9 3 0) =&amp;gt; (9 9 9 9 ...), (range 3 9 0) =&amp;gt; (3 3 3 3 ...), and () will be returned when (= start end). Also updated the docstring.&lt;/p&gt;</comment>
                    <comment id="30065" author="halgari" created="Tue, 27 Nov 2012 15:01:11 -0600"  >&lt;p&gt;Marking as vetted&lt;/p&gt;</comment>
                    <comment id="30066" author="halgari" created="Tue, 27 Nov 2012 15:04:24 -0600"  >&lt;p&gt;Patch applies cleanly. We&apos;ve discussed this issue to death (for as simple as it is). I think it&apos;s time to mark it as screened. &lt;/p&gt;</comment>
                    <comment id="30067" author="halgari" created="Tue, 27 Nov 2012 15:06:27 -0600"  >&lt;p&gt;For some reason I&apos;m not allowed to edit the attachments list. When you apply the patch, please apply inconsistent_range_fix.diff as that is the most recent version of the fix. &lt;/p&gt;</comment>
                    <comment id="30194" author="richhickey" created="Sun, 9 Dec 2012 06:44:10 -0600"  >&lt;p&gt;As someone who has to read these tickets, I&apos;d really appreciate it if you could keep the description up to date and accurate, with examples of the current and intended behavior and the strategy to be used in fixing. I can&apos;t follow every thread to see what the latest thinking is, especially on a patch like this where the original mission was changed.&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;</comment>
                    <comment id="30207" author="devn" created="Mon, 10 Dec 2012 15:53:31 -0600"  >&lt;p&gt;@Tim: I&apos;ve removed the other attachments.&lt;/p&gt;

&lt;p&gt;@Rich: Understood. I will update the description this evening.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11393" name="inconsistent_range_fix.diff" size="1944" author="devn" created="Fri, 20 Jul 2012 17:10:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1014] Latest Clojure master doesn&apos;t build</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1014</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Compile fails with the following error:&lt;/p&gt;

&lt;p&gt;compile-clojure:&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Compiling clojure.core to /home/ezyang/Dev/clojure/target/classes&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Compiling clojure.core.protocols to /home/ezyang/Dev/clojure/target/classes&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Compiling clojure.core.reducers to /home/ezyang/Dev/clojure/target/classes&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Exception in thread &quot;main&quot; java.lang.ClassNotFoundException: jsr166y.ForkJoinPool, compiling:(clojure/core/reducers.clj:56)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6462)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2478)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:518)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6262)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyze(Compiler.java:6223)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile1(Compiler.java:7030)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile1(Compiler.java:7025)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile1(Compiler.java:7025)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.compile(Compiler.java:7097)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.compile(RT.java:387)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.load(RT.java:427)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.load(RT.java:400)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$load$fn__4919.invoke(core.clj:5424)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$load.doInvoke(core.clj:5423)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$load_one.invoke(core.clj:5236)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$compile$fn__4924.invoke(core.clj:5435)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.core$compile.invoke(core.clj:5434)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Var.invoke(Var.java:415)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compile.main(Compile.java:81)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Caused by: java.lang.ClassNotFoundException: jsr166y.ForkJoinPool&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.net.URLClassLoader$1.run(URLClassLoader.java:217)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.security.AccessController.doPrivileged(Native Method)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.net.URLClassLoader.findClass(URLClassLoader.java:205)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.lang.ClassLoader.loadClass(ClassLoader.java:321)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.lang.ClassLoader.loadClass(ClassLoader.java:266)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.lang.Class.forName0(Native Method)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at java.lang.Class.forName(Class.java:264)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.RT.classForName(RT.java:2043)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:957)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$HostExpr.access$400(Compiler.java:736)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2473)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455)&lt;br/&gt;
         &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;     ... 35 more&lt;/p&gt;</description>
                <environment>Ubuntu 10.10 Maverick&lt;br/&gt;
Java 1.6.0_20m OpenJDK (IcedTea6 1.9.13) </environment>
            <key id="15534">CLJ-1014</key>
            <summary>Latest Clojure master doesn&apos;t build</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ezyang">Edward Z. Yang</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Jun 2012 09:25:45 -0500</created>
                <updated>Fri, 20 Jul 2012 16:49:29 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:49:29 -0500</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28805" author="jafingerhut" created="Thu, 14 Jun 2012 11:42:08 -0500"  >&lt;p&gt;What command did you use?&lt;/p&gt;

&lt;p&gt;From the error message, my guess is that you ran &quot;ant&quot; without first running &quot;./antsetup.sh&quot;.  If that is the case, run &quot;./antsetup.sh&quot; first.  This is a new step added to readme.txt on May 7, 2012, because of the jsr166y.ForkJoinPool class used within Clojure to implement the new parallel reducers feature.&lt;/p&gt;</comment>
                    <comment id="28806" author="ezyang" created="Thu, 14 Jun 2012 14:16:05 -0500"  >&lt;p&gt;Yep, that&apos;s exactly it. Can we setup ant to warn people if antsetup.sh hasn&apos;t been run?&lt;/p&gt;</comment>
                    <comment id="28807" author="jafingerhut" created="Thu, 14 Jun 2012 17:12:23 -0500"  >&lt;p&gt;I don&apos;t know.  I suspect if it could be done and it were a straightforward modification, a patch for that would be accepted.  I suspect those who created antsetup.sh would have simply modified the build.xml file for ant, and not created antsetup.sh at all, if it were easy to do so.&lt;/p&gt;</comment>
                    <comment id="28911" author="roytruelove@gmail.com" created="Tue, 26 Jun 2012 15:58:49 -0500"  >&lt;p&gt;It can be done with just the build.xml but requires the &lt;a href=&quot;http://maven.apache.org/ant-tasks/index.html&quot;&gt;Maven Ant Tasks jar&lt;/a&gt; to be in the local ant&apos;s classpath, which is not ideal.&lt;/p&gt;

&lt;p&gt;Because a local maven install is anyway required by antsetup.sh, IMHO it would be best to remove the ant build all together and stick with solely with a maven build, no?&lt;/p&gt;</comment>
                    <comment id="28912" author="jafingerhut" created="Wed, 27 Jun 2012 13:16:05 -0500"  >&lt;p&gt;I can&apos;t find the email right now, but I believe in the past Rich Hickey has expressed a preference for continuing to have a way to build Clojure using ant.&lt;/p&gt;</comment>
                    <comment id="29012" author="stu" created="Fri, 20 Jul 2012 16:49:21 -0500"  >&lt;p&gt;Ant is there for the convenience of various dinosaurs, myself included. In general you should use the maven build, as that is what the CI and release process do.&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-1012] partial function should also accept 1 arg (just f)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1012</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The partial function should accept just a function. This allows it to be properly used with apply.&lt;/p&gt;

&lt;p&gt;E.g. This breaks (but shouldn&apos;t) if args are nil: (apply partial f args)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15529">CLJ-1012</key>
            <summary>partial function should also accept 1 arg (just f)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="kanaka">Joel Martin</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Jun 2012 14:28:13 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:52 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:52 -0500</resolved>
                            <version>Release 1.4</version>
                <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28792" author="hircus" created="Wed, 13 Jun 2012 05:18:28 -0500"  >&lt;p&gt;Attached patch makes partial just returns f if called with only one argument. Not sure if this will have a performance impact or not; a Clojure/core member would probably be able to better judge if the use cases outweigh any performance hit.&lt;/p&gt;</comment>
                    <comment id="29173" author="fogus" created="Wed, 15 Aug 2012 10:45:58 -0500"  >&lt;p&gt;Attached a patch adding a test for this ticket.&lt;/p&gt;</comment>
                    <comment id="29174" author="fogus" created="Wed, 15 Aug 2012 10:47:43 -0500"  >&lt;p&gt;Original patch is trivial, but did not have a test. I added a test as a separate patch file.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11315" name="0001-Extend-partial-function-to-also-handle-one-argument-.patch" size="762" author="hircus" created="Wed, 13 Jun 2012 05:18:28 -0500" />
                    <attachment id="11433" name="CLJ-1012-partial-1-arity-test.diff" size="825" author="fogus" created="Wed, 15 Aug 2012 10:45:57 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

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

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

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;I&apos;ll send in a CA.&lt;/p&gt;</comment>
                    <comment id="28828" author="phiipa" created="Sat, 16 Jun 2012 05:27:29 -0500"  >&lt;p&gt;CA snail-mailed yesterday, I guess it will take a week to arrive.&lt;/p&gt;</comment>
                    <comment id="28891" author="phiipa" created="Sat, 23 Jun 2012 05:00:17 -0500"  >&lt;p&gt;I now have a CA in place.&lt;/p&gt;</comment>
                    <comment id="29013" author="stu" created="Fri, 20 Jul 2012 16:51:32 -0500"  >&lt;p&gt;Yeah, this should be fixed.&lt;/p&gt;</comment>
                    <comment id="29158" author="aaron" created="Tue, 14 Aug 2012 21:42:01 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11311" name="0001-clojure.data-diff-cope-with-falsey-values-in-maps.patch" size="2164" author="phiipa" created="Tue, 12 Jun 2012 14:48:44 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1009] make print-table org mode compatible</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1009</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="15521">CLJ-1009</key>
            <summary>make print-table org mode compatible</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Jun 2012 13:18:30 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28760" author="jafingerhut" created="Fri, 8 Jun 2012 22:39:28 -0500"  >&lt;p&gt;Patch clj-1009-print-table-org-mode-patch2.txt dated June 8, 2012 is the same as Stuart Halloway&apos;s print-table-org-mode.txt of the same date, except a couple of tests have been added.  His code changes look correct to me.&lt;/p&gt;</comment>
                    <comment id="29149" author="aaron" created="Tue, 14 Aug 2012 20:22:44 -0500"  >&lt;p&gt;This is not quite correct. the header separator in org-mode is &lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;|--+--+--|&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; not &lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;+--+--+&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;</comment>
                    <comment id="29168" author="jafingerhut" created="Wed, 15 Aug 2012 10:29:30 -0500"  >&lt;p&gt;clj-1009-print-table-org-mode-patch3.txt dated Aug 15, 2012 is same as the previous -patch2.txt version of Jun 8, 2012 (now deleted as obsolete), except it corrects the header separator as identified by Aaron Bedra.&lt;/p&gt;</comment>
                    <comment id="29169" author="jafingerhut" created="Wed, 15 Aug 2012 10:31:48 -0500"  >&lt;p&gt;Presumptuously changing approval from Incomplete back to Vetted, as it was before Aaron Bedra described a problem with the patch, and I updated the patch to address his comment.  Feel free to apply the smackdown if necessary. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="29172" author="aaron" created="Wed, 15 Aug 2012 10:44:50 -0500"  >&lt;p&gt;Looks ok now. Three cheers for org-mode awesomeness!!!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11431" name="clj-1009-print-table-org-mode-patch3.txt" size="3402" author="jafingerhut" created="Wed, 15 Aug 2012 10:29:30 -0500" />
                    <attachment id="11302" name="print-table-org-mode.txt" size="2034" author="stu" created="Fri, 8 Jun 2012 13:18:30 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-1007] Faster empty map creation, default to PersistentArrayMap when converting an obj-map whose lenght is less than cljs.core.PersistentArrayMap/HASHMAP_THRESHOLD</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1007</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="15503">CLJ-1007</key>
            <summary>Faster empty map creation, default to PersistentArrayMap when converting an obj-map whose lenght is less than cljs.core.PersistentArrayMap/HASHMAP_THRESHOLD</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="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Sat, 2 Jun 2012 14:13:20 -0500</created>
                <updated>Thu, 7 Jun 2012 10:48:36 -0500</updated>
                    <resolved>Thu, 7 Jun 2012 10:48:36 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28731" author="jafingerhut" created="Wed, 6 Jun 2012 16:59:25 -0500"  >&lt;p&gt;This patch appears to be for ClojureScript, not Clojure on the JVM.  Unless there is a way to change the project that a ticket belongs to after it is created, a new ticket should be created for the ClojureScript project at the link below, and this ticket closed:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS&quot;&gt;http://dev.clojure.org/jira/browse/CLJS&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28732" author="bronsa" created="Thu, 7 Jun 2012 06:52:20 -0500"  >&lt;p&gt;I couldn&apos;t find any way to move this to CLJS, so i created a new ticked (&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-307&quot;&gt;http://dev.clojure.org/jira/browse/CLJS-307&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This one can be closed, thanks Andy&lt;/p&gt;</comment>
                    <comment id="28736" author="jafingerhut" created="Thu, 7 Jun 2012 10:48:36 -0500"  >&lt;p&gt;It wasn&apos;t when it was filed, but now it is a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-307&quot; title=&quot;Faster empty map creation, default to PersistentArrayMap when converting an obj-map whose lenght is less than cljs.core.PersistentArrayMap/HASHMAP_THRESHOLD&quot;&gt;&lt;del&gt;CLJS-307&lt;/del&gt;&lt;/a&gt; &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11284" name="maps-improvs.patch" size="1832" author="bronsa" created="Sat, 2 Jun 2012 14:13:20 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-1006] Quotient on bigdec may produce wrong result</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1006</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;As discussed on the mailing list in the message &quot;When arithmetic on a computer bite back&quot; (01/jun)&lt;/p&gt;

&lt;p&gt;There may be bug in the way quotient is implemented for bigdec.&lt;/p&gt;

&lt;p&gt;user&amp;gt; (quot 1.4411518807585587E17 2)   ;; correct with doubles&lt;br/&gt;
7.2057594037927936E16&lt;br/&gt;
user&amp;gt; (quot 1.4411518807585587E+17M 2) ;; wrong with BigDecs&lt;br/&gt;
72057594037927935M &lt;/p&gt;

&lt;p&gt;&amp;#8211;&lt;br/&gt;
Laurent&lt;/p&gt;</description>
                <environment>Linux 3.2.0-24-generic #39-Ubuntu SMP i686 GNU/Linux</environment>
            <key id="15500">CLJ-1006</key>
            <summary>Quotient on bigdec may produce wrong result</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="laurentj">laurent joigny</reporter>
                        <labels>
                        <label>bug</label>
                    </labels>
                <created>Fri, 1 Jun 2012 16:12:34 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:49:48 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28677" author="laurentj" created="Fri, 1 Jun 2012 17:48:24 -0500"  >&lt;p&gt;I can reproduce the bug when using BigDecimal constructor on String.&lt;br/&gt;
See attached file for a test class.&lt;/p&gt;

&lt;p&gt;More infos :&lt;br/&gt;
java version &quot;1.6.0_24&quot;&lt;br/&gt;
OpenJDK Runtime Environment (IcedTea6 1.11.1) (6b24-1.11.1-4ubuntu3)&lt;br/&gt;
OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)&lt;/p&gt;</comment>
                    <comment id="28678" author="laurentj" created="Fri, 1 Jun 2012 17:49:50 -0500"  >&lt;p&gt;A simple test file, that you can drop in Clojure sources and execute to reproduce the bug on BigDecimal constructor using String as argument.&lt;/p&gt;</comment>
                    <comment id="28687" author="tsdh" created="Sun, 3 Jun 2012 04:30:44 -0500"  >&lt;p&gt;Seems to be a general precision problem.  Note that in&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; (quot 1.4411518807585587E17 2) ;; correct with doubles
7.2057594037927936E16
user&amp;gt; (quot 1.4411518807585587E+17M 2) ;; wrong with BigDecs
72057594037927935M
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;the double result is actually wrong and the bigdec one is correct.  The problem which lead to the wrong conclusion is that in your calculation the input number is already wrong.&lt;/p&gt;

&lt;p&gt;So the moral is: don&apos;t use any floating points (neither doubles nor bigdecs) for computations involving divisibility tests.&lt;/p&gt;

&lt;p&gt;For bigdecs, you can set the math context for making computations throw exceptions if they lose precision, though:&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 [*math-context* (java.math.MathContext. 1 java.math.RoundingMode/UNNECESSARY)]
	       (quot (bigdec (Math/pow 2 58)) 2))
;Division impossible
;  [Thrown class java.lang.ArithmeticException]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29920" author="stuart.sierra" created="Fri, 9 Nov 2012 08:49:48 -0600"  >&lt;p&gt;Not a bug. Just floating-point arithmetic.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11282" name="TestBigDecimalQuotient.java" size="782" author="laurentj" created="Fri, 1 Jun 2012 17:49:50 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-1000] Performance drop in PersistentHashMap.valAt(...) in v.1.4 -- Util.hasheq(...) ?</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-1000</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It seems there is a 30-40% performance degradation of PersistentHashMap.valAt(...) in Clojure 1.4.&lt;br/&gt;
Possibly due to references to new CPU-hungry implementation of Util.hasheq(...).&lt;/p&gt;

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

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

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


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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;I recommend adding a collection test to the current benchmark:&lt;/p&gt;

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

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

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

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


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

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

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


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

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

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


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

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

&lt;p&gt;$ git clone &lt;a href=&quot;https://github.com/oshyshko/clj-perf.git&quot;&gt;https://github.com/oshyshko/clj-perf.git&lt;/a&gt;&lt;br/&gt;
$ cd clj-perf&lt;br/&gt;
$ lein run-all&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11743" name="caching-hasheq-v3.diff" size="10183" author="cgrand" created="Mon, 3 Dec 2012 11:30:04 -0600" />
                    <attachment id="11240" name="clj_13.png" size="139196" author="oshyshko" created="Mon, 21 May 2012 22:06:54 -0500" />
                    <attachment id="11241" name="clj_14.png" size="143427" author="oshyshko" created="Mon, 21 May 2012 22:06:54 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-999] Wrong link in gh-pages index (api-index.html)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-999</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The api-index.html includes wrong links for the following:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;All entries for all listed as part of clojure.test.tap&lt;/li&gt;
	&lt;li&gt;All entries for all listed as part of clojure.test.junit&lt;/li&gt;
	&lt;li&gt;All entries for all listed as part of clojure.core.protocols&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The links point to pages that do not exist. The problem is that the documentation for those entries is on a &quot;parent&quot; page, for example, the link clojure.core.protocols-api.html#clojure.core.protocols/internal-reduce should have been clojure.core-api.html#clojure.core.protocols/internal-reduce&lt;/p&gt;

&lt;p&gt;Not a huge bug for me, but you might want to get it fixed.&lt;/p&gt;

&lt;p&gt;And please give my huge thanks to whoever is in charge of the documentation, I&apos;m the developer behind Dash, a Mac OS X documentation browser, and I was in the process of creating a documentation set for Clojure, and because you guys have an index, you made my work 1000 times easier.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15459">CLJ-999</key>
            <summary>Wrong link in gh-pages index (api-index.html)</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="5" iconUrl="http://dev.clojure.org/jira/images/icons/status_resolved.gif">Resolved</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="tomfaulhaber">Tom Faulhaber</assignee>
                                <reporter username="bogdansrc">Bogdan Popescu</reporter>
                        <labels>
                        <label>docs</label>
                        <label>documentation</label>
                    </labels>
                <created>Fri, 18 May 2012 21:58:46 -0500</created>
                <updated>Mon, 20 May 2013 16:24:12 -0500</updated>
                    <resolved>Mon, 20 May 2013 16:18:25 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30732" author="jafingerhut" created="Mon, 11 Mar 2013 15:01:12 -0500"  >&lt;p&gt;Is this fixed now?  Tom Faulhaber has regenerated the docs after the recent Clojure 1.5 release, and I think updated other things besides, so it might be.&lt;/p&gt;</comment>
                    <comment id="30734" author="tomfaulhaber" created="Mon, 11 Mar 2013 16:43:15 -0500"  >&lt;p&gt;Nope, not fixed.&lt;/p&gt;

&lt;p&gt;This one either slipped by me or came in right when I was changing jobs so didn&apos;t stick in my brain.&lt;/p&gt;

&lt;p&gt;I&apos;ll take a look now. Thanks for the report, Bogdan, and thanks for the bump, Andy to get it on my radar.&lt;/p&gt;</comment>
                    <comment id="31081" author="cldwalker" created="Fri, 10 May 2013 16:00:55 -0500"  >&lt;p&gt;Tom, I&apos;m happy to help if you need it. Could you document on a wiki page how autodoc is run here? I couldn&apos;t find such a page.&lt;/p&gt;</comment>
                    <comment id="31121" author="tomfaulhaber" created="Mon, 20 May 2013 16:18:25 -0500"  >&lt;p&gt;This is fixed with gh-pages commit 919143e (autodoc doesn&apos;t follow the regular Clojure release path since it&apos;s a website built off the source checkins).&lt;/p&gt;</comment>
                    <comment id="31122" author="tomfaulhaber" created="Mon, 20 May 2013 16:24:12 -0500"  >&lt;p&gt;Gabriel, Thanks for the offer. I fixed this one, but may take you up on it if more come up. &lt;/p&gt;

&lt;p&gt;There is currently no wiki page about the autodoc process but it&apos;s an excellent suggestion. I&apos;ll put it on my list to write something up. In the meantime source on the autodoc program itself is at &lt;a href=&quot;https://github.com/tomfaulhaber/autodoc&quot;&gt;https://github.com/tomfaulhaber/autodoc&lt;/a&gt; and a description of how it works is at &lt;a href=&quot;http://tomfaulhaber.github.io/autodoc&quot;&gt;http://tomfaulhaber.github.io/autodoc&lt;/a&gt;. Two caveats: (1) autodoc is currently undergoing a bunch of work (thus this bug fix) in preparation for a new release and (2) the documentation doesn&apos;t talk much about how it&apos;s used for documenting Clojure itself.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10000">None</customfieldvalue>

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

<item>
            <title>[CLJ-998] doc string for replace-first mentions non-existent replace-all</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-998</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The doc string for clojure.string/replace-first says see also replace-all, which does not exist.  The actual function is simply &apos;replace&apos;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15455">CLJ-998</key>
            <summary>doc string for replace-first mentions non-existent replace-all</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Fri, 18 May 2012 11:34:39 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 18 May 2012 11:43:06 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28523" author="jafingerhut" created="Fri, 18 May 2012 11:42:21 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-870&quot; title=&quot;clojure.string/replace behaves unexpectedly when \ or $ are part of the result string&quot;&gt;&lt;del&gt;CLJ-870&lt;/del&gt;&lt;/a&gt; patch file &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;-870-905-combined-fix3.patch dated Feb 28, 2012 fixes this issue, some other doc string issues, and fixes to the code.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11228" name="0001-fix-doc-string-for-replace-first.patch" size="725" author="steveminer@gmail.com" created="Fri, 18 May 2012 11:34:39 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-996] alter-var-root + protocol function call results in StackOverflow</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-996</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The following code:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns example.core)

(defprotocol Foo
  (foo [x]))

(extend-protocol Foo
  &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; (foo [x] x)
  nil (foo [x] nil))

(defn apply-foo [f]
  (fn [&amp;amp; args]
    (foo (apply f args))))

(alter-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;-root #&apos;assoc apply-foo)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;takes forever to compile from emacs+swank. Running from &lt;tt&gt;lein repl&lt;/tt&gt; results in following:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (use &apos;example.core)
StackOverflowError   clojure.lang.ArrayChunk.&amp;lt;init&amp;gt; (ArrayChunk.java:28)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If delete the &lt;tt&gt;foo&lt;/tt&gt; call from the &lt;tt&gt;apply-foo&lt;/tt&gt;:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn apply-foo [f]
  (fn [&amp;amp; args]
    (apply f args)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;then code compiles and executes fine.&lt;/p&gt;

&lt;p&gt;This is true not only for &lt;tt&gt;assoc&lt;/tt&gt;, but also for &lt;tt&gt;conj&lt;/tt&gt;, &lt;tt&gt;into&lt;/tt&gt; and possibly some other functions. Note also that crashes was seen even when the protocol function is not called, but there is call to &lt;tt&gt;satisfies?&lt;/tt&gt; in the &lt;tt&gt;apply-foo&lt;/tt&gt; function (although it&apos;s not clear for me how to reproduce it). Tested on clojure 1.3 and 1.4.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15446">CLJ-996</key>
            <summary>alter-var-root + protocol function call results in StackOverflow</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="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnaumov">Dmitri Naumov</reporter>
                        <labels>
                    </labels>
                <created>Wed, 16 May 2012 14:06:08 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:42:32 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29634" author="tsdh" created="Thu, 11 Oct 2012 13:23:50 -0500"  >&lt;p&gt;Is this bug a fairly well-constructed joke?  I guess so. &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 this is what I think happens:  You change the value of &lt;tt&gt;#&apos;assoc&lt;/tt&gt; to the function returned by &lt;tt&gt;apply-foo&lt;/tt&gt;.  The &lt;tt&gt;alter-var-root&lt;/tt&gt; call executes &lt;tt&gt;(apply-foo assoc)&lt;/tt&gt; because &lt;tt&gt;assoc&lt;/tt&gt; is the current value of &lt;tt&gt;#&apos;assoc&lt;/tt&gt;, thus the new value of &lt;tt&gt;#&apos;assoc&lt;/tt&gt; is {{(fn &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; args&amp;#93;&lt;/span&gt; (foo (apply assoc args)))}}.  However, &lt;tt&gt;fn&lt;/tt&gt; is a macro that expands to &lt;tt&gt;fn*&lt;/tt&gt; and calls &lt;tt&gt;destructure&lt;/tt&gt; which uses &lt;tt&gt;assoc&lt;/tt&gt;!!!  So now &lt;tt&gt;foo&lt;/tt&gt; gets called, and probably there&apos;s another &lt;tt&gt;assoc&lt;/tt&gt; call during protocol dispatch, and there you have your non-terminating recursion.&lt;/p&gt;

&lt;p&gt;So the lesson is: Don&apos;t alter core functions unless you&apos;re exactly knowing what you do.&lt;/p&gt;</comment>
                    <comment id="29919" author="stuart.sierra" created="Fri, 9 Nov 2012 08:42:32 -0600"  >&lt;p&gt;Not a bug. You can&apos;t alter core functions and expect things not to break.&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-990] Implement clojure.core.reducers/mapcat and some initial reducers tests</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-990</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The first patch implements a reducers equivalent of &lt;tt&gt;clojure.core/mapcat&lt;/tt&gt;, and the second patch adds a new &lt;tt&gt;reducers.clj&lt;/tt&gt; to the clojure tests that checks that &lt;tt&gt;map&lt;/tt&gt;, &lt;tt&gt;mapcat&lt;/tt&gt;, &lt;tt&gt;filter&lt;/tt&gt;, and &lt;tt&gt;reduce&lt;/tt&gt; are equivalent in &lt;tt&gt;clojure.core&lt;/tt&gt; and &lt;tt&gt;clojure.core.reducers&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15426">CLJ-990</key>
            <summary>Implement clojure.core.reducers/mapcat and some initial reducers tests</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>patch</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 10 May 2012 13:02:20 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Thu, 10 May 2012 19:45:01 -0500</resolved>
                            <version>Release 1.5</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28433" author="richhickey" created="Thu, 10 May 2012 19:44:32 -0500"  >&lt;p&gt;applied - thanks!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11185" name="0001-Implement-clojure.core.reducers-mapcat.patch" size="1356" author="tsdh" created="Thu, 10 May 2012 13:02:20 -0500" />
                    <attachment id="11186" name="0002-Add-initial-reducers-tests.patch" size="2400" author="tsdh" created="Thu, 10 May 2012 13:02:20 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-989] clojure.org/downloads page, nightly builds link out of date</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-989</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The clojure.org/downloads page links a page that claims to have up to date builds of Clojure&apos;s master branch at build.clojure.org.&lt;/p&gt;

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

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

&lt;p&gt;afaik there are no alpha/beta versions of 1.5 yet.&lt;/p&gt;</comment>
                    <comment id="28438" author="jafingerhut" created="Thu, 10 May 2012 20:52:02 -0500"  >&lt;p&gt;Closing this issue &amp;#8211; Brent or someone else can reopen if they feel the issue was not fully resolved.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

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

&lt;p&gt;this is due to getMethod being synchronized. it would be great if there was some fast non-locking path through the multimethod.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15419">CLJ-988</key>
            <summary>the locking in MultiFn.java (synchronized methods) can cause lots of contention in multithreaded programs</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                        <label>bug</label>
                        <label>performance</label>
                    </labels>
                <created>Tue, 8 May 2012 11:14:53 -0500</created>
                <updated>Fri, 21 Sep 2012 14:21:33 -0500</updated>
                    <resolved>Fri, 21 Sep 2012 14:21:33 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>10</votes>
                        <watches>9</watches>
                        <comments>
                    <comment id="28411" author="hiredman" created="Tue, 8 May 2012 11:30:00 -0500"  >&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/6a8219ae3d4cd0ae?hl=en&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/6a8219ae3d4cd0ae?hl=en&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28446" author="santiago" created="Fri, 11 May 2012 06:38:34 -0500"  >&lt;p&gt;Here&apos;s a stab in the dark attempt at rewriting MultiFn to use atoms to swap between immutable copies of its otherwise mutable state. &lt;/p&gt;

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

&lt;p&gt;I can confirm similar performance measurements using David Santiago&apos;s benchmark, compared with Clojure 1.5 master as of commit f5f4faf.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Mean runtime (ms) of a multimethod when called repeatedly from N threads:

|            | N=1 | N=2 | N=4 |
|------------+-----+-----+-----|
| 1.5 master |  80 | 302 | 765 |
| lockless   |  63 |  88 | 125 |&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

&lt;p&gt;If you could though, I&apos;d appreciate a patch with just the multimethod tests.&lt;/p&gt;</comment>
                    <comment id="29449" author="jafingerhut" created="Sat, 15 Sep 2012 10:59:01 -0500"  >&lt;p&gt;Patch clj-988-tests-only-patch-v1.txt dated Sep 15 2012 is a subset of David Santiago&apos;s &lt;br/&gt;
patch issue988-lockless-multifn+tests-120817.diff dated Aug 17 2012.  It includes only the tests from that patch.  Applies cleanly and passes tests with latest master after Rich&apos;s read/write lock change for multimethods was committed.&lt;/p&gt;</comment>
                    <comment id="29463" author="richhickey" created="Mon, 17 Sep 2012 09:20:43 -0500"  >&lt;p&gt;tests-only patch ok&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11498" name="clj-988-tests-only-patch-v1.txt" size="3569" author="jafingerhut" created="Sat, 15 Sep 2012 10:59:01 -0500" />
                    <attachment id="11441" name="issue988-lockless-multifn+tests-120817.diff" size="15875" author="santiago" created="Fri, 17 Aug 2012 19:44:54 -0500" />
                    <attachment id="11321" name="issue988-lockless-multifn+tests.diff" size="12422" author="santiago" created="Fri, 15 Jun 2012 04:45:58 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-987] pprint doesn&apos;t flush the underlying stream</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-987</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Unlike prn, pprint doesn&apos;t flush the underlying stream.&lt;/p&gt;

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

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

&lt;p&gt;0002-pprint-now-flushes-the-underlying-stream-similarly-t.patch&lt;/p&gt;</comment>
                    <comment id="28887" author="jafingerhut" created="Thu, 21 Jun 2012 17:27:07 -0500"  >&lt;p&gt;Tempting fate once again by changing Approval from Incomplete to None after the reason it was marked as incomplete seems to have been addressed.&lt;/p&gt;</comment>
                    <comment id="29928" author="stuart.sierra" created="Fri, 9 Nov 2012 16:07:39 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                    <comment id="29942" author="stuart.sierra" created="Wed, 14 Nov 2012 09:23:02 -0600"  >&lt;p&gt;Pushed in commit 1588ff3f70e864d9817bc565bd2c30b08189bc6e&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11306" name="0002-pprint-now-flushes-the-underlying-stream-similarly-t.patch" size="5960" author="djpowell" created="Sat, 9 Jun 2012 06:16:02 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-985] make jsr166 available at build time</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-985</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;but no runtime requirement.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15413">CLJ-985</key>
            <summary>make jsr166 available at build time</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sun, 6 May 2012 19:07:04 -0500</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Fri, 18 May 2012 20:16:21 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28401" author="hiredman" created="Mon, 7 May 2012 00:46:29 -0500"  >&lt;p&gt;antsetup.sh seems to be missing?&lt;/p&gt;</comment>
                    <comment id="28402" author="stu" created="Mon, 7 May 2012 08:01:08 -0500"  >&lt;p&gt;and now, a patch with antsetup included&lt;/p&gt;</comment>
                    <comment id="28426" author="sw1nn" created="Thu, 10 May 2012 14:05:28 -0500"  >&lt;p&gt;You say you don&apos;t want a runtime requirement, but presumably you&apos;ll want to, at some point, run tests as part of the build so some element of runtime is required?&lt;/p&gt;</comment>
                    <comment id="28529" author="stu" created="Fri, 18 May 2012 20:15:21 -0500"  >&lt;p&gt;Neale: the maven &quot;provided&quot; scope allows use during build without runtime requirement.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11175" name="build-with-jsr166-antsetup.patch" size="2985" author="stu" created="Mon, 7 May 2012 08:01:08 -0500" />
                    <attachment id="11174" name="build-with-jsr166.patch" size="2590" author="stu" created="Sun, 6 May 2012 19:07:04 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-984] Expose minKey and maxKey on PersistentTreeSet</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-984</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I have found it occasionally useful to be able to get the minimum or maximum of a sorted set. PersistentTreeMap already has public minKey and maxKey methods; I suggest adding public minKey and maxKey methods to PersistentTreeSet (which obviously will just call the relevant methods on the impl map).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15410">CLJ-984</key>
            <summary>Expose minKey and maxKey on PersistentTreeSet</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="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Sat, 5 May 2012 20:55:46 -0500</created>
                <updated>Mon, 7 May 2012 12:05:07 -0500</updated>
                    <resolved>Mon, 7 May 2012 12:05:07 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28396" author="glchapman" created="Sat, 5 May 2012 21:09:47 -0500"  >&lt;p&gt;Actually, on further reflection, I was too hasty in opening this. first combined with seq or rseq is good enough. If I could close this I would, but I don&apos;t see a way to do so.&lt;/p&gt;</comment>
                    <comment id="28407" author="jafingerhut" created="Mon, 7 May 2012 12:05:07 -0500"  >&lt;p&gt;Closing this since submitter wishes it to be.&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-982] Implement an interface? predicate to balance class?</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-982</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.core implements a class? predicate to detect if a thing is an instance of java.lang.Class. The attached patch implements interface? to further distinguish classes that are also interfaces. This gives us Clojure api for e.g., enumerating all interfaces a thing&apos;s base class implements; as in, (filter #(interface? %) (supers (class my-thing))).&lt;/p&gt;</description>
                <environment>Any</environment>
            <key id="15407">CLJ-982</key>
            <summary>Implement an interface? predicate to balance class?</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="davidrupp">David Rupp</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                        <label>test</label>
                    </labels>
                <created>Fri, 4 May 2012 21:16:07 -0500</created>
                <updated>Sat, 9 Jun 2012 09:08:46 -0500</updated>
                    <resolved>Fri, 8 Jun 2012 12:29:30 -0500</resolved>
                            <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28748" author="stu" created="Fri, 8 Jun 2012 12:28:58 -0500"  >&lt;p&gt;I would prefer to see this, and other interop/reflective items, in a separate contrib lib.&lt;/p&gt;</comment>
                    <comment id="28763" author="davidrupp" created="Sat, 9 Jun 2012 09:08:46 -0500"  >&lt;p&gt;Thanks for the feedback, Stu. Is there an existing contrib lib for stuff like this? Or should I create one?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11170" name="drupp-add-interface-predicate.diff" size="1433" author="davidrupp" created="Fri, 4 May 2012 21:16:07 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-981] clojure.set/rename-keys deletes keys when there&apos;s a collision</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-981</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(set/rename-keys {:a &quot;one&quot; :b &quot;two&quot; :c &quot;three&quot;} {:a :b :b :a}) returns {:b &quot;one&quot; :c &quot;three&quot;}&lt;br/&gt;
should be {:a &quot;two&quot; :b &quot;one&quot; :c &quot;three&quot;}&lt;/p&gt;

&lt;p&gt;I have created a pull request for a fix, here: &lt;a href=&quot;https://github.com/clojure/clojure/pull/23&quot;&gt;https://github.com/clojure/clojure/pull/23&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15405">CLJ-981</key>
            <summary>clojure.set/rename-keys deletes keys when there&apos;s a collision</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ed.bowler@gmail.com">Ed Bowler</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 May 2012 12:35:32 -0500</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28386" author="ed.bowler@gmail.com" created="Fri, 4 May 2012 13:31:19 -0500"  >&lt;p&gt;added fix&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11167" name="rename-keys-fix.patch" size="1689" author="ed.bowler@gmail.com" created="Fri, 4 May 2012 13:31:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-977] (int \a) returns a value, (long \a) throws an exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-977</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As described in the summary, calling (long ...) on a character throws a ClassCastException.  I know the semantics surrounding numbers has changed a bit, but I think it would be nice for this to be consistent.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15374">CLJ-977</key>
            <summary>(int \a) returns a value, (long \a) throws an exception</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ztellman">Zach Tellman</reporter>
                        <labels>
                    </labels>
                <created>Sat, 28 Apr 2012 03:09:50 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28484" author="scottlowe" created="Sat, 12 May 2012 22:45:29 -0500"  >&lt;p&gt;Attached a patch. 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-977&quot; title=&quot;(int \a) returns a value, (long \a) throws an exception&quot;&gt;&lt;del&gt;CLJ-977&lt;/del&gt;&lt;/a&gt;-int-a-returns-a-value-long-a-throws-an-excep.patch 13/May/12&lt;/p&gt;</comment>
                    <comment id="29148" author="aaron" created="Tue, 14 Aug 2012 20:11:48 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11211" name="0001-CLJ-977-int-a-returns-a-value-long-a-throws-an-excep.patch" size="850" author="scottlowe" created="Sat, 12 May 2012 22:45:29 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

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

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

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


&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/?fromgroups#!topic/clojure/3z3JtXhcDB0&quot;&gt;https://groups.google.com/forum/?fromgroups#!topic/clojure/3z3JtXhcDB0&lt;/a&gt;&lt;/p&gt;</description>
                <environment>This should happen on any system. I have tested it on macs in version 1.4 and 1.2.1</environment>
            <key id="15343">CLJ-975</key>
            <summary>inconsistent destructuring behaviour when using nested maps </summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="neotyk">Hubert Iwaniuk</assignee>
                                <reporter username="sunilnandihalli">Sunil S Nandihalli</reporter>
                        <labels>
                    </labels>
                <created>Thu, 19 Apr 2012 01:55:58 -0500</created>
                <updated>Fri, 18 May 2012 20:36:45 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:36:45 -0500</resolved>
                            <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                <version>Release 1.5</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="28195" author="neotyk" created="Fri, 20 Apr 2012 14:18:52 -0500"  >&lt;p&gt;Test to reproduce reported issue and code fixing it.&lt;/p&gt;</comment>
                    <comment id="28197" author="neotyk" created="Fri, 20 Apr 2012 15:36:53 -0500"  >&lt;p&gt;Test to reproduce and clearly visualise this issue as well as code fixing it included.&lt;/p&gt;</comment>
                    <comment id="28521" author="stu" created="Fri, 18 May 2012 09:11:52 -0500"  >&lt;p&gt;A less eye-bleeding example&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(let [{{inner :a :as w} :c outer :a :as w}
      {:a 10 :c {:a 30}}]
  outer)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11071" name="CLJ-975-test.patch" size="2770" author="neotyk" created="Fri, 20 Apr 2012 14:18:52 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-974] TAP test runner broken in clojure.test</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-974</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;While playing with clojure.test, I discovered that the TAP test runner is broken.  Some calls were missing parameters, some had too many, and the test runner was missing a handler for failures (versus errors).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15334">CLJ-974</key>
            <summary>TAP test runner broken in clojure.test</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jszakmeister">John Szakmeister</reporter>
                        <labels>
                    </labels>
                <created>Sun, 15 Apr 2012 07:39:22 -0500</created>
                <updated>Sun, 15 Apr 2012 18:53:21 -0500</updated>
                    <resolved>Sun, 15 Apr 2012 18:53:21 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28147" author="jafingerhut" created="Sun, 15 Apr 2012 12:53:34 -0500"  >&lt;p&gt;Does this patch fix all of the issues mentioned in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-954&quot; title=&quot;TAP Support in clojure.test.tap Needs Updating&quot;&gt;&lt;del&gt;CLJ-954&lt;/del&gt;&lt;/a&gt;?  If so, let me know and we can mark one of them as a duplicate, making sure the patch is on the one that isn&apos;t dup&apos;ed.&lt;/p&gt;</comment>
                    <comment id="28149" author="jszakmeister" created="Sun, 15 Apr 2012 18:43:58 -0500"  >&lt;p&gt;Shame on me.  I didn&apos;t search the issue tracker.  Sorry about that Andy.  Yes, this does fix &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-954&quot; title=&quot;TAP Support in clojure.test.tap Needs Updating&quot;&gt;&lt;del&gt;CLJ-954&lt;/del&gt;&lt;/a&gt;.  I close this as a duplicate of the other and attach the patch there.&lt;/p&gt;

&lt;p&gt;Thanks Andy!&lt;/p&gt;</comment>
                    <comment id="28150" author="jszakmeister" created="Sun, 15 Apr 2012 18:44:43 -0500"  >&lt;p&gt;Bah, I don&apos;t have permissions to do that.  Can you mark this as a duplicate?  Thanks again!&lt;/p&gt;</comment>
                    <comment id="28152" author="jafingerhut" created="Sun, 15 Apr 2012 18:53:21 -0500"  >&lt;p&gt;Closed as duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-954&quot; title=&quot;TAP Support in clojure.test.tap Needs Updating&quot;&gt;&lt;del&gt;CLJ-954&lt;/del&gt;&lt;/a&gt;.  Patch has been attached to that ticket now.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11053" name="fix-tap-test-runner.diff" size="5988" author="jszakmeister" created="Sun, 15 Apr 2012 07:39:22 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-973] doc for *data-readers* is wrong about the format for data_readers.clj</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-973</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Sometime recently, the format for data_readers.clj changed to require a read-time literal map instead of pairs of symbols.  The doc string for &amp;#42;data-readers* should be updated to reflect the change.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15333">CLJ-973</key>
            <summary>doc for *data-readers* is wrong about the format for data_readers.clj</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Sat, 14 Apr 2012 09:35:16 -0500</created>
                <updated>Sat, 14 Apr 2012 13:52:46 -0500</updated>
                    <resolved>Sat, 14 Apr 2012 13:52:46 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28142" author="steveminer@gmail.com" created="Sat, 14 Apr 2012 09:59:43 -0500"  >&lt;p&gt;Fixed doc string for &amp;#42;data-readers*&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11048" name="0001-CLJ-973-doc-for-data-readers.patch" size="1074" author="steveminer@gmail.com" created="Sat, 14 Apr 2012 09:59:43 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-972] Document changes between Clojure 1.3 and 1.4</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-972</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The changes between Clojure 1.3 and 1.4 need to be documented before release.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15327">CLJ-972</key>
            <summary>Document changes between Clojure 1.3 and 1.4</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="crnixon">Clinton R. Nixon</reporter>
                        <labels>
                    </labels>
                <created>Wed, 11 Apr 2012 09:10:49 -0500</created>
                <updated>Sun, 15 Apr 2012 08:13:42 -0500</updated>
                    <resolved>Sun, 15 Apr 2012 08:13:42 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11035" name="changes-1.4.patch" size="29355" author="crnixon" created="Wed, 11 Apr 2012 09:10:49 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-967] java.io/do-copy can still garble multibyte characters on IBM JDK 1.5 and 1.6</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-967</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Same issue as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-886&quot; title=&quot;java.io/do-copy can garble multibyte characters&quot;&gt;&lt;del&gt;CLJ-886&lt;/del&gt;&lt;/a&gt;, but while the patch applied for that issue fixes the problem for many OS/JDK combos, there appear to be differences in how surrogate pair characters are handled in some OS/JDK combos.  In particular, at least Linux + IBM JDK 1.5 and Linux + IBM JDK 1.6 still fail the tests checked in for do-copy.&lt;/p&gt;</description>
                <environment>At least Linux + IBM JDK 1.5, and Linux + IBM JDK 1.6</environment>
            <key id="15318">CLJ-967</key>
            <summary>java.io/do-copy can still garble multibyte characters on IBM JDK 1.5 and 1.6</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sat, 7 Apr 2012 09:25:55 -0500</created>
                <updated>Fri, 1 Mar 2013 09:43:02 -0600</updated>
                    <resolved>Fri, 1 Mar 2013 09:43:02 -0600</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28085" author="jafingerhut" created="Sat, 7 Apr 2012 09:32:23 -0500"  >&lt;p&gt;clj-886-improved-fix-for-ibm-jdks-patch2.txt dated Apr 7 2012 makes the tests pass with Linux + IBM JDK 1.5, as well as these other combos tested:&lt;/p&gt;

&lt;p&gt;Linux + Oracle JDK 1.7&lt;br/&gt;
Linux + IBM JDK 1.5&lt;br/&gt;
Mac OS X 10.6.8 + Oracle/Apple JDK 1.6&lt;/p&gt;

&lt;p&gt;There are still failing tests for Linux + IBM JDK 1.6.  This patch currently skips the failing tests whenever the java.vendor is &quot;IBM Corporation&quot; and java.version is &quot;1.6.0&quot;, so that &quot;ant&quot; succeeds.  It is easy enough to modify the patch so that the failing tests are kept as a bright shining reminder.  Let me know if that would be preferred &amp;#8211; it just involves removing the function ibm-jdk16, and simplifying where it is called after replacing it with false.&lt;/p&gt;</comment>
                    <comment id="28522" author="stu" created="Fri, 18 May 2012 09:30:52 -0500"  >&lt;p&gt;Not sure if we should be in the business of building JDK-specific workarounds into our IO library, but marking this as screened.&lt;/p&gt;

&lt;p&gt;Option B is to leave the code as-is and only disable the tests. Rich?&lt;/p&gt;</comment>
                    <comment id="28524" author="richhickey" created="Fri, 18 May 2012 14:42:13 -0500"  >&lt;p&gt;Please disable the tests. We shouldn&apos;t be doing such workarounds.&lt;/p&gt;</comment>
                    <comment id="28536" author="jafingerhut" created="Sat, 19 May 2012 02:50:22 -0500"  >&lt;p&gt;clj-967-disable-failing-io-copy-tests-on-ibm-jdk-16-patch1.txt dated May 19, 2012 disables tests of clojure.java.io/copy that fail with IBM JDK 1.6.0.  It makes minor changes to the clojure.java.io code file, but these are only to eliminate uses of reflection, and to make a few of the versions of do-copy share more of their implementation code.&lt;/p&gt;

&lt;p&gt;Tested that all results are good on Mac OS X 10.6.8 + Oracle/Apple JDK 1.6.0 and Ubuntu 11.10 + Oracle JDK 1.7.0, including that the number of tests run are identical to before this patch.  Only 2 tests are disabled on IBM JDK 1.6.0, and all of the rest pass before and after these changes.&lt;/p&gt;</comment>
                    <comment id="28537" author="jafingerhut" created="Sat, 19 May 2012 03:22:04 -0500"  >&lt;p&gt;Hoping that I&apos;m not out of line changing approval from Incomplete to None after attaching a patch that should address the reason it was marked incomplete.  The only other way to get a ticket out of Incomplete state is for a core team member to do it for me, which seems like busy-work.&lt;/p&gt;</comment>
                    <comment id="29302" author="jafingerhut" created="Thu, 30 Aug 2012 14:13:56 -0500"  >&lt;p&gt;Any comments from Rich or other screeners on the status of this one?  Just curious, since it seemed to have been screened, and then quietly tossed back into the unscreened pile.  Is it considered undesirable to disable selected tests for a particular JDK as the patch clj-967-disable-failing-io-copy-tests-on-ibm-jdk-16-patch1.txt does?  My motivation was to selectively disable only the tests that fail, and only on the JDK where they fail, leaving all passing tests to continue to run wherever possible.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11030" name="clj-886-improved-fix-for-ibm-jdks-patch2.txt" size="7827" author="jafingerhut" created="Sat, 7 Apr 2012 09:32:23 -0500" />
                    <attachment id="11233" name="clj-967-disable-failing-io-copy-tests-on-ibm-jdk-16-patch1.txt" size="5564" author="jafingerhut" created="Sat, 19 May 2012 02:50:22 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

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

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

&lt;p&gt;(defprotocol Sequential&lt;br/&gt;
&quot;marker protocol indicating a sequential type&quot;)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15316">CLJ-966</key>
            <summary>Add support for marker protocols</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bronsa">Nicola Mometto</reporter>
                        <labels>
                    </labels>
                <created>Thu, 5 Apr 2012 07:16:52 -0500</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28086" author="jonase" created="Sat, 7 Apr 2012 13:20:28 -0500"  >&lt;p&gt;Marker protocols are supported and used in ClojureScript.&lt;/p&gt;</comment>
                    <comment id="29183" author="hiredman" created="Wed, 15 Aug 2012 14:23:44 -0500"  >&lt;p&gt;what are the uses for marker protocols? I know there are marker interfaces in java, but is it a pattern we want to carry forward?&lt;/p&gt;</comment>
                    <comment id="29186" author="fogus" created="Wed, 15 Aug 2012 14:40:36 -0500"  >&lt;p&gt;Nice and simple.  Tested with:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defprotocol P (hi [_]))
(defprotocol M)
(deftype T [a] M P (hi [_] &quot;hi there&quot;))
(satisfies? P (T. 1))
(satisfies? M (T. 1))
(hi (T. 1))
(defprotocol M2 &quot;marker for 2&quot;)
(extend-type T M2)
(satisfies? M2 (T. 1))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Similar tests are included in the additional patch file as test cases. This additional patch file should be applied after the feature&apos;s main patch file.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11436" name="CLJ-966-additional-marker-tests-APPLY-AFTER.diff" size="2487" author="fogus" created="Wed, 15 Aug 2012 14:40:36 -0500" />
                    <attachment id="11029" name="marker-protocols.diff" size="4971" author="bronsa" created="Thu, 5 Apr 2012 07:16:52 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-965] clojure.org/patches should have link to JIRA workflow wiki page added, and most content removed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-965</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_frm/thread/12e90e460aec29cb&quot;&gt;http://groups.google.com/group/clojure-dev/browse_frm/thread/12e90e460aec29cb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Relevant text supporting this suggestion copied below:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;

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

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

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

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

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

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

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

&lt;p&gt;If the powers that be deem my changes to be unsuitable, the powers that be can revert to the prior version here:&lt;br/&gt;
&lt;a href=&quot;http://clojure.org/page/diff/patches/270799794&quot;&gt;http://clojure.org/page/diff/patches/270799794&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28436" author="alexmiller" created="Thu, 10 May 2012 20:40:32 -0500"  >&lt;p&gt;I also changed the link on &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt; per the other comment.&lt;/p&gt;</comment>
                    <comment id="28437" author="jafingerhut" created="Thu, 10 May 2012 20:49:44 -0500"  >&lt;p&gt;Between the two of us, Alex, we have just enough permissions to make the change to clojure.org and close the ticket &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;   Thanks!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-964] test-clojure/rt.clj has undeclared dependency on clojure.set</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-964</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In test-clojure/rt.clj, the test last-var-wins-for-core evaluates #&apos;clojure.set/subset?.  This fails unless clojure.set has been loaded.  In the normal run of the test suite, this dependency is satisfied by test-clojure/core-set being loaded first.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15311">CLJ-964</key>
            <summary>test-clojure/rt.clj has undeclared dependency on clojure.set</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dmiller">David Miller</reporter>
                        <labels>
                        <label>test</label>
                    </labels>
                <created>Sat, 31 Mar 2012 13:40:16 -0500</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:53 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28066" author="jafingerhut" created="Sat, 31 Mar 2012 20:47:35 -0500"  >&lt;p&gt;clj-964-add-require-of-clojure-set-patch1.txt dated March 31, 2012 applies cleanly as of latest master.  It simply adds a require of clojure.set to test_clojure/rt.clj.  I verified that if that test was the only one, it does fail without the require, and passes with it.  I also verified that every other test file succeeds on its own without any further changes.&lt;/p&gt;</comment>
                    <comment id="29150" author="aaron" created="Tue, 14 Aug 2012 20:30:55 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11028" name="clj-964-add-require-of-clojure-set-patch1.txt" size="679" author="jafingerhut" created="Sat, 31 Mar 2012 20:47:35 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-963] Support pretty printing namespace declarations under code-dispatch</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-963</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently when you print code with an (ns ) declaration in it, the ns declaration comes out kind of messy. This patch makes that beautiful. &lt;/p&gt;</description>
                <environment>all</environment>
            <key id="15307">CLJ-963</key>
            <summary>Support pretty printing namespace declarations under code-dispatch</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="tomfaulhaber">Tom Faulhaber</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Thu, 29 Mar 2012 20:38:10 -0500</created>
                <updated>Sat, 1 Sep 2012 08:37:48 -0500</updated>
                    <resolved>Sat, 1 Sep 2012 08:37:48 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29260" author="stuart.sierra" created="Fri, 24 Aug 2012 08:30:19 -0500"  >&lt;p&gt;Screened.&lt;/p&gt;

&lt;p&gt;It&apos;s not perfect, but an improvement.&lt;/p&gt;

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

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (with-pprint-dispatch code-dispatch (pprint &apos;(ns com.some-example.my-app (:require clojure.string [clojure.set :as set] [clojure.java.io :refer (file reader)]))))
(ns
  com.some-example.my-app
  (:require
    clojure.string
    [clojure.set :as set]
    [clojure.java.io :refer (file reader)]))
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (with-pprint-dispatch code-dispatch (pprint &apos;(ns com.some-example.my-app (:require clojure.string [clojure.set :as set] [clojure.java.io :refer (file reader)]))))
(ns com.some-example.my-app
  (:require clojure.string [clojure.set :as set]
            [clojure.java.io :refer (file reader)]))
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11026" name="pprint-ns-patch.diff" size="9569" author="tomfaulhaber" created="Thu, 29 Mar 2012 20:38:11 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-962] Vectors returned by subvec allow access at negative indices</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-962</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Google group thread: &lt;a href=&quot;https://mail.google.com/mail/?shva=1#label/clojure/1365e058eaf0d5fa&quot;&gt;https://mail.google.com/mail/?shva=1#label/clojure/1365e058eaf0d5fa&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Clojure 1.3.0&lt;br/&gt;
user=&amp;gt; (def v1 (vec (range 100)))&lt;br/&gt;
#&apos;user/v1&lt;br/&gt;
user=&amp;gt; (def v2 (subvec v1 50 52))&lt;br/&gt;
#&apos;user/v2&lt;br/&gt;
user=&amp;gt; (v2 3)&lt;br/&gt;
IndexOutOfBoundsException   clojure.lang.APersistentVector$SubVector.nth (APersistentVector.java:526)&lt;br/&gt;
user=&amp;gt; (v2 -48)&lt;br/&gt;
2&lt;/p&gt;</description>
                <environment></environment>
            <key id="15304">CLJ-962</key>
            <summary>Vectors returned by subvec allow access at negative indices</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Mar 2012 09:55:00 -0500</created>
                <updated>Fri, 18 May 2012 10:03:07 -0500</updated>
                    <resolved>Fri, 18 May 2012 10:03:07 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28044" author="jafingerhut" created="Thu, 29 Mar 2012 10:12:53 -0500"  >&lt;p&gt;One-line simple fix.  clj-962-subvec-nth-throws-on-negative-index-patch1.txt dated March 29, 2012 applies, builds, and tests cleanly on latest master.  Includes a few new tests that exhibit the problem.  One author has signed CA.&lt;/p&gt;</comment>
                    <comment id="28192" author="alan@thinkrelevance.com" created="Fri, 20 Apr 2012 13:52:50 -0500"  >&lt;p&gt;I checked this out and it looks good to me, thank you.&lt;/p&gt;</comment>
                    <comment id="28432" author="jafingerhut" created="Thu, 10 May 2012 18:29:43 -0500"  >&lt;p&gt;clj-962-subvec-nth-throws-on-negative-index-patch2.txt dated May 10, 2012 is identical to previous patch clj-962-subvec-nth-throws-on-negative-index-patch1.txt dated Mar 29, 2012, except previous one failed to apply cleanly to latest master because of some lines of context changing in the source code.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11189" name="clj-962-subvec-nth-throws-on-negative-index-patch2.txt" size="1561" author="jafingerhut" created="Thu, 10 May 2012 18:29:43 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-961] with-redefs loses a Var&apos;s root binding if the Var is thread-bound</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-961</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When a Var has an in-thread binding and I use with-redefs to temporarily alter its root binding, the value restored to the root binding after with-redefs is finished will not be the original root value, but the thread-local one. The problem is using deref instead of something like clojure.lang.Var&apos;s .getRawRoot to backup the original root values in with-derefs-fn.&lt;/p&gt;

&lt;p&gt;I have never used with-redefs and it is very unlikely that one would use it while the Vars in question are thread-bound. However, when reading the function&apos;s definition in Joy of Clojure and later in core.clj, I did not believe this behaviour was intended.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15303">CLJ-961</key>
            <summary>with-redefs loses a Var&apos;s root binding if the Var is thread-bound</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="jirkamarsik">Ji&#345;&#237; Mar&#353;&#237;k</reporter>
                        <labels>
                    </labels>
                <created>Wed, 28 Mar 2012 11:05:29 -0500</created>
                <updated>Fri, 20 Jul 2012 16:44:41 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:44:41 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28970" author="aaron" created="Tue, 10 Jul 2012 18:53:57 -0500"  >&lt;p&gt;I paired with Gary on this and tested the patch on my machine after it was uploaded.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11375" name="0001-with-redefs-saves-root-binding-instead-of-thread-loc.patch" size="1507" author="gfredericks" created="Tue, 10 Jul 2012 18:47:20 -0500" />
                    <attachment id="11020" name="with_redefs_bug.clj" size="100" author="jirkamarsik" created="Wed, 28 Mar 2012 11:05:29 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-960] Capture :column metadata (needed for ClojureScript source maps)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-960</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve begun working on implementing SourceMaps for ClojureScript. For an overview of SourceMaps, see: &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/&quot;&gt;http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/&lt;/a&gt; For discussion of the feature in ClojureScript, see: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/zgmXO2iM1JQ/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/zgmXO2iM1JQ/discussion&lt;/a&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;Marking screened anyway.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11579" name="CLJ-960-tests.diff" size="2466" author="cemerick" created="Fri, 19 Oct 2012 11:45:30 -0500" />
                    <attachment id="11050" name="columns-1.patch" size="41013" author="bbloom" created="Sat, 14 Apr 2012 18:43:42 -0500" />
                    <attachment id="11401" name="columns-1-v2.patch" size="40939" author="jszakmeister" created="Fri, 27 Jul 2012 05:32:07 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-956] [java.lang.ClassFormatError: Duplicate method name&amp;signature] when using gen-class</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-956</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;When extending a class that defines a method with the signature &quot;public void load();&quot;, I get the following load time error:&lt;/p&gt;

&lt;p&gt;java.lang.ClassFormatError: Duplicate method name&amp;amp;signature&lt;/p&gt;

&lt;p&gt;Looking into javap, I see that in fact gen-class is generating two entries for the load method. Prefix does not help in this case, as the defined load method is generated anyway.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Daniel&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment>$ java -version&lt;br/&gt;
java version &amp;quot;1.6.0_29&amp;quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11M3527)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)&lt;br/&gt;
&lt;br/&gt;
</environment>
            <key id="15286">CLJ-956</key>
            <summary>[java.lang.ClassFormatError: Duplicate method name&amp;signature] when using gen-class</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="danielribeiro">Daniel Ribeiro</reporter>
                        <labels>
                        <label>AOT</label>
                    </labels>
                <created>Tue, 20 Mar 2012 04:06:40 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:05 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:40:05 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27976" author="danielribeiro" created="Thu, 22 Mar 2012 05:10:59 -0500"  >&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;I&apos;ve create this small sample project to exemplify the bug ocurring: &lt;a href=&quot;https://github.com/danielribeiro/ClojureBugReport&quot;&gt;https://github.com/danielribeiro/ClojureBugReport&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Daniel&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="28005" author="danielribeiro" created="Sat, 24 Mar 2012 18:57:59 -0500"  >&lt;p&gt;Note that the name load is not special: it works with any abstract method, no matter the name.&lt;/p&gt;</comment>
                    <comment id="28006" author="danielribeiro" created="Sat, 24 Mar 2012 19:34:50 -0500"  >&lt;p&gt;Not a bug: I was declaring the method load, which was already defined on the abstract class. The docs do mention this:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://clojuredocs.org/clojure_core/clojure.core/gen-class&quot;&gt;http://clojuredocs.org/clojure_core/clojure.core/gen-class&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29918" author="stuart.sierra" created="Fri, 9 Nov 2012 08:40:05 -0600"  >&lt;p&gt;Closed as not-a-bug.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-954] TAP Support in clojure.test.tap Needs Updating</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-954</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;testing-vars-str&lt;/tt&gt; function requires one argument, but in the &lt;tt&gt;clojure.test.tap&lt;/tt&gt; namespace it is currently called with zero arguments. This results in a &lt;tt&gt;clojure.lang.ArityException&lt;/tt&gt; when attempting to generate TAP output with &lt;tt&gt;with-tap-out&lt;/tt&gt;.&lt;/p&gt;

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

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

&lt;p&gt;After fixing this particular issue in my local copy of 1.4.0-SNAPSHOT, there appear to be other problems with this code as well (e.g., not producing correct output for failing tests). Since this code appears to be unmaintained and untested, perhaps it should live outside the main Clojure repo?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15283">CLJ-954</key>
            <summary>TAP Support in clojure.test.tap Needs Updating</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="semperos">Daniel Gregoire</reporter>
                        <labels>
                    </labels>
                <created>Thu, 15 Mar 2012 22:39:54 -0500</created>
                <updated>Fri, 18 May 2012 20:36:58 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:36:58 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28151" author="jszakmeister" created="Sun, 15 Apr 2012 18:45:19 -0500"  >&lt;p&gt;This fixes all the known issues with the tap test runner.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11054" name="fix-tap-test-runner.diff" size="5988" author="jszakmeister" created="Sun, 15 Apr 2012 18:45:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-953] drop-while doc string wrong, nil instead of logical false</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-953</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&quot;Returns a lazy sequence of the items in coll starting from the first
-  item &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; which (pred item) returns nil.&quot;
+  item &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; which (pred item) returns logical &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;.&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15279">CLJ-953</key>
            <summary>drop-while doc string wrong, nil instead of logical false</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="spoon16">Eric Schoonover</reporter>
                        <labels>
                        <label>documentation</label>
                        <label>patch,</label>
                    </labels>
                <created>Thu, 15 Mar 2012 16:50:50 -0500</created>
                <updated>Fri, 30 Mar 2012 09:16:31 -0500</updated>
                    <resolved>Fri, 30 Mar 2012 09:16:31 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10992" name="take-while_doc_string_CLJ-953.diff" size="732" author="spoon16" created="Thu, 15 Mar 2012 16:55:04 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-952] bigdec does not properly convert a clojure.lang.BigInt</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-952</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;bigdec handles java.math.BigInteger when converting to java.math.BigDecimal, but it does not handle clojure.lang.BigInt.  Instead it treats a clojure.lang.BigInt as a Number, by casting it to long.  This causes the following error:&lt;/p&gt;

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

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

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

&lt;p&gt;+1&lt;/p&gt;</comment>
                    <comment id="28190" author="alan@thinkrelevance.com" created="Fri, 20 Apr 2012 13:35:40 -0500"  >&lt;p&gt;Looks good to me, thanks.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10999" name="clj-952-make-bigdec-work-on-bigints-patch1.txt" size="2145" author="jafingerhut" created="Wed, 21 Mar 2012 10:55:30 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-951] Clojure 1.3+ can&apos;t intern a dynamic var</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-951</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In Clojure 1.3+, interned vars don&apos;t set the dynamic field in clojure.lang.Var and can&apos;t be used in a binding:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (intern &lt;b&gt;ns&lt;/b&gt; (with-meta &apos;dyna-var {:dynamic true}) 100)&lt;br/&gt;
user=&amp;gt; (binding &lt;span class=&quot;error&quot;&gt;&amp;#91;dyna-var &amp;quot;one hundred&amp;quot;&amp;#93;&lt;/span&gt; dyna-var) &lt;br/&gt;
;=&amp;gt; IllegalStateException Can&apos;t dynamically bind non-dynamic var: user/dyna-var  clojure.lang.Var.pushThreadBindings (Var.java:339)&lt;/p&gt;

&lt;p&gt;The var has the right metadata&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (meta #&apos;dyna-var)                                      &lt;br/&gt;
;=&amp;gt; {:ns #&amp;lt;Namespace user&amp;gt;, :name dyna-var, :dynamic true}&lt;/p&gt;

&lt;p&gt;But doesn&apos;t set the dynamic flag on the var:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (.isDynamic #&apos;dyna-var)                                &lt;br/&gt;
;=&amp;gt; false&lt;/p&gt;

&lt;p&gt;The push-thread-bindings function looks for the .dynamic flag.  Vars created via def have it:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (def ^:dynamic def-dyna-var 100)&lt;br/&gt;
user=&amp;gt; (.isDynamic #&apos;def-dyna-var)&lt;br/&gt;
;=&amp;gt; true&lt;/p&gt;

&lt;p&gt;Along with the metadata&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (meta #&apos;def-dyna-var)&lt;br/&gt;
{:ns #&amp;lt;Namespace user&amp;gt;, :name def-dyna-var, :dynamic true, :line 6, :file &quot;NO_SOURCE_PATH&quot;}&lt;/p&gt;


</description>
                <environment></environment>
            <key id="15271">CLJ-951</key>
            <summary>Clojure 1.3+ can&apos;t intern a dynamic var</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="ryansenior">Ryan Senior</reporter>
                        <labels>
                    </labels>
                <created>Fri, 9 Mar 2012 16:19:53 -0600</created>
                <updated>Fri, 30 Nov 2012 15:58:02 -0600</updated>
                    <resolved>Fri, 30 Nov 2012 15:58:02 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30125" author="halgari" created="Fri, 30 Nov 2012 15:57:46 -0600"  >&lt;p&gt;This is actually an enhancement. The Var.java and Namespace.java code does not attempt to read the metadata on the var. Instead, the compiler handles this at compile time. If you would like to see this behavior changed, feel free to bring it up on clojure-dev, and we&apos;ll discuss it. &lt;/p&gt;

&lt;p&gt;Closing until that time. &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-950] Function literals behavior differ from that of fns</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-950</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;	((fn [] true)) ; true&lt;br/&gt;
	(#(true)) ; classcast exception&lt;/p&gt;

&lt;p&gt;	((fn [])) ; nil&lt;br/&gt;
	(#()) ; ()&lt;/p&gt;

&lt;p&gt;	(some (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt;_) &lt;span class=&quot;error&quot;&gt;&amp;#91;nil false 0 1&amp;#93;&lt;/span&gt;) ; 0&lt;br/&gt;
	(some #(%) &lt;span class=&quot;error&quot;&gt;&amp;#91;nil false 0 1&amp;#93;&lt;/span&gt;) ; NPE&lt;/p&gt;</description>
                <environment></environment>
            <key id="15270">CLJ-950</key>
            <summary>Function literals behavior differ from that of fns</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="vemv">V&#237;ctor M. Valenzuela</reporter>
                        <labels>
                        <label>reader</label>
                    </labels>
                <created>Thu, 8 Mar 2012 06:13:29 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Thu, 8 Mar 2012 12:28:16 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27914" author="tsdh" created="Thu, 8 Mar 2012 12:27:36 -0600"  >&lt;p&gt;This is no defect.  Function literals must have a function (or macro or special form) as first symbol.&lt;br/&gt;
So your examples should be written like so:&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; (#(do true))
true
user&amp;gt; (#(do))
nil
user&amp;gt; (some #(do %) [nil false 0 1])
0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27915" author="vemv" created="Thu, 8 Mar 2012 14:10:31 -0600"  >&lt;p&gt;It makes sense. However (and correct me if I&apos;m wrong) there should be little problem in making them fully equivalent to fns, resulting in a more concise and consistent API.&lt;/p&gt;

&lt;p&gt;Please consider re-opening the issue as a feature request.&lt;/p&gt;

&lt;p&gt;Regards - V&#237;ctor.&lt;/p&gt;</comment>
                    <comment id="27917" author="tsdh" created="Fri, 9 Mar 2012 01:26:53 -0600"  >&lt;p&gt;The reader docs at &lt;a href=&quot;http://www.clojure.org/reader&quot;&gt;http://www.clojure.org/reader&lt;/a&gt; say that #() is not a replacement for (fn [] ...).  You can&apos;t make it more equivalent to fn without making it much harder to understand.  Let me explain that with an example.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defn get-time []
  (System/currentTimeMillis))

(#(get-time)) ;; What&apos;s the result?
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What&apos;s the result of the funcall above?  Clearly, right now, it is the current system time.&lt;/p&gt;

&lt;p&gt;So if we decided to allow to write #(true) as an alternative to (constantly true) &lt;span class=&quot;error&quot;&gt;&amp;#91;which is a varargs fn&amp;#93;&lt;/span&gt; or #(do true) &lt;span class=&quot;error&quot;&gt;&amp;#91;which is a fn of zero args&amp;#93;&lt;/span&gt;, then valid values of #(get-time) where both the current system time but also the function object for get-time.  Functions are values, too.&lt;/p&gt;

&lt;p&gt;Ok, one could say that in the case of a function, #(function) is always a call, but it would make it harder to reason about what the code does for not much benefit.&lt;/p&gt;</comment>
                    <comment id="27918" author="vemv" created="Fri, 9 Mar 2012 07:56:44 -0600"  >&lt;p&gt;You&apos;re right - satisfying my request would require to change the average use of this feature to &lt;tt&gt;#((some_fn %1 %2))&lt;/tt&gt; rather than just &lt;tt&gt;#(some_fn %1 %2)&lt;/tt&gt;, if we wanted &lt;tt&gt;#(true)&lt;/tt&gt; to be valid. Which indeed would be barely handy.&lt;/p&gt;

&lt;p&gt;Thank you.&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-948] It would be very useful to be able to annotate the constructors of classes created with gen-class</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-948</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;gen-class currently provides a way to annotate methods, but not constructors.&lt;/p&gt;

&lt;p&gt;when interoperating with java code that uses google juice heavily the ability to annotate constructors is required.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15266">CLJ-948</key>
            <summary>It would be very useful to be able to annotate the constructors of classes created with gen-class</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="chouser@n01se.net">Chouser</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                    </labels>
                <created>Tue, 6 Mar 2012 07:59:13 -0600</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27921" author="jafingerhut" created="Fri, 9 Mar 2012 09:15:37 -0600"  >&lt;p&gt;clj-948-annotate-gen-class-constructors-patch2.txt same as Kevin&apos;s &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-948&quot; title=&quot;It would be very useful to be able to annotate the constructors of classes created with gen-class&quot;&gt;&lt;del&gt;CLJ-948&lt;/del&gt;&lt;/a&gt;.patch, but with slight update so it applies cleanly to latest master as of March 9, 2012.  ant builds and tests with no errors or warnings.  One author Kevin Downey has signed CA.&lt;/p&gt;</comment>
                    <comment id="27924" author="hiredman" created="Fri, 9 Mar 2012 09:27:22 -0600"  >&lt;p&gt;&lt;a href=&quot;http://www.s2ki.com/s2000/uploads/gallery/1288955707/gallery_99130_32179_14062581294cd627112ab1f.gif&quot;&gt;http://www.s2ki.com/s2000/uploads/gallery/1288955707/gallery_99130_32179_14062581294cd627112ab1f.gif&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28017" author="jafingerhut" created="Mon, 26 Mar 2012 17:52:03 -0500"  >&lt;p&gt;clj-948-annotate-gen-class-constructors-patch3.txt on Mar 26, 2012 is no different from previous patches, except that it applies cleanly to latest master as of that date.  One author Kevin Downey has signed a CA.  Kevin, you don&apos;t need to thank me again.  The last time gave me eye damage (only joking).&lt;/p&gt;</comment>
                    <comment id="29472" author="chouser@n01se.net" created="Tue, 18 Sep 2012 00:40:35 -0500"  >&lt;p&gt;Patch is small and is a nice improvement.  Tests look good and pass.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11013" name="clj-948-annotate-gen-class-constructors-patch3.txt" size="3673" author="jafingerhut" created="Mon, 26 Mar 2012 17:52:03 -0500" />
                    <attachment id="10980" name="CLJ-948.patch" size="3656" author="hiredman" created="Tue, 6 Mar 2012 08:03:35 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-947] It would be very useful to be able to annotate the constructors of classes created with gen-class</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-947</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;gen-class currently provides a way to annotate methods, but not constructors.&lt;/p&gt;

&lt;p&gt;when interoperating with java code that uses google juice heavily the ability to annotate constructors is required.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15265">CLJ-947</key>
            <summary>It would be very useful to be able to annotate the constructors of classes created with gen-class</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="hiredman">Kevin Downey</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                    </labels>
                <created>Tue, 6 Mar 2012 07:59:08 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Tue, 6 Mar 2012 10:41:04 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27903" author="hiredman" created="Tue, 6 Mar 2012 10:41:04 -0600"  >&lt;p&gt;dup of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-948&quot; title=&quot;It would be very useful to be able to annotate the constructors of classes created with gen-class&quot;&gt;&lt;del&gt;CLJ-948&lt;/del&gt;&lt;/a&gt;&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-945] clojure.string/capitalize can give wrong result if first char is supplementary</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-945</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When the first unicode code point of a string is supplementary (i.e. requires two 16-bit Java chars to represent in UTF-16), and that first code point is changed by converting it to upper case, clojure.string/capitalize gives the wrong answer.&lt;/p&gt;</description>
                <environment>all</environment>
            <key id="15262">CLJ-945</key>
            <summary>clojure.string/capitalize can give wrong result if first char is supplementary</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Mon, 5 Mar 2012 11:33:02 -0600</created>
                <updated>Fri, 1 Mar 2013 09:43:19 -0600</updated>
                    <resolved>Fri, 1 Mar 2013 09:43:19 -0600</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29004" author="richhickey" created="Fri, 20 Jul 2012 07:43:37 -0500"  >&lt;p&gt;Isn&apos;t this a Java bug?&lt;/p&gt;</comment>
                    <comment id="29006" author="jafingerhut" created="Fri, 20 Jul 2012 12:36:53 -0500"  >&lt;p&gt;If using UTF-16 to encode Unicode strings, and making every UTF-16 code unit (i.e. Java char) individually indexable as a separate entity in strings, is such a bad design choice that you consider it a bug, then yes, this is a Java bug (and a bug in all the other systems that use UTF-16 in this way).&lt;/p&gt;

&lt;p&gt;clojure.string/capitalize isn&apos;t using some Java capitalization method that has a bug, though.  By calling (.toUpperCase (subs s 0 1)) it is not giving enough information to .toUpperCase for &lt;em&gt;any&lt;/em&gt; implementation, Java or otherwise, to do the job correctly.  It is analogous to calling toupper on the least significant 4 bits of the ASCII encoding of a letter and expecting it to return the correct answer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10978" name="capitalize-for-supplementary-chars-patch.txt" size="1586" author="jafingerhut" created="Mon, 5 Mar 2012 11:33:02 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

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

<item>
            <title>[CLJ-943] When load-lib fails, a namespace is still created</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-943</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When requiring a namespace that doesn&apos;t compile, a namespace is still created. The attached patch removes the namespace on failure if the namespace wasn&apos;t already present on entry to load-lib. See the test case in the patch for repro instructions.&lt;/p&gt;

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

&lt;p&gt;Marked screened anyway...&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10977" name="0001-Remove-namespace-if-load-lib-fails-and-namespace-did.patch" size="2899" author="hugoduncan" created="Thu, 1 Mar 2012 19:30:47 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-942] Calls to instance methods through the Reflector double unwrap exceptions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-942</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When calling an instance method with one or more arguments, if an exception is thrown that has a cause, then that exception is wrapped in an InvocationTargetException.  The Reflector tries to unwrap that, but it also unwraps the exception that is thrown by the method being called reflectively.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15254">CLJ-942</key>
            <summary>Calls to instance methods through the Reflector double unwrap exceptions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Thu, 1 Mar 2012 17:31:05 -0600</created>
                <updated>Fri, 9 Mar 2012 13:46:03 -0600</updated>
                    <resolved>Fri, 9 Mar 2012 13:46:03 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27904" author="stu" created="Tue, 6 Mar 2012 20:58:38 -0600"  >&lt;p&gt;The main purpose of patch looks sound. The test cleanup stuff also looks sound, and is low risk as it only changes the build phase and subtracts a file that we should not be packaging from the release jar.&lt;/p&gt;

&lt;p&gt;Thanks Paul.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10976" name="reflection-fix.diff" size="7208" author="pjstadig" created="Thu, 1 Mar 2012 17:31:05 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-940] Passing a non-sequence to refer :only results in uninformative exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-940</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Compiling the following code results in a &lt;tt&gt;Don&apos;t know how to create ISeq from: clojure.lang.Symbol&lt;/tt&gt; exception&lt;/p&gt;

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

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

&lt;p&gt;I offer a new patch, 0003-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-940&quot; title=&quot;Passing a non-sequence to refer :only results in uninformative exception&quot;&gt;&lt;del&gt;CLJ-940&lt;/del&gt;&lt;/a&gt;-check-for-sequential.patch, as an alternative.&lt;/p&gt;

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

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

&lt;p&gt;Neither patch provides file/line information in the error, but there isn&apos;t much affordance for that in core.clj right now.&lt;/p&gt;</comment>
                    <comment id="29239" author="aaron" created="Tue, 21 Aug 2012 10:57:07 -0500"  >&lt;p&gt;Applies cleanly against d4170e65d001c8c2976f1bd7159484056b9a9d6d. This looks good to me. We should at some point talk more about the implications of checking IPersistenList, but I think there is enough value here to push it forward.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10959" name="0001-add-exception-for-non-sequence-in-refer-only.diff" size="939" author="hugoduncan" created="Fri, 24 Feb 2012 12:20:40 -0600" />
                    <attachment id="11440" name="0003-CLJ-940-check-for-sequential.patch" size="1064" author="stuart.sierra" created="Fri, 17 Aug 2012 09:14:49 -0500" />
                    <attachment id="11114" name="clj-940-add-exception-for-non-sequence-in-refer-only-patch.txt" size="937" author="jafingerhut" created="Thu, 26 Apr 2012 19:36:12 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-936] Improve docs about argument destructuring at clojure.org</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-936</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;What:&lt;br/&gt;
Make the description of argument destructuring more visible at &lt;a href=&quot;http://clojure.org/special_forms&quot;&gt;http://clojure.org/special_forms&lt;/a&gt;, namely:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;add a heading such as &quot;&amp;lt;h4&amp;gt;Binding Forms (Argument Destructuring)&amp;lt;/h4&amp;gt;&quot; to the section describing it&lt;/li&gt;
	&lt;li&gt;make all occurences of &quot;binding-form&quot; a link to that heading, especially under the let and fn headings&lt;/li&gt;
	&lt;li&gt;for (fn ..) add a new second paragraph like &quot;Regarding binding forms, also known as argument destructuring, &amp;lt;a href=#thea-new-heading&amp;gt;read more in the binding forms section&amp;lt;/a&amp;gt; under the let special form.&quot;&lt;/li&gt;
&lt;/ul&gt;


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

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

&lt;p&gt;PS: I haven&apos;t found a better way to report this, such as a commenting capability on the page itself.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15238">CLJ-936</key>
            <summary>Improve docs about argument destructuring at clojure.org</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jakubholynet">Jakub Holy</reporter>
                        <labels>
                        <label>documentation</label>
                        <label>web</label>
                    </labels>
                <created>Tue, 21 Feb 2012 15:13:26 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:21 -0600</updated>
                    <resolved>Tue, 27 Nov 2012 17:28:12 -0600</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27936" author="jafingerhut" created="Mon, 12 Mar 2012 18:03:25 -0500"  >&lt;p&gt;Jakub, I don&apos;t think I have authorization to edit those web pages in the way you suggest.  I did want to comment that the most recent version of the Clojure cheatsheet at &lt;a href=&quot;http://clojure.org/cheatsheet&quot;&gt;http://clojure.org/cheatsheet&lt;/a&gt; now has a link called &quot;examples&quot; in the &quot;Special Forms&quot; section that links to the &apos;let&apos; section of the special forms documentation page.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10005">Accepted</customfieldvalue>

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

<item>
            <title>[CLJ-934] disj! throws exception when attempting to remove multiple items in one call</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-934</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;disj! fails whenever called with multiple items to remove:&lt;/p&gt;

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

&lt;p&gt;It is a simple one line fix to disj! Clojure source code to correct this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15236">CLJ-934</key>
            <summary>disj! throws exception when attempting to remove multiple items in one call</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Feb 2012 02:10:48 -0600</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27919" author="jafingerhut" created="Fri, 9 Mar 2012 09:02:01 -0600"  >&lt;p&gt;clj-934-transient-disj-patch2.txt fixes a problem with my previous one where it had a warning during testing because of a poorly named test that conflicted with a name in clojure.core.  This one is clean.&lt;/p&gt;</comment>
                    <comment id="28744" author="stu" created="Fri, 8 Jun 2012 10:37:20 -0500"  >&lt;p&gt;Patch 3 is same as patch 2, but nonreflective invocation.&lt;/p&gt;</comment>
                    <comment id="28745" author="jafingerhut" created="Fri, 8 Jun 2012 10:42:34 -0500"  >&lt;p&gt;Removed older patch in favor of Stuart&apos;s improved one clj-934-transient-disj-patch-3.txt dated June 8, 2012.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11300" name="clj-934-transient-disj-patch-3.txt" size="2313" author="stu" created="Fri, 8 Jun 2012 10:37:20 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-933] Compiler warning on clojure.test-clojure.require-scratch</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-933</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;During Clojure build:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[java] Testing clojure.test-clojure.java-interop
    [java] WARNING: with-bindings already refers to: #&apos;clojure.core/with-bindings in namespace: clojure.test-clojure.require-scratch, being replaced by: #&apos;clojure.main/with-bindings&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15234">CLJ-933</key>
            <summary>Compiler warning on clojure.test-clojure.require-scratch</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Mon, 20 Feb 2012 09:07:47 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:05 -0600</updated>
                    <resolved>Mon, 20 Feb 2012 17:18:44 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27775" author="stuart.sierra" created="Mon, 20 Feb 2012 09:33:24 -0600"  >&lt;p&gt;Fixed in patch, which uses a different namespace for the test.&lt;/p&gt;</comment>
                    <comment id="27783" author="stuart.sierra" created="Mon, 20 Feb 2012 17:18:44 -0600"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10930" name="CLJ-933-0001.patch" size="1075" author="stuart.sierra" created="Mon, 20 Feb 2012 09:33:24 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-932] contains? should throw exception on non-keyed collections</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-932</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;contains?&lt;/tt&gt; function, given a collection which is not an associative (Map, Set, String, array), returns false instead of throwing an exception.&lt;/p&gt;

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

&lt;p&gt;Other predicates, such as &lt;tt&gt;even?&lt;/tt&gt;, throw an exception when passed arguments of an invalid type.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15229">CLJ-932</key>
            <summary>contains? should throw exception on non-keyed collections</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 17 Feb 2012 15:19:20 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27759" author="stuart.sierra" created="Fri, 17 Feb 2012 15:30:57 -0600"  >&lt;p&gt;Patch adds fix, adds some tests, and removes tests reflecting the old behavior.&lt;/p&gt;</comment>
                    <comment id="29178" author="aaron" created="Wed, 15 Aug 2012 12:31:03 -0500"  >&lt;p&gt;This seems to be working properly, but what about vectors?&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(contains? [1 2 3] 3)
;-&amp;gt; false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="29179" author="jafingerhut" created="Wed, 15 Aug 2012 12:40:46 -0500"  >&lt;p&gt;The doc string for contains? covers the vector and Java array case explicitly.  I&apos;m not saying that this behavior shouldn&apos;t change, but at least it is well documented what it currently does in these cases.&lt;/p&gt;</comment>
                    <comment id="29182" author="aaron" created="Wed, 15 Aug 2012 14:03:53 -0500"  >&lt;p&gt;Agreed. I just want to make sure that we are still ok with this functionality given that things are changing. Are there others (Stuart) that want to chime in here and make the intentions clear? If this is good then I would consider this screened and ready.&lt;/p&gt;</comment>
                    <comment id="29185" author="stuart.sierra" created="Wed, 15 Aug 2012 14:40:02 -0500"  >&lt;p&gt;Vector is Associative, so supporting &lt;tt&gt;contains?&lt;/tt&gt; is valid even if it does not do what people might expect:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (contains? [:a :b :c] 2)
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
user=&amp;gt; (contains? [:a :b :c] 7)
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;I do not consider this a breaking change. I believe the docstring of &lt;tt&gt;contains?&lt;/tt&gt; leaves room for this interpretation, but Rich will have the final say.&lt;/p&gt;</comment>
                    <comment id="29187" author="aaron" created="Wed, 15 Aug 2012 14:42:30 -0500"  >&lt;p&gt;Perfect. I just wanted to make sure that this was intended.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10921" name="CLJ-932-0001.patch" size="1809" author="stuart.sierra" created="Fri, 17 Feb 2012 15:30:57 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-931] Syntactically broken clojure.test/are tests succeed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-931</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;While clojure.test/are is a very useful macro, it has one major flaw.  If the assertion is syntactically incorrect, the test succeeds.  Take this testcase:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest broken-test
  (are [a b c] (= a b c)
       1 1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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


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


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;a currently #_-disabled test case for testing `are&apos;.  It is disabled, because it fails when run with &quot;ant test&quot;.  However, it works just fine when run inside some REPL.  I presume that&apos;s because ant runs inside its own JVM instance and thus makes catching exceptions from macroexpand/eval forms impossible?!?&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27738" author="tsdh" created="Fri, 17 Feb 2012 04:36:48 -0600"  >&lt;p&gt;Another minor update.  Now (are [] true) is allowed (but meaningless).  In the previous patch, you got a &quot;divide by zero&quot; in this case.&lt;/p&gt;</comment>
                    <comment id="27925" author="jafingerhut" created="Fri, 9 Mar 2012 09:29:20 -0600"  >&lt;p&gt;Patch 0001-Fix-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-931&quot; title=&quot;Syntactically broken clojure.test/are tests succeed&quot;&gt;&lt;del&gt;CLJ-931&lt;/del&gt;&lt;/a&gt;-Syntactically-broken-clojure.test-are-te.patch applies, builds, and tests cleanly as of March 9, 2012 latest master.  One author Tassilo has signed CA.&lt;/p&gt;</comment>
                    <comment id="27927" author="stuart.sierra" created="Fri, 9 Mar 2012 10:11:34 -0600"  >&lt;p&gt;I can&apos;t make the test work either. The patch looks good. Just remove the broken test instead of leaving it commented out.&lt;/p&gt;</comment>
                    <comment id="27928" author="jafingerhut" created="Fri, 9 Mar 2012 10:24:42 -0600"  >&lt;p&gt;clj-931-error-on-bad-are-syntax-patch2.txt same as previous one, except removes commented out test.  Applies, builds, and tests cleanly to latest master.&lt;/p&gt;</comment>
                    <comment id="27929" author="stuart.sierra" created="Fri, 9 Mar 2012 10:37:21 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10920" name="0001-Fix-CLJ-931-Syntactically-broken-clojure.test-are-te.patch" size="3645" author="tsdh" created="Fri, 17 Feb 2012 04:36:48 -0600" />
                    <attachment id="10989" name="clj-931-error-on-bad-are-syntax-patch2.txt" size="2339" author="jafingerhut" created="Fri, 9 Mar 2012 10:24:42 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-930] cljs.core// does not work in ClojureScript</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-930</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.core// is hard coded into the reader as a special case. cljs.core// should similarly be hard coded&lt;/p&gt;</description>
                <environment></environment>
            <key id="15212">CLJ-930</key>
            <summary>cljs.core// does not work in ClojureScript</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Feb 2012 08:06:38 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Wed, 29 Feb 2012 13:25:03 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27864" author="jafingerhut" created="Fri, 24 Feb 2012 20:02:18 -0600"  >&lt;p&gt;David, the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-873&quot; title=&quot;Allow the function / to be referred to in namespaces other than clojure.core&quot;&gt;&lt;del&gt;CLJ-873&lt;/del&gt;&lt;/a&gt; seems to be more general than this, i.e. it allows the symbol / to be used in any namespace, not only in clojure.core and cljs.core.&lt;/p&gt;</comment>
                    <comment id="27891" author="jafingerhut" created="Wed, 29 Feb 2012 13:25:03 -0600"  >&lt;p&gt;I checked with David Nolen, and he agrees that the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-873&quot; title=&quot;Allow the function / to be referred to in namespaces other than clojure.core&quot;&gt;&lt;del&gt;CLJ-873&lt;/del&gt;&lt;/a&gt; fixes not only this issue, but also enables the symbol / to be used in any namespace.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10897" name="cljs_slash.patch" size="1426" author="dnolen" created="Wed, 8 Feb 2012 08:06:38 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-928] instant literal for Date and Timestamp should print in UTC</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-928</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The default #inst returns a java.util.Date.  Date is always in UTC, and doesn&apos;t know about time zones, but the implementation of the print method always renders it in the default time zone.  For example,&lt;/p&gt;

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

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

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

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

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

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

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


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

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

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

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

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

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

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


&lt;p&gt;    This provides a canonical storage and read format of UTC and a print format relative to the local offset.&lt;/p&gt;</comment>
                    <comment id="27846" author="stuart.sierra" created="Fri, 24 Feb 2012 14:11:18 -0600"  >&lt;p&gt;With Fogus&apos; patch on Feb. 20, instant literals do not round-trip unless &lt;tt&gt;&amp;#42;print-dup&amp;#42;&lt;/tt&gt; is bound true:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt;  (let [i (read-string &lt;span class=&quot;code-quote&quot;&gt;&quot;#inst \&quot;&lt;/span&gt;2012-02-24T14:41-02:00\&quot;&quot;)
              j (read-string (pr-str i))]
          (prn i)
          (prn j)
          (prn (= i j)))
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T11:41:00.000&quot;&lt;/span&gt;
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T06:41:00.000&quot;&lt;/span&gt;
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
nil
user=&amp;gt;(binding [*print-dup* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;]
        (let [i (read-string &lt;span class=&quot;code-quote&quot;&gt;&quot;#inst \&quot;&lt;/span&gt;2012-02-24T14:41-02:00\&quot;&quot;)
              j (read-string (pr-str i))]
          (prn i)
          (prn j)
          (prn (= i j))))
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T16:41:00.000-00:00&quot;&lt;/span&gt;
#inst &lt;span class=&quot;code-quote&quot;&gt;&quot;2012-02-24T16:41:00.000-00:00&quot;&lt;/span&gt;
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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


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

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


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


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


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


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

&lt;p&gt;Screened Steve Miner&apos;s patch of Feb. 7. Ready for Rich.&lt;/p&gt;</comment>
                    <comment id="27853" author="stuart.sierra" created="Fri, 24 Feb 2012 15:29:11 -0600"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10933" name="CLJ-928-instant-literals-for-Date-and-Timestamp-fogus.patch" size="21551" author="fogus" created="Mon, 20 Feb 2012 15:22:01 -0600" />
                    <attachment id="10896" name="CLJ-928-instant-literals-for-Date-and-Timestamp.patch" size="13173" author="steveminer@gmail.com" created="Tue, 7 Feb 2012 13:28:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-927] default tagged literal reader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-927</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;With data reader support, it&apos;s impossible to write a program to read an arbitrary stream of Clojure forms.  For example, the following code will fail with the current 1.4.0-beta1 tagged literal support:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;#point [0 2]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;I think this bug can be closed.  Default reader implementations could be provided by a contrib library.  Or someone can open a new bug if you want the language to provide a built-in default reader.&lt;/p&gt;</comment>
                    <comment id="29892" author="bronsa" created="Fri, 2 Nov 2012 13:24:46 -0500"  >&lt;p&gt;what about adding &lt;b&gt;default-tagged-reader-fn&lt;/b&gt; to clojure.main/with-bindings to make it set!able?&lt;/p&gt;</comment>
                    <comment id="29897" author="steveminer@gmail.com" created="Sat, 3 Nov 2012 09:29:54 -0500"  >&lt;p&gt;Good point about making it set!-able.  I filed that issue as a separate bug: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1101&quot; title=&quot;*default-data-reader-fn* should be set!-able in REPL&quot;&gt;&lt;del&gt;CLJ-1101&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="29914" author="stuart.sierra" created="Fri, 9 Nov 2012 08:26:05 -0600"  >&lt;p&gt;Resolved.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11586" name="CLJ-927-default-data-reader-fn-for-unknown-tags.patch" size="5278" author="steveminer@gmail.com" created="Sat, 20 Oct 2012 10:03:35 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-926] Instant literals do not round trip correctly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-926</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When using java.util.Date for instant literals (which is the default) instants do not round-trip properly during daylight savings. Here is an example:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(read-string &quot;#inst \&quot;2010-11-12T13:14:15.666-06:00\&quot;&quot;)
#inst &quot;2010-11-13T06:14:15.666+10:00&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&apos;m currently in Melbourne, which is normally GMT+10. However, on November 12th daylight savings is in effect, so the proper GMT offset is +11. The date above is actually using the correct local time (6:14:15) but with the wrong offset. The problem is more obvious when you attempt to round-trip the instant that was read.&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; #inst &quot;2010-11-13T06:14:15.666+10:00&quot;
#inst &quot;2010-11-13T07:14:15.666+10:00&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;Notice that we read 6:14am but the output was 7:14 with the same offset. Upon digging deeper the real culprit seems to be the use of String.format (through clojure.core/format) when outputting java.util.Date. Notice the following inside caldate-&amp;gt;rfc3339&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;(format &quot;#inst \&quot;%1$tFT%1$tT.%1$tL%1$tz\&quot;&quot; d))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Let&apos;s compare the timezone offset in the underlying date with what is printed by %1$tz&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 d #inst &quot;2010-11-13T06:14:15.666+10:00&quot;)
#&apos;clojure.instant/d                                                                                                                                                                                         
user&amp;gt; (.getHours d)
7                                                                                                                                                                                                           
user&amp;gt; (.getTimezoneOffset d)
-660
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For reference, the definition of getTimezoneOffset is &lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;-(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;So far it looks good. 6am in GMT+10 becomes 7am in GMT+11. Let&apos;s see how String.format handles it though.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;                                                                                               
clojure.instant&amp;gt; (format &quot;%1$tz&quot; d)
&quot;+1000&quot;                                                                                                                                                                                                     
clojure.instant&amp;gt; (format &quot;%1$tT&quot; d)
&quot;07:14:15&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;String.format prints the correct hour, but with the wrong offset. The recommended way for formatting dates is to use a DateFormatter. &lt;/p&gt;

&lt;p&gt;The String.format approach appears to work properly for Calendar, but not for Date. Therefore the attached patch keeps the current &lt;br/&gt;
implementation for java.util.Calendar but uses SimpleDateFormat to handle java.util.Date correctly. This fixes the roundtrip problem.&lt;/p&gt;

</description>
                <environment></environment>
            <key id="15202">CLJ-926</key>
            <summary>Instant literals do not round trip correctly</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                        <label>instant</label>
                        <label>reader</label>
                        <label>tagged-literals</label>
                    </labels>
                <created>Sun, 5 Feb 2012 21:23:19 -0600</created>
                <updated>Fri, 17 Feb 2012 15:55:14 -0600</updated>
                    <resolved>Fri, 17 Feb 2012 15:55:14 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27675" author="cosmin" created="Sun, 5 Feb 2012 21:29:22 -0600"  >&lt;p&gt;Not quite sure how to create a repeatable test for this since the issue depends on the local timezone.&lt;/p&gt;</comment>
                    <comment id="27676" author="steveminer@gmail.com" created="Mon, 6 Feb 2012 08:33:11 -0600"  >&lt;p&gt;java.util.TimeZone/setDefault could be used for testing in various timezones.&lt;/p&gt;</comment>
                    <comment id="27677" author="steveminer@gmail.com" created="Mon, 6 Feb 2012 08:37:12 -0600"  >&lt;p&gt;Regarding the patch: SimpleDateFormat is a relatively heavy-weight object, so it seems bad to allocate one every time you print a Date.  Unfortunately, SimpleDateFormat is not thread-safe, so you can&apos;t just share one.  The Java world seems to agree that you should use JodaTime instead, but if you&apos;re stuck with the JDK, you need to have a ThreadLocal SimpleDateFormat. I&apos;m working on my own patch along those lines.&lt;/p&gt;</comment>
                    <comment id="27683" author="fogus" created="Mon, 6 Feb 2012 19:38:17 -0600"  >&lt;p&gt;Excellent analysis.  I&apos;ll keep track of this case and vet any patches that come along.  Please do attach a regression test if possible.&lt;/p&gt;</comment>
                    <comment id="27684" author="cosmin" created="Mon, 6 Feb 2012 20:39:09 -0600"  >&lt;p&gt;I attached a new patch using a SimpleDateFormat per thread using a thread local. I&apos;ll try to add some tests next.&lt;/p&gt;</comment>
                    <comment id="27687" author="cosmin" created="Mon, 6 Feb 2012 22:42:01 -0600"  >&lt;p&gt;A combined patch that uses a thread local SimpleDateFormat, tests round-tripping at a known daylight savings point (by overriding the default timezone) and checks round tripping at multiple points throughout the year (every hour of the first 4 weeks of every month of the year).&lt;/p&gt;

&lt;p&gt;Steve, thanks for the suggestions on using a thread local and TimeZone/setDefault.&lt;/p&gt;</comment>
                    <comment id="27690" author="steveminer@gmail.com" created="Tue, 7 Feb 2012 13:32:11 -0600"  >&lt;p&gt;I filed &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-928&quot; title=&quot;instant literal for Date and Timestamp should print in UTC&quot;&gt;&lt;del&gt;CLJ-928&lt;/del&gt;&lt;/a&gt; with my patch for fixing the printing of Date and Timestamp using UTC.  I copied the tests from the &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-926&quot; title=&quot;Instant literals do not round trip correctly&quot;&gt;&lt;del&gt;CLJ-926&lt;/del&gt;&lt;/a&gt; patch to make sure we&apos;re compatible.&lt;/p&gt;</comment>
                    <comment id="27692" author="fogus" created="Tue, 7 Feb 2012 15:11:58 -0600"  >&lt;p&gt;Thanks for the regression test also.  I&apos;ll vett this patch ASAP.&lt;/p&gt;</comment>
                    <comment id="27741" author="fogus" created="Fri, 17 Feb 2012 13:24:09 -0600"  >&lt;p&gt;Seems reasonable to me.&lt;/p&gt;</comment>
                    <comment id="27744" author="stuart.sierra" created="Fri, 17 Feb 2012 13:46:25 -0600"  >&lt;p&gt;Vetted. Will apply later.&lt;/p&gt;</comment>
                    <comment id="27746" author="stuart.sierra" created="Fri, 17 Feb 2012 13:56:49 -0600"  >&lt;p&gt;Not Vetted. Test. That thing.&lt;/p&gt;</comment>
                    <comment id="27749" author="stuart.sierra" created="Fri, 17 Feb 2012 14:10:14 -0600"  >&lt;p&gt;No, it&apos;s &quot;Screened,&quot; not &quot;Test.&quot; Somebody save me.&lt;/p&gt;</comment>
                    <comment id="27760" author="stuart.sierra" created="Fri, 17 Feb 2012 15:55:14 -0600"  >&lt;p&gt;Superseded by &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-928&quot; title=&quot;instant literal for Date and Timestamp should print in UTC&quot;&gt;&lt;del&gt;CLJ-928&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10895" name="CLJ-926-round-trip-date-instants-with-tests.patch" size="5506" author="cosmin" created="Mon, 6 Feb 2012 22:42:01 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10004">Screened</customfieldvalue>

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

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

<item>
            <title>[CLJ-925] rand-nth throws on empty list</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-925</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;rand-nth throws when given an empty list.&lt;/p&gt;

&lt;p&gt;Solution is to either call seq on parameter, or to supply nil as a not-found parameter in call to nth. Patch fir latter fix included.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15201">CLJ-925</key>
            <summary>rand-nth throws on empty list</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="wagjo">Jozef Wagner</reporter>
                        <labels>
                    </labels>
                <created>Sun, 5 Feb 2012 07:06:03 -0600</created>
                <updated>Tue, 14 Aug 2012 13:35:28 -0500</updated>
                    <resolved>Tue, 14 Aug 2012 13:35:28 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27986" author="jafingerhut" created="Fri, 23 Mar 2012 02:38:58 -0500"  >&lt;p&gt;Changing Patch attribute to value &quot;Code&quot;, since I&apos;ve been told that is what it ought to be for a ticket with a patch ready for screening.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10891" name="patch.diff" size="685" author="wagjo" created="Sun, 5 Feb 2012 07:06:03 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

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

<item>
            <title>[CLJ-924] Error reporting of invalid digit in unicode character literal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-924</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I ran across the following code when reading unicode character literals in readUnicodeChar(String token, int offset, int length, int base)&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt; 
int d = Character.digit(token.charAt(i), base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + (char) d);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 


&lt;p&gt;Casting -1 to a char doesn&apos;t seem to produce anything useful. I&apos;m guessing the appropriate code might look like&lt;/p&gt;


&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt; 
int d = Character.digit(token.charAt(i), base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + token.charAt(i));
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 


&lt;p&gt;For comparison, the code in the other readUnicodeCharacter used when reading strings handles this correctly with:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;int d = Character.digit(ch, base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + (char) ch); 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15200">CLJ-924</key>
            <summary>Error reporting of invalid digit in unicode character literal</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                    </labels>
                <created>Sun, 5 Feb 2012 01:06:22 -0600</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27670" author="cosmin" created="Sun, 5 Feb 2012 01:09:04 -0600"  >&lt;p&gt;Attached a patch with the minor code fix.&lt;/p&gt;</comment>
                    <comment id="27849" author="stuart.sierra" created="Fri, 24 Feb 2012 15:00:12 -0600"  >&lt;p&gt;Screened. I can&apos;t demonstrate this code being called by the reader, but it seems to be correct.&lt;/p&gt;</comment>
                    <comment id="27881" author="jafingerhut" created="Mon, 27 Feb 2012 22:08:13 -0600"  >&lt;p&gt;Sorry to disturb things after this has been screened, but clj-924-unicode-invalid-digit-patch2.txt has some added tests that cause the problem to occur, as well as one other similar one nearby in LispReader.java, which is also fixed, in addition to Cosmin&apos;s fix.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10890" name="CLJ-924-unicode-invalid-digit.patch" size="924" author="cosmin" created="Sun, 5 Feb 2012 01:09:04 -0600" />
                    <attachment id="10969" name="clj-924-unicode-invalid-digit-patch2.txt" size="6659" author="jafingerhut" created="Mon, 27 Feb 2012 22:08:13 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-923] Reading ratios prefixed by + is not working</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-923</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In general Clojure&apos;s number types can be read prefixed with either a +&lt;br/&gt;
or - and this seems to work correctly for reading integers and floats.&lt;br/&gt;
In the case of ratios however things break down when ratios are&lt;br/&gt;
prefixed with a +.&lt;/p&gt;

&lt;p&gt;The ratio pattern in LispReader.java does match on ratios starting&lt;br/&gt;
with both + and - but matchNumber fails on ratios prefixed with +&lt;br/&gt;
because it ends up calling &quot;new BigInteger(m.group(1))&quot; and it turns&lt;br/&gt;
out the constructor for BigInteger has no problems with negative&lt;br/&gt;
numbers but it doesn&apos;t like numbers prefixed by a +.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15159">CLJ-923</key>
            <summary>Reading ratios prefixed by + is not working</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                    </labels>
                <created>Fri, 3 Feb 2012 18:06:54 -0600</created>
                <updated>Sat, 18 Aug 2012 07:12:53 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:12:52 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27645" author="cosmin" created="Fri, 3 Feb 2012 18:26:09 -0600"  >&lt;p&gt;added patch with fix and tests&lt;/p&gt;</comment>
                    <comment id="27854" author="hiredman" created="Fri, 24 Feb 2012 16:02:26 -0600"  >&lt;p&gt;changes to the reader tests on master cause 0001-added-tests-for-reading-ratios-and-fixed-reading-of-.patch to no longer apply cleanly&lt;/p&gt;</comment>
                    <comment id="27856" author="jafingerhut" created="Fri, 24 Feb 2012 16:21:55 -0600"  >&lt;p&gt;clj-923-reading-ratios-prefixed-by-plus-patch.txt applies cleanly to latest as of Feb 24, 2012 (2:20 PM PST &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="28000" author="jafingerhut" created="Fri, 23 Mar 2012 19:55:54 -0500"  >&lt;p&gt;clj-923-reading-ratios-prefixed-by-plus-patch2.txt still semantically same as Cosmin&apos;s original patch, except it applies, builds, and tests cleanly on latest master as of Mar 23, 2012.  Context lines around patch must have changed recently.&lt;/p&gt;</comment>
                    <comment id="28002" author="cosmin" created="Fri, 23 Mar 2012 20:07:23 -0500"  >&lt;p&gt;Thanks for updating the patch. I&apos;ve removed the original to make it clear which one we need.&lt;/p&gt;</comment>
                    <comment id="29157" author="aaron" created="Tue, 14 Aug 2012 21:33:29 -0500"  >&lt;p&gt;Patch applies cleanly against 4004d267e124f12b65b0d7fb6522f32a75e3c4fb. Submitter is a confirmed CA signer.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11005" name="clj-923-reading-ratios-prefixed-by-plus-patch2.txt" size="1897" author="jafingerhut" created="Fri, 23 Mar 2012 19:55:54 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-922] Transient maps lose values</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-922</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I have tested this on the latest clojure 1.4 alpha (1.4.0-alpha5).&lt;/p&gt;

&lt;p&gt;I am not exactly sure what the problem is w/ transient maps, but at a certain point they appear to lose values (values that are inserted into the maps w/ assoc! do not get saved).&lt;/p&gt;

&lt;p&gt;I have a test script that illustrates this bug:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/497879a727dabac46ec3&quot;&gt;https://gist.github.com/497879a727dabac46ec3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the values up to content-length are saved, but content-length never makes it into the transient map.&lt;/p&gt;</description>
                <environment>OS X, java 1.6.0_29</environment>
            <key id="15152">CLJ-922</key>
            <summary>Transient maps lose values</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="carllerche">Carl Lerche</reporter>
                        <labels>
                    </labels>
                <created>Tue, 31 Jan 2012 00:01:42 -0600</created>
                <updated>Tue, 31 Jan 2012 01:21:40 -0600</updated>
                    <resolved>Tue, 31 Jan 2012 01:21:40 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27632" author="tsdh" created="Tue, 31 Jan 2012 01:20:53 -0600"  >&lt;p&gt;This is no bug, but you use assoc! wrongly.  Just like with assoc, you need to use the return value of the call instead of &quot;bashing the transient map in place&quot;.  I.e., in your code, replace the doto with -&amp;gt;, which threads the result of each assoc! call to the next one, returning the last value.&lt;/p&gt;

&lt;p&gt;BTW: This came up on the list the last days, too.  See:&lt;/p&gt;

&lt;p&gt;  &lt;a href=&quot;https://groups.google.com/d/msg/clojure/rmLLnRx5p3U/10GYNQdTVksJ&quot;&gt;https://groups.google.com/d/msg/clojure/rmLLnRx5p3U/10GYNQdTVksJ&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27633" author="tsdh" created="Tue, 31 Jan 2012 01:21:40 -0600"  >&lt;p&gt;This is no bug but a usage error.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10795" name="bug.clj" size="654" author="carllerche" created="Tue, 31 Jan 2012 00:01:42 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-921] Ant 1.8 gives warning about &apos;includeantruntime&apos; when building Clojure</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-921</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;m building Clojure locally with Ant 1.8.2.  I get a warning:&lt;/p&gt;

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

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

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

&lt;p&gt;The simple fix is to add an attribute to the javac task:  includeAntRuntime=&quot;false&quot;.&lt;/p&gt;</description>
                <environment>Mac OS X 10.7, Ant 1.8.2, Java 1.6</environment>
            <key id="15151">CLJ-921</key>
            <summary>Ant 1.8 gives warning about &apos;includeantruntime&apos; when building Clojure</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="steveminer@gmail.com">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Mon, 30 Jan 2012 16:48:07 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:11:44 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10794" name="0001-includeAntRuntime.patch" size="657" author="steveminer@gmail.com" created="Mon, 30 Jan 2012 16:48:07 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10009">Fixed</customfieldvalue>

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

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

&lt;p&gt;See: &lt;a href=&quot;https://github.com/clojure/clojure/pull/14&quot;&gt;https://github.com/clojure/clojure/pull/14&lt;/a&gt;&lt;/p&gt;</description>
                <environment>Any environment that supports FreeDesktop, so Linux and BSD mainly.</environment>
            <key id="15150">CLJ-920</key>
            <summary>Adds support for FreeDesktop&apos;s xdg-open in clojure.java.browse/browse-url.</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jeremyheiler">Jeremy Heiler</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Sat, 28 Jan 2012 10:45:35 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Wed, 29 Feb 2012 13:19:52 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27704" author="jafingerhut" created="Fri, 10 Feb 2012 05:08:51 -0600"  >&lt;p&gt;Is this a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;&lt;del&gt;CLJ-896&lt;/del&gt;&lt;/a&gt;?  Can you look at the patch there and see if there is any advantage to the patch for it vs. the one here?  Or perhaps some combination that is an improvement on them both?&lt;/p&gt;</comment>
                    <comment id="27890" author="jafingerhut" created="Wed, 29 Feb 2012 13:19:53 -0600"  >&lt;p&gt;The issue is definitely a duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;&lt;del&gt;CLJ-896&lt;/del&gt;&lt;/a&gt;.  The proposed patches were different.  &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;&lt;del&gt;CLJ-896&lt;/del&gt;&lt;/a&gt; now has an attached patch that is an enhancement of what Jeremy Heiler created.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10793" name="browseurl.patch" size="653" author="jeremyheiler" created="Sat, 28 Jan 2012 10:45:35 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-918] Vars with {:macro true} meta data do not work when loaded from AOT compiled file</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-918</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When defining a var with &lt;tt&gt;^{:macro true&lt;/tt&gt;} the call of the binded macro does emit a warning when the definition has been AOT compiled.&lt;/p&gt;

&lt;p&gt;See example outputs with demo code here: &lt;a href=&quot;https://refheap.com/paste/389&quot;&gt;https://refheap.com/paste/389&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bronsa on #clojure created a patch: &lt;a href=&quot;http://sprunge.us/bWcc&quot;&gt;http://sprunge.us/bWcc&lt;/a&gt;&lt;/p&gt;</description>
                <environment>Tested with 1.3.0 and 1.4.0</environment>
            <key id="15145">CLJ-918</key>
            <summary>Vars with {:macro true} meta data do not work when loaded from AOT compiled file</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jannschu">Jannik Schorg</reporter>
                        <labels>
                        <label>Compiler</label>
                        <label>enhancement</label>
                        <label>metadata</label>
                    </labels>
                <created>Mon, 23 Jan 2012 16:06:06 -0600</created>
                <updated>Thu, 13 Sep 2012 14:29:01 -0500</updated>
                    <resolved>Thu, 13 Sep 2012 14:29:01 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29437" author="jafingerhut" created="Thu, 13 Sep 2012 14:29:01 -0500"  >&lt;p&gt;Duplicate of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1021&quot; title=&quot;(let [i 5] (defmacro m [v] v) m) interprets m as a function, not a macro&quot;&gt;CLJ-1021&lt;/a&gt;.  Later ticket kept in preference to this one, because it has a patch and this one does not.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10010">New</customfieldvalue>

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

<item>
            <title>[CLJ-917] clojure.core/definterface is not included in the API docs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-917</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Is &lt;tt&gt;definterface&lt;/tt&gt; meant to be a public API?  If yes, then it needs a docstring.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15143">CLJ-917</key>
            <summary>clojure.core/definterface is not included in the API docs</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>documentation</label>
                    </labels>
                <created>Mon, 23 Jan 2012 07:58:55 -0600</created>
                <updated>Sat, 20 Oct 2012 09:53:42 -0500</updated>
                    <resolved>Sat, 20 Oct 2012 09:53:42 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27618" author="tsdh" created="Wed, 25 Jan 2012 14:28:05 -0600"  >&lt;p&gt;This patch obsoletes the previous one.  The only addition is the insertion of :added metadata which is needed to make the tests pass.&lt;/p&gt;</comment>
                    <comment id="27911" author="tsdh" created="Thu, 8 Mar 2012 03:53:02 -0600"  >&lt;p&gt;Updated patch.&lt;/p&gt;</comment>
                    <comment id="27995" author="stuart.sierra" created="Fri, 23 Mar 2012 09:04:59 -0500"  >&lt;p&gt;Screened, pending question for Rich: &quot;Is definterface meant to be a public API?&quot;&lt;/p&gt;</comment>
                    <comment id="28663" author="tsdh" created="Thu, 31 May 2012 01:45:29 -0500"  >&lt;p&gt;Rebased patch on current master.&lt;/p&gt;</comment>
                    <comment id="29265" author="stuart.sierra" created="Fri, 24 Aug 2012 13:12:24 -0500"  >&lt;p&gt;Screened again. Still applies as of commit 1c8eb16a14ce5daefef1df68d2f6b1f143003140&lt;/p&gt;</comment>
                    <comment id="29688" author="stu" created="Fri, 19 Oct 2012 10:32:40 -0500"  >&lt;p&gt;The &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-971&quot; title=&quot;Jar within a jar throws a runtime error&quot;&gt;CLJ-971&lt;/a&gt; patch I just added is the same as the original with grammar corrections.&lt;/p&gt;</comment>
                    <comment id="29723" author="tsdh" created="Sat, 20 Oct 2012 05:48:29 -0500"  >&lt;p&gt;Patch including Stu&apos;s grammar/typo fixes.&lt;/p&gt;

&lt;p&gt;Sorry, contributors like to show up in the commit history, so I couldn&apos;t resist stealing my patch back from you. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/wink.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11585" name="0001-Add-docstring-and-added-metadata-to-definterface.patch" size="1100" author="tsdh" created="Sat, 20 Oct 2012 05:48:29 -0500" />
                    <attachment id="11578" name="CLJ-917-definterface.patch" size="1090" author="stu" created="Fri, 19 Oct 2012 10:32:40 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-916] into loses metadata</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-916</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The into fn loses metadata.&lt;/p&gt;

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

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

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



</description>
                <environment></environment>
            <key id="15134">CLJ-916</key>
            <summary>into loses metadata</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="markswanson">Mark Swanson</reporter>
                        <labels>
                        <label>into</label>
                        <label>metadata</label>
                        <label>walk</label>
                    </labels>
                <created>Sat, 21 Jan 2012 11:58:29 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>4</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="27899" author="jafingerhut" created="Thu, 1 Mar 2012 04:42:26 -0600"  >&lt;p&gt;Someone please correct this if it is wrong, but it seems that into loses metadata because it is implemented using transients, and transients lose metadata.  If true, then one way to fix this ticket is to implement metadata for transients.&lt;/p&gt;

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

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


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


&lt;p&gt;One final point. I&apos;d prefer that tickets be addressed in isolation and not contain extra fixes. This is a personal preference, but one that I&apos;d like to take up on the clojure-dev list.&lt;/p&gt;</comment>
                    <comment id="29191" author="jafingerhut" created="Thu, 16 Aug 2012 00:38:41 -0500"  >&lt;p&gt;clj-916-make-into-preserve-metadata-patch1.txt dated Aug 15 2012 only changes the behavior of into so that it preserves metadata.  One or more other tickets will be created for some other functions that currently do not preserve metadata, but perhaps should.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11006" name="clj-916-make-into-and-others-preserve-metadata-patch2.txt" size="7444" author="jafingerhut" created="Fri, 23 Mar 2012 20:03:25 -0500" />
                    <attachment id="11437" name="clj-916-make-into-preserve-metadata-patch1.txt" size="3811" author="jafingerhut" created="Thu, 16 Aug 2012 00:38:41 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-915] Add support for instance literals using planned Clojure 1.4 tagged literal capability.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-915</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using the tagged literal facility added in Clojure 1.4-alpha4, add support for an instance literal, adhering to &lt;a href=&quot;http://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339 &lt;/a&gt; of the form:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;date-year   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                         ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
                         ; rules
time-secfrac    = &apos;.&apos; 1*DIGIT
time-numoffset  = (&apos;+&apos; / &apos;-&apos;) time-hour &apos;:&apos; time-minute
time-offset     = &apos;Z&apos; / time-numoffset

time-part            = time-hour [ &apos;:&apos; time-minute [ &apos;:&apos; time-second [time-secfrac] [time-offset] ] ]

timestamp       = date-year [ &apos;-&apos; date-month [ &apos;-&apos; date-mday [ &apos;T&apos; time-part ] ] ]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The default object built with this literal would be a java.util.Date. A print-method for this type would also be required for this enhancement.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15130">CLJ-915</key>
            <summary>Add support for instance literals using planned Clojure 1.4 tagged literal capability.</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                    </labels>
                <created>Fri, 20 Jan 2012 15:21:15 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Sat, 21 Jan 2012 09:14:17 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27597" author="fogus" created="Sat, 21 Jan 2012 09:14:17 -0600"  >&lt;p&gt;A dup of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-871&quot; title=&quot;instant literal&quot;&gt;&lt;del&gt;CLJ-871&lt;/del&gt;&lt;/a&gt;.  Patch and comments have been placed there.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10781" name="CLJ-915-instant-literals.diff" size="19377" author="fogus" created="Fri, 20 Jan 2012 23:04:34 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-914] Add support for UUID literals using tagged literal capability.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-914</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using the tagged literal facility added in Clojure 1.4-alpha4, add support for a UUID literal of the form:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;#uuid &quot;550e8400-e29b-41d4-a716-446655440000&quot;

;=&amp;gt; #&amp;lt;UUID 550e8400-e29b-41d4-a716-446655440000&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

<item>
            <title>[CLJ-913] slurp fails on /proc files (linux)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-913</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;On my machine, &lt;br/&gt;
(slurp &quot;/proc/cpuinfo&quot;)&lt;br/&gt;
fails with:&lt;br/&gt;
java.io.IOException: Argument invalide (NO_SOURCE_FILE:0)&lt;/p&gt;

&lt;p&gt;whereas the following succeeds:&lt;br/&gt;
(with-open &lt;span class=&quot;error&quot;&gt;&amp;#91;f (java.io.FileReader. &amp;quot;/proc/cpuinfo&amp;quot;)&amp;#93;&lt;/span&gt; (slurp f))&lt;/p&gt;</description>
                <environment>linux</environment>
            <key id="15122">CLJ-913</key>
            <summary>slurp fails on /proc files (linux)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="roma1n">Romain</reporter>
                        <labels>
                    </labels>
                <created>Thu, 19 Jan 2012 16:01:22 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Wed, 29 Feb 2012 01:06:27 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27608" author="tsdh" created="Mon, 23 Jan 2012 08:57:55 -0600"  >&lt;p&gt;It seems this is not an error in Clojure but an error in the native implementation of FileInputStream.available().  For example, this Java code throws the same 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;    FileInputStream fis = new FileInputStream(&quot;/home/horn/dead.letter&quot;);
    System.out.println(fis.available());  // Works fine

    fis = new FileInputStream(&quot;/proc/cpuinfo&quot;);
    System.out.println(fis.available());  // IOException is thrown
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Tested with sun-jdk 1.6.0.29 and IcedTea 7.2.0.&lt;/p&gt;</comment>
                    <comment id="27784" author="jafingerhut" created="Mon, 20 Feb 2012 19:42:13 -0600"  >&lt;p&gt;This is not a fix, but a workaround for this issue with the JVM: call slurp on a reader that you force to be constructed as unbuffered.  For example:&lt;/p&gt;

&lt;p&gt;(slurp (java.io.InputStreamReader. (java.io.FileInputStream. &quot;/proc/cpuinfo&quot;)))&lt;/p&gt;

&lt;p&gt;(tested with Sun/Oracle JDK 1.7.0_02)&lt;/p&gt;

&lt;p&gt;This is less efficient for large files, so I wouldn&apos;t recommend that the slurp code be modified to work this way for all files.&lt;/p&gt;

&lt;p&gt;One can imagine an implementation of Clojure slurp and clojure.java.io/reader that first tried the slurp call with buffered I/O, and if an exception like this one occurs fall back to unbuffered I/O.  However, that sounds like it would get very hairy very quickly, and would be difficult to write it in such a way that it did not mask I/O errors that should be visible to the caller.  Also that seems like unwanted complexity in Clojure to work around what is likely a bug in the JVM.  Someone (Tassilo?) filed a bug with Oracle about this exception:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7132461&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7132461&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27888" author="jafingerhut" created="Wed, 29 Feb 2012 01:06:27 -0600"  >&lt;p&gt;I contacted Romain, the submitter, and they agreed that trying to work around this JVM bug in Clojure&apos;s slurp might be a bit excessive, and that closing the ticket was reasonable.&lt;/p&gt;

&lt;p&gt;I have added a note about Romain&apos;s workaround at &lt;a href=&quot;http://clojuredocs.org/clojure_core/1.3.0/clojure.core/slurp&quot;&gt;http://clojuredocs.org/clojure_core/1.3.0/clojure.core/slurp&lt;/a&gt; in hopes that others will be able to find it more easily.&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-912] clojure.java.browse/browse-url fails to open http://localhost:3000 with swing backend</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-912</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve got the following exception after launching &lt;tt&gt;(clojure.java.browse/browse-url &quot;http://localhost:3000&quot;)&lt;/tt&gt;:&lt;/p&gt;

&lt;blockquote&gt;

&lt;p&gt;java.lang.RuntimeException: java.io.FileNotFoundException: &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;br/&gt;
	at clojure.lang.Util.runtimeException(Util.java:165)&lt;br/&gt;
	at clojure.lang.Reflector.invokeConstructor(Reflector.java:193)&lt;br/&gt;
	at clojure.java.browse_ui$open_url_in_swing.invoke(browse_ui.clj:15)&lt;br/&gt;
	at clojure.lang.Var.invoke(Var.java:401)&lt;br/&gt;
	at clojure.java.browse$open_url_in_swing.invoke(browse.clj:44)&lt;br/&gt;
	at clojure.java.browse$browse_url.invoke(browse.clj:52)&lt;br/&gt;
	at user$eval1689.invoke(NO_SOURCE_FILE:1)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6465)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6431)&lt;br/&gt;
	at clojure.core$eval.invoke(core.clj:2795)&lt;br/&gt;
	at swank.commands.basic$eval_region.invoke(basic.clj:47)&lt;br/&gt;
	at swank.commands.basic$eval_region.invoke(basic.clj:37)&lt;br/&gt;
	at swank.commands.basic$eval845$listener_eval__846.invoke(basic.clj:71)&lt;br/&gt;
	at clojure.lang.Var.invoke(Var.java:401)&lt;br/&gt;
	at user$eval1687.invoke(NO_SOURCE_FILE)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6465)&lt;br/&gt;
	at clojure.lang.Compiler.eval(Compiler.java:6431)&lt;br/&gt;
	at clojure.core$eval.invoke(core.clj:2795)&lt;br/&gt;
	at swank.core$eval_in_emacs_package.invoke(core.clj:92)&lt;br/&gt;
	at swank.core$eval_for_emacs.invoke(core.clj:239)&lt;br/&gt;
	at clojure.lang.Var.invoke(Var.java:409)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:167)&lt;br/&gt;
	at clojure.lang.Var.applyTo(Var.java:518)&lt;br/&gt;
	at clojure.core$apply.invoke(core.clj:600)&lt;br/&gt;
	at swank.core$eval_from_control.invoke(core.clj:99)&lt;br/&gt;
	at swank.core$eval_loop.invoke(core.clj:104)&lt;br/&gt;
	at swank.core$spawn_repl_thread$fn_&lt;em&gt;527$fn&lt;/em&gt;_528.invoke(core.clj:309)&lt;br/&gt;
	at clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
	at clojure.lang.AFn.applyTo(AFn.java:151)&lt;br/&gt;
	at clojure.core$apply.invoke(core.clj:600)&lt;br/&gt;
	at swank.core$spawn_repl_thread$fn__527.doInvoke(core.clj:306)&lt;br/&gt;
	at clojure.lang.RestFn.invoke(RestFn.java:397)&lt;br/&gt;
	at clojure.lang.AFn.run(AFn.java:24)&lt;br/&gt;
	at java.lang.Thread.run(Thread.java:679)&lt;br/&gt;
Caused by: java.io.FileNotFoundException: &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;br/&gt;
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&lt;br/&gt;
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)&lt;br/&gt;
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)&lt;br/&gt;
	at java.lang.reflect.Constructor.newInstance(Constructor.java:532)&lt;br/&gt;
	at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1458)&lt;br/&gt;
	at java.security.AccessController.doPrivileged(Native Method)&lt;br/&gt;
	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1452)&lt;br/&gt;
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1106)&lt;br/&gt;
	at javax.swing.JEditorPane.getStream(JEditorPane.java:827)&lt;br/&gt;
	at javax.swing.JEditorPane.setPage(JEditorPane.java:433)&lt;br/&gt;
	at javax.swing.JEditorPane.setPage(JEditorPane.java:939)&lt;br/&gt;
	at javax.swing.JEditorPane.&amp;lt;init&amp;gt;(JEditorPane.java:273)&lt;br/&gt;
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&lt;br/&gt;
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)&lt;br/&gt;
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)&lt;br/&gt;
	at java.lang.reflect.Constructor.newInstance(Constructor.java:532)&lt;br/&gt;
	at clojure.lang.Reflector.invokeConstructor(Reflector.java:183)&lt;br/&gt;
	... 32 more&lt;br/&gt;
Caused by: java.io.FileNotFoundException: &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;br/&gt;
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1401)&lt;br/&gt;
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:397)&lt;br/&gt;
	at javax.swing.JEditorPane.getStream(JEditorPane.java:792)&lt;br/&gt;
	... 40 more&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It works with urls like &lt;a href=&quot;http://google.com:80&quot;&gt;http://google.com:80&lt;/a&gt;, so probably the problem is in the combination of one-segment domen and port.&lt;/p&gt;

&lt;p&gt;Note: I use Ubuntu 11.10 with Chromium as a default browser. I&apos;m not sure why &lt;tt&gt;browse-url&lt;/tt&gt; fails to open urls via standart browser. Should I create another issue for that or is it a java problem?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15120">CLJ-912</key>
            <summary>clojure.java.browse/browse-url fails to open http://localhost:3000 with swing backend</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnaumov">Dmitri Naumov</reporter>
                        <labels>
                    </labels>
                <created>Tue, 17 Jan 2012 00:45:26 -0600</created>
                <updated>Mon, 12 Mar 2012 13:24:37 -0500</updated>
                    <resolved>Mon, 12 Mar 2012 13:17:16 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27892" author="jafingerhut" created="Wed, 29 Feb 2012 13:38:09 -0600"  >&lt;p&gt;Dmitri: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;&lt;del&gt;CLJ-896&lt;/del&gt;&lt;/a&gt; has a patch that changes browse-url to use the command line tool xdg-open instead of Java Swing.  If the command:&lt;/p&gt;

&lt;p&gt;xdg-open &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;works on your system from the command line, then that patch will probably also make (browse-url &quot;http://localhost:3000&quot;) work, too.&lt;/p&gt;

&lt;p&gt;I tried (browse-url &quot;http://localhost:3000&quot;) on an Ubuntu 10.04 LTS system using Sun/Oracle&apos;s JVM 1.6.0_26, and it worked.  Which JVM are you using?&lt;/p&gt;</comment>
                    <comment id="27932" author="dnaumov" created="Mon, 12 Mar 2012 13:09:57 -0500"  >&lt;p&gt;I tried it again and now I can&apos;t reproduce it - browse-url works as expected and Swing gui also works when launched manually. I use openjdk, so maybe it was a problem with its classes? Anyway, the issue should be closed. &lt;br/&gt;
Sorry for bothering you.&lt;/p&gt;</comment>
                    <comment id="27933" author="jafingerhut" created="Mon, 12 Mar 2012 13:17:16 -0500"  >&lt;p&gt;I&apos;m not sure if this should be marked with a Resolution of Declined or Completed, if the issue cannot be reproduced.  I&apos;m picking Declined for this change.  Feel free to change it if I&apos;ve picked incorrectly.&lt;/p&gt;</comment>
                    <comment id="27934" author="dnaumov" created="Mon, 12 Mar 2012 13:24:37 -0500"  >&lt;p&gt;Yeah, I also think Declined is correct.&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-910] [Patch] Allow for type-hinting the method receiver in memfn</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-910</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The attached patch copies metadata given to the method name symbol of memfn to the method receiver in the expansion.  That way, memfn is able to be used even for type-hinted calls resulting in a big performance win.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user&amp;gt; (time (dotimes [i 1000000] ((memfn intValue) 1)))
Reflection warning, NO_SOURCE_FILE:1 - call to intValue can&apos;t be resolved.
&quot;Elapsed time: 2579.229115 msecs&quot;
nil
user&amp;gt; (time (dotimes [i 1000000] ((memfn ^Number intValue) 1)))
&quot;Elapsed time: 12.015235 msecs&quot;
nil
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15115">CLJ-910</key>
            <summary>[Patch] Allow for type-hinting the method receiver in memfn</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="tsdh">Tassilo Horn</reporter>
                        <labels>
                        <label>performance</label>
                        <label>reflection</label>
                    </labels>
                <created>Fri, 13 Jan 2012 06:02:28 -0600</created>
                <updated>Sat, 1 Sep 2012 08:37:48 -0500</updated>
                    <resolved>Sat, 1 Sep 2012 08:37:48 -0500</resolved>
                                            <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27912" author="tsdh" created="Thu, 8 Mar 2012 03:56:20 -0600"  >&lt;p&gt;Updated patch.&lt;/p&gt;</comment>
                    <comment id="29245" author="aaron" created="Tue, 21 Aug 2012 18:06:49 -0500"  >&lt;p&gt;Applies properly against d4170e65d001c8c2976f1bd7159484056b9a9d6d. Things look good to me. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10985" name="0001-Make-memfn-allow-for-type-hinting-the-method-receive.patch" size="1168" author="tsdh" created="Thu, 8 Mar 2012 03:56:20 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-909] Make LineNumberingPushbackReader&apos;s buffer size configurable</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-909</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In some situations, it&apos;s necessary to configure the buffer size of LineNumberingPushbackReader&apos;s wrapped java.io.LineNumberReader, that gets created in the constructor. A concrete problem case is where you want to avoid doing reads from the underlying Reader whenever possible, so using a buffer size of 1 makes it a bit lazier. I can also imagine cases where you&apos;d want to &lt;b&gt;increase&lt;/b&gt; the buffer from java.io.BufferedReader&apos;s 8192-char default, but I haven&apos;t dealt with that one directly.&lt;/p&gt;

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

&lt;p&gt;Both java.io.LineNumberReader and java.io.PushbackReader have constructors that accept the buffer size as the second argument, so it seems very reasonable to me to add a similar constructor for LineNumberingPushbackReader.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15111">CLJ-909</key>
            <summary>Make LineNumberingPushbackReader&apos;s buffer size configurable</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Wed, 11 Jan 2012 19:16:40 -0600</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27607" author="trptcolin" created="Sun, 22 Jan 2012 18:56:50 -0600"  >&lt;p&gt;This patch still works great.&lt;/p&gt;

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

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

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

&lt;p&gt;Regarding the larger question of an interface I&apos;d say another ticket is in order. The existence of LNPBR is an implementation detail, but I too have found it useful.  Maybe there is a wider discussion on the usefulness of LNPBR and a sane way to expose it for tool, compiler, etc. devs?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10767" name="0001-Allow-custom-buffer-size-in-LineNumberingPushbackRea.patch" size="929" author="trptcolin" created="Wed, 11 Jan 2012 19:16:40 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-908] Functions with metadata print poorly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-908</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;1.3 removed the metadata slot on most functions, and made &lt;tt&gt;.withMeta&lt;/tt&gt; return a new wrapping function that provides metadata. This changes the way functions with metadata print: instead of &lt;tt&gt;#&amp;lt;user$eval595$fn_&lt;em&gt;596 user$eval595$fn&lt;/em&gt;_596@3d48ff04&amp;gt;&lt;/tt&gt; we now see &lt;tt&gt;#&amp;lt; clojure.lang.AFunction$1@581de498&amp;gt;&lt;/tt&gt;. I might argue that we should &quot;lie&quot; and print the class of the original wrapped function since it&apos;s more useful than AFunction$1, but that&apos;s debatable. The two things I propose changing are: &lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;When &lt;tt&gt;&amp;#42;print-meta&amp;#42;&lt;/tt&gt; is true, we should print the metadata map for functions. That nothing prints implies there is no metadata, which can make it difficult to track down bugs related to metadata on functions.&lt;/li&gt;
	&lt;li&gt;Remove the errant space at the front of the printed representation of functions with meta, changing &lt;tt&gt;#&amp;lt; clojure.lang.AFunction$1@581de498&amp;gt;&lt;/tt&gt; to &lt;tt&gt;#&amp;lt;clojure.lang.AFunction$1@581de498&amp;gt;&lt;/tt&gt;. The cause of this issue is that &lt;tt&gt;.getSimpleName&lt;/tt&gt; on an object with an anonymous class returns &lt;tt&gt;&quot;&quot;&lt;/tt&gt;, and we print that followed by a space and its &lt;tt&gt;.toString&lt;/tt&gt;. My fix is to omit the extra space if the class has no simple name; this would cause instances of other anonymous (non-function) classes to print more nicely as well.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;If it would be desirable to print the class of the original &quot;wrapped&quot; function, then I can easily add another patch for that.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15108">CLJ-908</key>
            <summary>Functions with metadata print poorly</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="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Tue, 10 Jan 2012 17:15:47 -0600</created>
                <updated>Fri, 24 May 2013 07:55:08 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:08 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="28538" author="jafingerhut" created="Sat, 19 May 2012 03:30:55 -0500"  >&lt;p&gt;clj-908-Print-metadata-and-anonymous-classes-better-patch2.txt dated May 19, 2012 only has context line changes from the previous one, 0001-Print-metadata-and-anonymous-classes-better.patch dated Jan 10, 2012.  The previous one no longer applies cleanly to the latest master, while the new one does.&lt;/p&gt;</comment>
                    <comment id="29923" author="stuart.sierra" created="Fri, 9 Nov 2012 09:21:52 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10765" name="0001-Print-metadata-and-anonymous-classes-better.patch" size="935" author="amalloy" created="Tue, 10 Jan 2012 17:15:47 -0600" />
                    <attachment id="11234" name="clj-908-Print-metadata-and-anonymous-classes-better-patch2.txt" size="922" author="jafingerhut" created="Sat, 19 May 2012 03:30:55 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-907] records do not enforce type hints</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-907</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Specify a record with a field as say ^String, but the constructor won&apos;t throw if you pass in a non-String.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15102">CLJ-907</key>
            <summary>records do not enforce type hints</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="chip">Chip Salzenberg</reporter>
                        <labels>
                    </labels>
                <created>Sun, 8 Jan 2012 01:25:39 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Tue, 27 Nov 2012 13:52:24 -0600</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27523" author="amalloy" created="Tue, 10 Jan 2012 16:59:53 -0600"  >&lt;p&gt;I doubt there&apos;s any desire to change this. Records only support typehints to enable performant storage of primitive types like ints, not to provide static typing in general. An Object is stored the same way as a String, so there&apos;s no need to pay attention to that typehint.&lt;/p&gt;

&lt;p&gt;Functions behave the same way: ((fn &lt;span class=&quot;error&quot;&gt;&amp;#91;^String x&amp;#93;&lt;/span&gt; x) :test) works just fine. Only if you use a member method of the hinted type (such as .substring in this example) is an exception thrown then the compiler casts to String in order to call the method.&lt;/p&gt;</comment>
                    <comment id="27524" author="chip" created="Tue, 10 Jan 2012 17:08:54 -0600"  >&lt;p&gt;I don&apos;t understand how you get from &quot;this is how it is&quot; to &quot;this is how it is meant to be.&quot;  The compiler can do a better job if the underlying field is properly typed: Type errors can be caught sooner, and cast operations can be omitted on use.  This is a worthy enhancement.&lt;/p&gt;</comment>
                    <comment id="30059" author="halgari" created="Tue, 27 Nov 2012 13:52:00 -0600"  >&lt;p&gt;Alan is correct, the reason type hints exist is to reduce reflection and to allow for the unboxing of primitives. String is not a primitive and therefore type-hinting it only reduces the amount of reflection performed. &lt;/p&gt;

&lt;p&gt;It has always been Rich&apos;s policy that any type systems used in Clojure should not throw compile time errors, but instead should only enhance the performance of existing code. (see the implementation of Typed Clojure for more info on this). &lt;/p&gt;

&lt;p&gt;Closing this issue, as it is by design.  &lt;/p&gt;

</comment>
                    <comment id="30060" author="halgari" created="Tue, 27 Nov 2012 13:52:24 -0600"  >&lt;p&gt;By design. &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-906] defrecord with protocol implementation fails when field and method names collide</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-906</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The following produces a NullPointerException:&lt;/p&gt;

&lt;p&gt;(defprotocol Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;))&lt;br/&gt;
(defrecord Fred []&lt;br/&gt;
  Foo&lt;br/&gt;
  (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (println &quot;done.&quot;)))&lt;br/&gt;
(defrecord Bar &lt;span class=&quot;error&quot;&gt;&amp;#91;act&amp;#93;&lt;/span&gt; ;; &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;======= Field name is the same as method name.&lt;br/&gt;
  Foo&lt;br/&gt;
  (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (act (Fred.)))) ;; &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;====== Behaves as (nil (Fred.))&lt;br/&gt;
(act (Bar. nil))&lt;/p&gt;

&lt;p&gt;Produces:&lt;br/&gt;
Exception in thread &quot;main&quot; java.lang.NullPointerException&lt;br/&gt;
 at protocol.Bar.act(protocol.clj:8)&lt;br/&gt;
 at protocol$eval66.invoke(protocol.clj:9)&lt;br/&gt;
 at clojure.lang.Compiler.eval(Compiler.java:6465)&lt;br/&gt;
 at clojure.lang.Compiler.load(Compiler.java:6902)&lt;br/&gt;
 at clojure.lang.Compiler.loadFile(Compiler.java:6863)&lt;br/&gt;
 at clojure.main$load_script.invoke(main.clj:282)&lt;br/&gt;
 at clojure.main$script_opt.invoke(main.clj:342)&lt;br/&gt;
 at clojure.main$main.doInvoke(main.clj:426)&lt;br/&gt;
 at clojure.lang.RestFn.invoke(RestFn.java:408)&lt;br/&gt;
 at clojure.lang.Var.invoke(Var.java:401)&lt;br/&gt;
 at clojure.lang.AFn.applyToHelper(AFn.java:161)&lt;br/&gt;
 at clojure.lang.Var.applyTo(Var.java:518)&lt;br/&gt;
 at clojure.main.main(main.java:37)&lt;/p&gt;

&lt;p&gt;&amp;#8211;&lt;/p&gt;

&lt;p&gt;The following works as expected:&lt;/p&gt;

&lt;p&gt;(defprotocol Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;))&lt;br/&gt;
(defrecord Fred []&lt;br/&gt;
  Foo&lt;br/&gt;
  (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (println &quot;done.&quot;)))&lt;br/&gt;
(defrecord Bar &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; ; &amp;lt;&amp;lt;== Field name is the DIFFERENT than method name&lt;br/&gt;
  Foo&lt;br/&gt;
  (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (act (Fred.))))&lt;br/&gt;
(act (Bar. &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;Produces:&lt;br/&gt;
&quot;done.&quot;&lt;/p&gt;

&lt;p&gt;&amp;#8211;&lt;/p&gt;

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

&lt;p&gt;(defprotocol Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;))&lt;br/&gt;
(defrecord Fred [])&lt;br/&gt;
(defrecord Bar &lt;span class=&quot;error&quot;&gt;&amp;#91;act&amp;#93;&lt;/span&gt;) ; &amp;lt;&amp;lt;== Field name is the same as method name&lt;br/&gt;
(extend-protocol Foo&lt;br/&gt;
  Fred&lt;br/&gt;
  (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (println &quot;done.&quot;))&lt;br/&gt;
  Bar&lt;br/&gt;
  (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (act (Fred.))))&lt;br/&gt;
(act (Bar. &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt;))&lt;/p&gt;</description>
                <environment></environment>
            <key id="15093">CLJ-906</key>
            <summary>defrecord with protocol implementation fails when field and method names collide</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bstiles">Brian Stiles</reporter>
                        <labels>
                    </labels>
                <created>Sun, 1 Jan 2012 19:30:39 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Tue, 27 Nov 2012 14:07:33 -0600</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30061" author="halgari" created="Tue, 27 Nov 2012 14:03:58 -0600"  >&lt;p&gt;The thing to remember here is that protocol functions are not (only) methods on a class, they are functions global to the namespace. So notice the subtle difference here:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defprotocol Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt;))&lt;br/&gt;
Foo&lt;br/&gt;
user=&amp;gt; (defrecord Fred &lt;span class=&quot;error&quot;&gt;&amp;#91;act&amp;#93;&lt;/span&gt; Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (act this)))&lt;br/&gt;
user.Fred&lt;br/&gt;
user=&amp;gt; (Fred. 42)&lt;br/&gt;
#user.Fred{:act 42}&lt;br/&gt;
user=&amp;gt; (act (Fred. 42))&lt;br/&gt;
ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn  user.Fred (NO_SOURCE_FILE:1)&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defrecord Fred &lt;span class=&quot;error&quot;&gt;&amp;#91;act&amp;#93;&lt;/span&gt; Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (user/act this)))&lt;br/&gt;
user.Fred&lt;br/&gt;
user=&amp;gt; (act (Fred. 42))&lt;br/&gt;
StackOverflowError   user.Fred (NO_SOURCE_FILE:1)&lt;/p&gt;

&lt;p&gt;So, it you want to access the data, you can use &quot;act&quot; directly, if you want to recursively call act (the protocol function), you can use recur, or the fully qualified name. Also, since these are records we&apos;re talking about, the following also works:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (defrecord Fred &lt;span class=&quot;error&quot;&gt;&amp;#91;act&amp;#93;&lt;/span&gt; Foo (act &lt;span class=&quot;error&quot;&gt;&amp;#91;this&amp;#93;&lt;/span&gt; (:act this)))&lt;br/&gt;
user.Fred&lt;br/&gt;
user=&amp;gt; (act (Fred. 42))&lt;br/&gt;
42&lt;/p&gt;</comment>
                    <comment id="30062" author="halgari" created="Tue, 27 Nov 2012 14:07:33 -0600"  >&lt;p&gt;Declined since this is not really a bug. There is a work-around and no obvious solution to the more general problem of defrecord name collisions. If this still bugs you, please feel free to bring it up on clojure-dev, and we&apos;ll open a new ticket once a discussion has been had. &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-905] clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-905</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.string/replace only gives special treatment to replacement string when match is a regex pattern.  clojure.string/replace-first does so in those cases, but also when match is a string to be matched literally.  For example, these cases are not consistent with each other:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (require &apos;&lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.string :as str&amp;#93;&lt;/span&gt;)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (str/replace &quot;food&quot; &quot;o&quot; &quot;$&quot;)&lt;br/&gt;
&quot;f$$d&quot;&lt;br/&gt;
user=&amp;gt; (str/replace-first &quot;food&quot; &quot;o&quot; &quot;$&quot;)&lt;br/&gt;
java.lang.StringIndexOutOfBoundsException: String index out of range: 1 (NO_SOURCE_FILE:0)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15092">CLJ-905</key>
            <summary>clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sat, 31 Dec 2011 17:02:38 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 24 Aug 2012 07:41:28 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27501" author="jafingerhut" created="Sat, 31 Dec 2011 17:04:54 -0600"  >&lt;p&gt;Suggested fix for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-905&quot; title=&quot;clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace&quot;&gt;&lt;del&gt;CLJ-905&lt;/del&gt;&lt;/a&gt;, plus addition of function clojure.string/re-qr for quoting replacement strings that caller wishes to be treated literally when match is a pattern.&lt;/p&gt;</comment>
                    <comment id="27653" author="jafingerhut" created="Sat, 4 Feb 2012 13:59:52 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-870&quot; title=&quot;clojure.string/replace behaves unexpectedly when \ or $ are part of the result string&quot;&gt;&lt;del&gt;CLJ-870&lt;/del&gt;&lt;/a&gt; has a proposed combined patch for this issue and that one.&lt;/p&gt;</comment>
                    <comment id="29224" author="jafingerhut" created="Sat, 18 Aug 2012 12:09:41 -0500"  >&lt;p&gt;This issue should now be corrected with the patch, attached to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-870&quot; title=&quot;clojure.string/replace behaves unexpectedly when \ or $ are part of the result string&quot;&gt;&lt;del&gt;CLJ-870&lt;/del&gt;&lt;/a&gt;, that was applied on Aug 18, 2012.&lt;/p&gt;</comment>
                    <comment id="29258" author="stuart.sierra" created="Fri, 24 Aug 2012 07:41:28 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-905&quot; title=&quot;clojure.string/replace-first treats \ and $ specially when match is a string, unlike clojure.string/replace&quot;&gt;&lt;del&gt;CLJ-905&lt;/del&gt;&lt;/a&gt; same status as &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-753&quot; title=&quot;clojure.string/replace-first returns nil with replacement fn when regex doesn&amp;#39;t match&quot;&gt;&lt;del&gt;CLJ-753&lt;/del&gt;&lt;/a&gt;: patch applied for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-870&quot; title=&quot;clojure.string/replace behaves unexpectedly when \ or $ are part of the result string&quot;&gt;&lt;del&gt;CLJ-870&lt;/del&gt;&lt;/a&gt; addresses this one, too, applied Aug 18, 2012 &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-904] Document *read-eval* in read, read-string</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-904</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Even though the #=() reader syntax is &quot;unofficial&quot;, &amp;#42;read-eval&amp;#42; should be documented in the appropriate API functions &amp;#8211; this is a serious security problem for anyone accepting serialized Clojure data structures. E.g., a system service reading a config file, a server accepting an API request.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15091">CLJ-904</key>
            <summary>Document *read-eval* in read, read-string</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Sat, 31 Dec 2011 09:39:50 -0600</created>
                <updated>Fri, 22 Feb 2013 09:02:45 -0600</updated>
                    <resolved>Fri, 15 Feb 2013 11:00:12 -0600</resolved>
                            <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>6</votes>
                        <watches>5</watches>
                        <comments>
                    <comment id="29936" author="timmc" created="Tue, 13 Nov 2012 18:49:33 -0600"  >&lt;p&gt;My goodness, I entirely neglected to attach a patch for this! Well, here it is, short and sweet.&lt;/p&gt;</comment>
                    <comment id="29946" author="jafingerhut" created="Wed, 14 Nov 2012 14:34:34 -0600"  >&lt;p&gt;Tim, I&apos;m pretty sure that read-line&apos;s behavior is safe regardless of the value of &lt;b&gt;read-eval&lt;/b&gt;.  It only reads characters from the stream without interpretation or evaluation, and returns them as a string.  If so, adding the warning to read-line&apos;s doc string seems wrong.&lt;/p&gt;</comment>
                    <comment id="29952" author="timmc" created="Wed, 14 Nov 2012 22:06:04 -0600"  >&lt;p&gt;Oops! Replaced the patch.&lt;/p&gt;</comment>
                    <comment id="30071" author="redinger" created="Tue, 27 Nov 2012 17:36:23 -0600"  >&lt;p&gt;Patch applies cleanly and adds a useful message.&lt;/p&gt;</comment>
                    <comment id="30512" author="steveminer@gmail.com" created="Wed, 30 Jan 2013 10:15:10 -0600"  >&lt;p&gt;See also discussion on the mailing list:  &lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/qUk-bM0JSGc&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/qUk-bM0JSGc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Several people who care about safety think that &amp;#42;read-eval* should be false by default.  Documentation does not make up for a security hole.&lt;/p&gt;</comment>
                    <comment id="30513" author="steveminer@gmail.com" created="Wed, 30 Jan 2013 10:44:00 -0600"  >&lt;p&gt;It would be useful to document the interaction between &amp;#42;print-dup* and &amp;#42;read-eval* as well.  In most cases, if you use &amp;#42;print-dup* true to preserve exact types, you&apos;ll want to bind &amp;#42;read-eval* true to read them.  Code that depends on their default values is brittle.&lt;/p&gt;</comment>
                    <comment id="30514" author="jafingerhut" created="Wed, 30 Jan 2013 10:52:24 -0600"  >&lt;p&gt;See also the newer ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-1153&quot; title=&quot;Change *read-eval* default value to false&quot;&gt;&lt;del&gt;CLJ-1153&lt;/del&gt;&lt;/a&gt;, which has a patch to change &lt;b&gt;read-eval&lt;/b&gt; default value to false.&lt;/p&gt;</comment>
                    <comment id="30560" author="jafingerhut" created="Wed, 6 Feb 2013 12:38:19 -0600"  >&lt;p&gt;With the recent changes Rich has done to add read-edn and read-edn-string, he has also updated the doc strings of read and read-string to call out the potential security dangers, emphasize that they are intended for use only in reading code and/or data from trusted sources, and to point to the safer read-edn and read-edn-string for data interchange purposes.&lt;/p&gt;

&lt;p&gt;The purpose of this ticket seems to be satisfied with those commits.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11679" name="0002-CLJ-904-Note-about-read-eval-on-docstrings-for-reade.patch" size="1097" author="timmc" created="Wed, 14 Nov 2012 22:06:04 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

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

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

<item>
            <title>[CLJ-902] doc macro broken for namespaces</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-902</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Example:&lt;/p&gt;

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

&lt;p&gt;It appears it is not safe to call resolve on a symbol representing a namespace; you get the error above. FWIW, I seem to have resolved the problem (see attached diff) by moving the find-ns clause above the resolve clause (in the cond); also the reference to namespace-doc needs to be var-quoted since namespace-doc is private. &lt;/p&gt;</description>
                <environment></environment>
            <key id="15088">CLJ-902</key>
            <summary>doc macro broken for namespaces</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Wed, 28 Dec 2011 17:35:22 -0600</created>
                <updated>Fri, 1 Mar 2013 09:49:20 -0600</updated>
                    <resolved>Sun, 12 Aug 2012 15:48:09 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27732" author="jafingerhut" created="Fri, 17 Feb 2012 00:43:30 -0600"  >&lt;p&gt;Verified there is a bug, and that this change fixes it.  New patch is in proper format, and includes a new unit test that would have caught the bug.&lt;/p&gt;</comment>
                    <comment id="29090" author="stuart.sierra" created="Wed, 8 Aug 2012 09:52:32 -0500"  >&lt;p&gt;Screened. Ready for approval.&lt;/p&gt;</comment>
                    <comment id="29117" author="stuart.sierra" created="Sun, 12 Aug 2012 15:48:10 -0500"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10916" name="clj-902-doc-on-namespaces-patch.txt" size="2028" author="jafingerhut" created="Fri, 17 Feb 2012 00:43:30 -0600" />
                    <attachment id="10755" name="repl.diff" size="595" author="glchapman" created="Wed, 28 Dec 2011 17:35:22 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-901] implementation of doc macro in core.repl incorrect for special names... add one character to fix</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-901</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In the implementation of the doc macro in core.repl, the line:&lt;br/&gt;
  (if-let [special-name (&apos;{&amp;amp; fn catch try finally try} name)]&lt;br/&gt;
contains:{&amp;amp; fn catch try finally try}  which is a hashmap.  &lt;/p&gt;

&lt;p&gt;It should be a set, and the line should read:&lt;br/&gt;
  (if-let &lt;a href=&quot;#tok1-block-tok� name)&quot;&gt;special-name (&apos;#{&amp;amp; fn catch try finally try} name)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see the bug at work:&lt;br/&gt;
user&amp;gt; (doc &amp;amp;)&lt;br/&gt;
-------------------------&lt;br/&gt;
clojure.core/fn&lt;br/&gt;
  (fn name? &lt;span class=&quot;error&quot;&gt;&amp;#91;params*&amp;#93;&lt;/span&gt; exprs*)&lt;br/&gt;
  (fn name? (&lt;span class=&quot;error&quot;&gt;&amp;#91;params*&amp;#93;&lt;/span&gt; exprs*) +)&lt;br/&gt;
Special Form&lt;br/&gt;
  params =&amp;gt; positional-params* , or positional-params* &amp;amp; next-param&lt;br/&gt;
  positional-param =&amp;gt; binding-form&lt;br/&gt;
  next-param =&amp;gt; binding-form&lt;br/&gt;
  name =&amp;gt; symbol&lt;/p&gt;

&lt;p&gt;  Defines a function&lt;/p&gt;

&lt;p&gt;  Please see &lt;a href=&quot;http://clojure.org/special_forms#fn&quot;&gt;http://clojure.org/special_forms#fn&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15086">CLJ-901</key>
            <summary>implementation of doc macro in core.repl incorrect for special names... add one character to fix</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="doeklund">Daniel Eklund</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Dec 2011 12:59:58 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Tue, 28 Feb 2012 20:04:20 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27731" author="jafingerhut" created="Fri, 17 Feb 2012 00:06:31 -0600"  >&lt;p&gt;Daniel, I&apos;m pretty sure it is intended to be a map, not a set.  The goal is to show the same documentation for try whether you ask for the documentation of try, catch, or finally.  Also, to show the documentation for fn if you ask for the documentation of &amp;amp;, since that symbol is only useful in arg lists in fn (or let).  They could have put multiple entries in special-doc-map and not had that little map inside doc, but that little map avoided the need for such duplication.&lt;/p&gt;</comment>
                    <comment id="27886" author="doeklund" created="Tue, 28 Feb 2012 19:34:41 -0600"  >&lt;p&gt;100% agree.  It was an incorrect report on my part.  Thanks for clearing it up.&lt;/p&gt;</comment>
                    <comment id="27887" author="jafingerhut" created="Tue, 28 Feb 2012 20:04:20 -0600"  >&lt;p&gt;Daniel asked me to change the state of the ticket, since he could not see how to (perhaps insufficient privileges).  Not sure if it should be marked Closed or Resolved, so I&apos;m picking Resolved.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-898] Agent sends consume heap</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-898</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Simple demonstration:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn update [state]
  (send *agent* update)
  (inc state))

(def a (agent 1))

(send a update)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

&lt;p&gt;Attached is a patch that fixes the quirk.&lt;/p&gt;</comment>
                    <comment id="27617" author="tsdh" created="Wed, 25 Jan 2012 14:25:29 -0600"  >&lt;p&gt;Here&apos;s the fix for the fix.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10749" name="0001-Only-capture-a-shallow-copy-of-the-current-Frame-in-.patch" size="1693" author="tsdh" created="Fri, 16 Dec 2011 11:46:16 -0600" />
                    <attachment id="10788" name="0002-Fix-the-already-pushed-fix-for-CLJ-898.patch" size="768" author="tsdh" created="Wed, 25 Jan 2012 14:25:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-897] deftype error message is misleading not useful</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-897</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you forget to include the argument vector for deftype, i.e.&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;When in fact the error is coming from (second-request-handler.clj:3). Can this error message be improved and give the actually location of the error?&lt;/p&gt;</description>
                <environment>OS X</environment>
            <key id="15071">CLJ-897</key>
            <summary>deftype error message is misleading not useful</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mylesmegyesi">Myles Megyesi</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Dec 2011 08:46:44 -0600</created>
                <updated>Fri, 15 Jun 2012 11:09:26 -0500</updated>
                    <resolved>Fri, 15 Jun 2012 11:09:26 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27490" author="tsdh" created="Fri, 23 Dec 2011 04:28:59 -0600"  >&lt;p&gt;The problem is that deftype and defrecord use destructuring in the argument vector, so the error pops up before the macro is actually running.&lt;/p&gt;

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

&lt;p&gt;All tests pass, and the example above now errors with &quot;AssertionError No fields vector given.&quot;&lt;/p&gt;</comment>
                    <comment id="27987" author="jafingerhut" created="Fri, 23 Mar 2012 02:40:46 -0500"  >&lt;p&gt;Changing Patch attribute to &quot;Code&quot;.&lt;/p&gt;</comment>
                    <comment id="28287" author="jafingerhut" created="Thu, 26 Apr 2012 19:29:18 -0500"  >&lt;p&gt;clj-897-deftype-error-message-is-misleading-patch.txt dated Apr 26 2012 is the same as Tassilo Horn&apos;s patch, except it is updated to apply cleanly to latest master as of today.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10753" name="0001-Fix-CLJ-897-Don-t-use-descructuring-in-defrecord-def.patch" size="1908" author="tsdh" created="Fri, 23 Dec 2011 04:28:59 -0600" />
                    <attachment id="11113" name="clj-897-deftype-error-message-is-misleading-patch.txt" size="1872" author="jafingerhut" created="Thu, 26 Apr 2012 19:29:18 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-896] Make browse-url aware of xdg-open</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-896</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.java.browse/browse-url tests to see if it&apos;s running on Mac OS to fall back to &quot;/usr/bin/open&quot; in order&lt;br/&gt;
to open a URI. On most other systems it&apos;ll just falls through to open-url-in-swing instead. The attached patch&lt;br/&gt;
tests to see if freedesktop.org&apos;s &quot;xdg-open&quot; is present in the users path. This way browse-url will launch the&lt;br/&gt;
program associated with the URI, in my case chromium.&lt;/p&gt;</description>
                <environment>All platforms that provide xdg-open (as part of freedesktop.org) benefit from this. Fix was tested on OpenBSD.</environment>
            <key id="15069">CLJ-896</key>
            <summary>Make browse-url aware of xdg-open</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="jasperla">Jasper Lievisse Adriaanse</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 Dec 2011 17:29:14 -0600</created>
                <updated>Fri, 24 May 2013 07:55:10 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:10 -0500</resolved>
                                            <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27885" author="jafingerhut" created="Tue, 28 Feb 2012 18:19:08 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-920&quot; title=&quot;Adds support for FreeDesktop&amp;#39;s xdg-open in clojure.java.browse/browse-url.&quot;&gt;&lt;del&gt;CLJ-920&lt;/del&gt;&lt;/a&gt;, if not identical, at least bears a significant resemblance to this ticket.  It would be good to see if the patch for one of them fixes both issues.&lt;/p&gt;</comment>
                    <comment id="27889" author="jafingerhut" created="Wed, 29 Feb 2012 13:18:04 -0600"  >&lt;p&gt;clj-896-browse-url-uses-xdg-open-patch2.txt is based more on the patch attached to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-920&quot; title=&quot;Adds support for FreeDesktop&amp;#39;s xdg-open in clojure.java.browse/browse-url.&quot;&gt;&lt;del&gt;CLJ-920&lt;/del&gt;&lt;/a&gt; by Jeremy Heiler than on the earlier patch attached to this ticket.  He and I have signed CAs.&lt;/p&gt;

&lt;p&gt;I think this patch improves on both of the previous patches for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-896&quot; title=&quot;Make browse-url aware of xdg-open&quot;&gt;&lt;del&gt;CLJ-896&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-920&quot; title=&quot;Adds support for FreeDesktop&amp;#39;s xdg-open in clojure.java.browse/browse-url.&quot;&gt;&lt;del&gt;CLJ-920&lt;/del&gt;&lt;/a&gt;.  In particular, Jeremy&apos;s worked fine, but it caused a long slowdown in the running of tests when building Clojure.  This one does not.&lt;/p&gt;

&lt;p&gt;Tested on:&lt;/p&gt;

&lt;p&gt;Mac OS X 10.6.8&lt;br/&gt;
Windows XP SP3, both in cmd.exe and a Cygwin bash shell&lt;br/&gt;
Ubuntu 10.04 LTS&lt;/p&gt;

&lt;p&gt;It would be great if someone could test it on a BSD system.  The only possible issue I can think of is whether the output of the &quot;which&quot; command is different there than on the Linux system I tested.&lt;/p&gt;

&lt;p&gt;If someone wants to make a patch that doesn&apos;t use &quot;which&quot;, but instead checks the PATH, I&apos;d recommend they also test on Windows in cmd.exe to make sure it works correctly there.&lt;/p&gt;</comment>
                    <comment id="29922" author="stuart.sierra" created="Fri, 9 Nov 2012 09:04:35 -0600"  >&lt;p&gt;Screened. Verified on Mac OS X.&lt;/p&gt;</comment>
                    <comment id="29925" author="jasperla" created="Fri, 9 Nov 2012 09:41:07 -0600"  >&lt;p&gt;And I&apos;ve tested it on OpenBSD.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10745" name="0001-teach-browse-url-about-xdg-open.patch" size="1948" author="jasperla" created="Tue, 13 Dec 2011 17:29:14 -0600" />
                    <attachment id="10974" name="clj-896-browse-url-uses-xdg-open-patch2.txt" size="3184" author="jafingerhut" created="Wed, 29 Feb 2012 13:18:04 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-895] Collection.toArray implementations do not conform to Java API docs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-895</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Per &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/index.html?java/util/Collections.html&quot;&gt;http://docs.oracle.com/javase/6/docs/api/index.html?java/util/Collections.html&lt;/a&gt;, Collection.toArray(T []) implements must allocate an array of type T[], not Object[]. This will cause type-casty code to break. Not often a problem in Clojure, but e.g. it makes Clojure defrecords unprintable from the JRuby console.&lt;/p&gt;

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

&lt;p&gt;This also fixes toArray(T[]) for PersistentQueue when the passed array has the same length as the queue.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15063">CLJ-895</key>
            <summary>Collection.toArray implementations do not conform to Java API docs</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sat, 10 Dec 2011 17:27:36 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:07 -0600</updated>
                    <resolved>Sun, 19 Feb 2012 20:20:56 -0600</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27451" author="stu" created="Sat, 10 Dec 2011 17:35:37 -0600"  >&lt;p&gt;Sorry about the ^M crap in the patch, feel free to humiliate me on twitter with the correct incantation to prettify patch whitespace.&lt;/p&gt;</comment>
                    <comment id="27452" author="cosmin" created="Sat, 10 Dec 2011 22:44:27 -0600"  >&lt;p&gt;I don&apos;t understand the motivation for changing toArray in PersistentList. Calling seqToPassedArray here seems to accomplish the same thing, but the way in which it does that becomes harder to follow (at least for me). I would be tempted to keep the old toArray code in PersistentList.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;                                                                                                                                                                                              
-       public Object[] toArray(Object[] objects){                                                                                                                                                          
-               if(objects.length &amp;gt; 0)                                                                                                                                                                      
-                       objects[0] = null;                                                                                                                                                                  
-               return objects;                                                                                                                                                                             
+       public Object[] toArray(Object[] a){                                                                                                                                                                
+        return RT.seqToPassedArray(seq(), a);                                                                                                                                                              
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also, in the implementation of seqToPassedArray I think the final if condition can be simplified because dest != passed only if len &amp;gt; passed.length. I think this would do.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;+        if (len &amp;lt; passed.length) {
+            dest[len] = null;
+        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;In the process discovered that the previous implementation of toArray for PersistentQueue was actually broken when the passed array had the same length as the queue because&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;if(a.length &amp;gt;= count())
    a[count()] = null;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;should have been&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;if(a.length &amp;gt; count())
    a[count()] = null;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which was the case for the other implementations. With the new shared implementation of RT.seqToPassedArray this is no longer a problem.&lt;/p&gt;</comment>
                    <comment id="27476" author="stuart.sierra" created="Fri, 16 Dec 2011 09:30:51 -0600"  >&lt;p&gt;Patch 0895-to-array-take-3.patch does not apply on 485b6fc357157458f156bbba49f8e78c10c66c31&lt;/p&gt;</comment>
                    <comment id="27481" author="cosmin" created="Fri, 16 Dec 2011 16:20:34 -0600"  >&lt;p&gt;Odd, it seems to apply cleanly for me onto 485b6fc357157458f156bbba49f8e78c10c66c31 as well as 12f07da889819bc5613546ec223e97ac27c86dbf (current HEAD).&lt;/p&gt;


&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;$ git reset --hard HEAD
HEAD is now at 485b6fc [maven-release-plugin] prepare for next development iteration
$ git checkout 485b6fc357157458f156bbba49f8e78c10c66c31
HEAD is now at 485b6fc... [maven-release-plugin] prepare for next development iteration
$ patch -p1 &amp;lt; 0895-to-array-take-3.patch 
patching file src/jvm/clojure/lang/APersistentSet.java
patching file src/jvm/clojure/lang/APersistentVector.java
patching file src/jvm/clojure/lang/ASeq.java
patching file src/jvm/clojure/lang/LazySeq.java
patching file src/jvm/clojure/lang/PersistentQueue.java
patching file src/jvm/clojure/lang/RT.java
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27646" author="cosmin" created="Fri, 3 Feb 2012 18:52:38 -0600"  >&lt;p&gt;One more shot at getting a combined patch for this issue. 0001-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-895&quot; title=&quot;Collection.toArray implementations do not conform to Java API docs&quot;&gt;&lt;del&gt;CLJ-895&lt;/del&gt;&lt;/a&gt;.-Use-RT.seqToPassedArray-to-implement-Collec.patch contains the fix as well as the tests and should apply with no problems on top of e27a27d9a6dc3fd0d15f26a5076e2876007e0ae6&lt;/p&gt;</comment>
                    <comment id="27770" author="stu" created="Sun, 19 Feb 2012 18:48:53 -0600"  >&lt;p&gt;the take 4 patch is the same as previous, merely cleaned up to apply on master&lt;/p&gt;</comment>
                    <comment id="27771" author="stu" created="Sun, 19 Feb 2012 19:17:40 -0600"  >&lt;p&gt;Aargh. One last time with correct git usage. Ignore take-4, the take-5 patch applies on master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10799" name="0001-CLJ-895.-Use-RT.seqToPassedArray-to-implement-Collec.patch" size="6277" author="cosmin" created="Fri, 3 Feb 2012 18:52:38 -0600" />
                    <attachment id="10928" name="0895-take-4.patch" size="6231" author="stu" created="Sun, 19 Feb 2012 18:48:53 -0600" />
                    <attachment id="10929" name="0895-take-5.patch" size="6225" author="stu" created="Sun, 19 Feb 2012 19:17:40 -0600" />
                    <attachment id="10738" name="0895-to-array.patch" size="7561" author="stu" created="Sat, 10 Dec 2011 17:35:37 -0600" />
                    <attachment id="10739" name="0895-to-array-take-2.patch" size="6868" author="stu" created="Sun, 11 Dec 2011 06:53:45 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-894] Better reduce performance</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-894</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently reduce is implemented in Clojure by calling seq on a collection. Construction of an entire new seq is an unnecessary and expensive operation, particularly for the key persistent collections (map, set and vector suffer - list is not a problem because it implements ISeq directly for free). &lt;/p&gt;

&lt;p&gt;This patch proposes to improve this by doing the following:&lt;br/&gt;
1. Make use of a Java interface for reducible collections (IReduce)&lt;br/&gt;
2. Make persistent collections support implementations of reduce &lt;br/&gt;
directly by implementing IReduce &lt;br/&gt;
3. Modify the internal-reduce protocol to operate on concrete &lt;br/&gt;
collections (not just seqs) and make use of IReduce implementations &lt;br/&gt;
where available &lt;br/&gt;
4. Change reduce itself to call internal-reduce directly rather than &lt;br/&gt;
calling seq first &lt;/p&gt;</description>
                <environment></environment>
            <key id="15060">CLJ-894</key>
            <summary>Better reduce performance</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="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="mikera">Mike Anderson</reporter>
                        <labels>
                    </labels>
                <created>Fri, 9 Dec 2011 03:57:26 -0600</created>
                <updated>Fri, 13 Apr 2012 08:05:24 -0500</updated>
                    <resolved>Fri, 13 Apr 2012 08:05:23 -0500</resolved>
                            <version>Backlog</version>
                                                        <due></due>
                    <votes>2</votes>
                        <watches>6</watches>
                        <comments>
                    <comment id="27429" author="mikera" created="Fri, 9 Dec 2011 03:58:45 -0600"  >&lt;p&gt;Link to initial discussion on Clojure Dev Google Group&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_frm/thread/bdab332c4e47721f?hl=en&quot;&gt;http://groups.google.com/group/clojure-dev/browse_frm/thread/bdab332c4e47721f?hl=en&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27430" author="mikera" created="Fri, 9 Dec 2011 03:59:47 -0600"  >&lt;p&gt;Link to experimental implementation on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mikera/clojure/tree/better-reduce&quot;&gt;https://github.com/mikera/clojure/tree/better-reduce&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27431" author="mikera" created="Fri, 9 Dec 2011 04:00:54 -0600"  >&lt;p&gt;Performance testing shows approx 2x speedup for relevant operations:&lt;/p&gt;

&lt;p&gt;Clojure 1.3.0 &lt;br/&gt;
(def ms (zipmap (range 100) (range 100))) &lt;br/&gt;
#&apos;user/ms &lt;br/&gt;
user=&amp;gt; (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i 10&amp;#93;&lt;/span&gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i 100000&amp;#93;&lt;/span&gt; (reduce (fn [acc [k &lt;br/&gt;
v]] (+ acc v)) 0 ms)))) &lt;br/&gt;
&quot;Elapsed time: 646.512414 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 553.264593 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 544.999672 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 510.606868 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 513.192451 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 537.665664 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 524.166514 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 512.966964 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 501.677219 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 496.379194 msecs&quot;&lt;/p&gt;

&lt;p&gt;Clojure 1.4.0-alpha2 &lt;br/&gt;
user=&amp;gt; (def ms (zipmap (range 100) (range 100))) &lt;br/&gt;
#&apos;user/ms &lt;br/&gt;
user=&amp;gt; (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i 10&amp;#93;&lt;/span&gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i 100000&amp;#93;&lt;/span&gt; (reduce (fn [acc [k &lt;br/&gt;
v]] (+ acc v)) 0 ms)))) &lt;br/&gt;
&quot;Elapsed time: 548.822683 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 469.275299 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 464.742096 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 443.500129 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 431.272138 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 430.514649 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 432.753752 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 431.195876 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 435.254274 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 433.516375 msecs&quot; &lt;/p&gt;

&lt;p&gt;Clojure 1.4.0 snapshot (with better reduce modifications) &lt;br/&gt;
(def ms (zipmap (range 100) (range 100))) &lt;br/&gt;
#&apos;user/ms &lt;br/&gt;
user=&amp;gt; (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i 10&amp;#93;&lt;/span&gt; (time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;i 100000&amp;#93;&lt;/span&gt; (reduce (fn [acc [k &lt;br/&gt;
v]] (+ acc v)) 0 ms)))) &lt;br/&gt;
&quot;Elapsed time: 202.29696 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 186.589505 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 179.691805 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 184.191644 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 183.265131 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 180.162578 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 182.323219 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 181.810649 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 182.896285 msecs&quot; &lt;br/&gt;
&quot;Elapsed time: 187.30153 msecs&quot; &lt;/p&gt;</comment>
                    <comment id="27765" author="mikera" created="Sun, 19 Feb 2012 04:03:48 -0600"  >&lt;p&gt;better_reduce branch now updated to merge in the latest changes from the clojure/clojure master branch.&lt;/p&gt;</comment>
                    <comment id="27766" author="netguy204" created="Sun, 19 Feb 2012 13:29:45 -0600"  >&lt;p&gt;Reviewers:&lt;/p&gt;

&lt;p&gt;To make this change easier to review (and for a cleaner history), I mashed all of the commits that make up this change together and rebased that onto the latest from clojure/clojure master.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/netguy204/clojure/tree/better-reduce&quot;&gt;https://github.com/netguy204/clojure/tree/better-reduce&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://github.com/netguy204/clojure/commit/b262a69c32d26bb6f3c5ba711310361d77609a22&quot;&gt;https://github.com/netguy204/clojure/commit/b262a69c32d26bb6f3c5ba711310361d77609a22&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;
</comment>
                    <comment id="27768" author="mikera" created="Sun, 19 Feb 2012 18:24:12 -0600"  >&lt;p&gt;Awesome, thanks Brian! I must admit that my git-fu is not yet good enough to do things like this, so your help is much appreciated!&lt;/p&gt;</comment>
                    <comment id="27807" author="jafingerhut" created="Thu, 23 Feb 2012 01:52:28 -0600"  >&lt;p&gt;clj-894-better-reduce-performance-patch1.txt was created from pulling Brian Taylor&apos;s Clojure github repo, creating a diff of it, applying it to latest master as of Feb 22, 2012, and making a properly formatted patch from it.  It has only a single commit, and has Mike Anderson&apos;s name and email address in it, along with a date of 4 Dec 2011, when it appears he made his final commit of this work.  It compiles and tests cleanly, and I have run Mike&apos;s timing experiments and seen similar speed improvements.&lt;/p&gt;

&lt;p&gt;No docstrings need changing that I can think of.  Mike and I have both signed CAs.  I don&apos;t see Brian Taylor&apos;s name on the list of those who signed a CA, but as long as the patch contains only code that Mike wrote, it should be clean.  Patch status is &quot;Code and Test&quot;.&lt;/p&gt;</comment>
                    <comment id="27808" author="jafingerhut" created="Thu, 23 Feb 2012 02:00:08 -0600"  >&lt;p&gt;Correcting Mike&apos;s name and email address in patch.&lt;/p&gt;</comment>
                    <comment id="27812" author="netguy204" created="Thu, 23 Feb 2012 05:08:32 -0600"  >&lt;p&gt;The patch contains only code that Mike wrote.&lt;/p&gt;</comment>
                    <comment id="27813" author="mikera" created="Thu, 23 Feb 2012 07:32:07 -0600"  >&lt;p&gt;Thanks guys I&apos;ve reviewed the patch and can confirm that it looks like exactly the changes I intended to make. I am happy for them to be committed as per my signed CA.&lt;/p&gt;</comment>
                    <comment id="28129" author="richhickey" created="Fri, 13 Apr 2012 08:05:23 -0500"  >&lt;p&gt;Similar objective now achieved via a protocol:&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/clojure/commit/1f90942690d5395330347cb31fdb3d69cea1ec56&quot;&gt;https://github.com/clojure/clojure/commit/1f90942690d5395330347cb31fdb3d69cea1ec56&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10942" name="clj-894-better-reduce-performance-patch2.txt" size="17763" author="jafingerhut" created="Thu, 23 Feb 2012 02:00:08 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

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

<item>
            <title>[CLJ-893] crafted `vec&apos; call allows created vector to be mutated</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-893</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user&amp;gt; (let [a (to-array (repeat 31 0)), v (vec a)]
        [(v 2) (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (aset a 2 &apos;no) (v 2))])
[0 no]
user&amp;gt; (let [a (to-array (repeat 33 0)), v (vec a)]
        [(v 2) (&lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; (aset a 2 &apos;no) (v 2))])
[0 0]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

&lt;p&gt;With this patch the doc string would be:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Creates a &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; vector containing the contents of coll. Java arrays
will be aliased and should not be modified.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="28266" author="jafingerhut" created="Tue, 24 Apr 2012 19:42:06 -0500"  >&lt;p&gt;Removed non-preferred patch clj-893-doc-vec-aliases-java-array-patch2.txt of Mar 26, 2012.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11084" name="clj-893-doc-vec-aliases-java-array-patch3.txt" size="836" author="brentonashworth" created="Sat, 21 Apr 2012 16:08:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

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

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

&lt;p&gt;For performance, I prefer the current behavior, so another possibility is a clarifying doc string.&lt;/p&gt;</comment>
                    <comment id="28016" author="jafingerhut" created="Mon, 26 Mar 2012 17:32:41 -0500"  >&lt;p&gt;clj-892-clarify-sort-sort-by-doc-strings-patch1.txt of Mar 26, 2012 applies cleanly to latest master on that date.  Only doc string changes, to make it clear that by sort and sort-by will modify Java arrays given as arguments.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11012" name="clj-892-clarify-sort-sort-by-doc-strings-patch1.txt" size="1409" author="jafingerhut" created="Mon, 26 Mar 2012 17:32:41 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-890] Tagged literals in reader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-890</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/display/design/Tagged+Literals&quot;&gt;http://dev.clojure.org/display/design/Tagged+Literals&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15045">CLJ-890</key>
            <summary>Tagged literals in reader</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 2 Dec 2011 17:15:43 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:02 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:12:01 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27411" author="stuart.sierra" created="Fri, 2 Dec 2011 17:32:48 -0600"  >&lt;p&gt;Rough draft in &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-890&quot; title=&quot;Tagged literals in reader&quot;&gt;&lt;del&gt;CLJ-890&lt;/del&gt;&lt;/a&gt;-001.patch:&lt;/p&gt;

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

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

&lt;p&gt;When reading a tagged literal, if the tag is &lt;b&gt;not&lt;/b&gt; defined in &lt;tt&gt;&amp;#42;data-readers&amp;#42;&lt;/tt&gt; it is added as &lt;tt&gt;:data&lt;/tt&gt; metadata on the following form. If the following form does not support metadata, the tag is ignored. This causes a problem when an undefined tag is used in source code, because the compiler tries to evaluate it:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; #foo.bar/bar {:a 1}
CompilerException java.lang.RuntimeException: No such &lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;: foo.bar/bar, compiling:(NO_SOURCE_PATH:0) 
user=&amp;gt; (quote #foo.bar/bar {:a 1})
{:a 1}
user=&amp;gt; (meta *1)
{:data foo.bar/bar}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27445" author="stuart.sierra" created="Fri, 9 Dec 2011 15:08:23 -0600"  >&lt;p&gt;New file &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-890&quot; title=&quot;Tagged literals in reader&quot;&gt;&lt;del&gt;CLJ-890&lt;/del&gt;&lt;/a&gt;-002.patch:&lt;/p&gt;

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

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

&lt;p&gt;This would allow consumers of the reader to supply their own implementations for any basic data structure. Not that anyone is likely to have a &lt;b&gt;better&lt;/b&gt; map/set/etc, but I could see it being useful for using a different RegExp engine or something like that. The primary use case I have in mind, however, is the ClojureScript compiler. The compiler needs to know the &lt;b&gt;order&lt;/b&gt; of the key-value-pairs in a map or the elements in a set. See &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-288&quot; title=&quot;Compilation of unordered collections &quot;&gt;CLJS-288&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10731" name="CLJ-890-001.patch" size="4945" author="stuart.sierra" created="Fri, 2 Dec 2011 17:32:48 -0600" />
                    <attachment id="10737" name="CLJ-890-002.patch" size="6626" author="stuart.sierra" created="Fri, 9 Dec 2011 15:08:23 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

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

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

<item>
            <title>[CLJ-886] java.io/do-copy can garble multibyte characters</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-886</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See comments in fix:&lt;/p&gt;

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

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

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

<item>
            <title>[CLJ-885] clojure.java.io/Coercions doesn&apos;t handle URL-escaping</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-885</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.java.io/Coercions implementations for URL -&amp;gt; File and File -&amp;gt; URL don&apos;t take URL escaping into account, and I think they should.&lt;/p&gt;

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

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

&lt;p&gt;I will post a link to the clojure-dev list discussion in the comments once I have the link for this ticket to post there.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15032">CLJ-885</key>
            <summary>clojure.java.io/Coercions doesn&apos;t handle URL-escaping</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Sun, 27 Nov 2011 22:21:02 -0600</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27351" author="trptcolin" created="Sun, 27 Nov 2011 22:37:48 -0600"  >&lt;p&gt;clojure-dev posting with more details (and presumably forthcoming discussion): &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/bTNX4pt_b4w/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/bTNX4pt_b4w/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27375" author="trptcolin" created="Wed, 30 Nov 2011 12:31:30 -0600"  >&lt;p&gt;Updated patch to fix the issue David Powell brought up on the dev list, so that &quot;+&quot; in a URL does not get translated to &quot; &quot; in a File.&lt;/p&gt;</comment>
                    <comment id="27377" author="stuart.sierra" created="Wed, 30 Nov 2011 14:04:46 -0600"  >&lt;p&gt;Vetted &amp;amp; assigned to &quot;Approved Backlog&quot; in preparation for next release.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10719" name="0001-Handle-URL-escaping-in-both-directions-in-java.io-Co.patch" size="5157" author="trptcolin" created="Sun, 27 Nov 2011 22:21:02 -0600" />
                    <attachment id="10726" name="0002-Handle-URL-escaping-in-both-directions-in-java.io-Co.patch" size="3224" author="trptcolin" created="Wed, 30 Nov 2011 12:31:30 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-883] Clojure head holding bug 				</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-883</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve a head holding problem that I believe is a bug in clojure 1.3.  I&lt;br/&gt;
wrote the following function to split a a lazy seq of strings across&lt;br/&gt;
files of x size:&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 split-file
 ([path strs size]
    (trampoline split-file path (seq strs) size 0))
 ([path strs size part]
    (with-open [f (clojure.java.io/writer (str path &quot;.&quot; part))]
      (loop [written 0, ss strs]
        (when ss
          (if (&amp;gt;= written size)
            #(split-file path ss size (inc part))
            (let [s (first ss)]
              (.write f s)
              (recur (+ written (.length s)) (next ss)))))))))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If I call the 3 arg version of the function:&lt;br/&gt;
(split-file &quot;foo&quot; (repeat 100000000 &quot;blah blah blah&quot;) 100000000)&lt;/p&gt;

&lt;p&gt;I see memory usage increases as I&apos;m writing each file with the usual&lt;br/&gt;
gc slow down, then memory usage goes back down again as I get to a new&lt;br/&gt;
split file.&lt;/p&gt;

&lt;p&gt;Memory usage is fine if I call the 4 arg version (which only writes&lt;br/&gt;
one part of the split file):&lt;br/&gt;
(split-file &quot;foo&quot; (repeat 100000000 &quot;blah blah blah&quot;) 100000000 0)&lt;/p&gt;

&lt;p&gt;I can also avoid the head holding problem by removing trampoline and&lt;br/&gt;
recursively calling split-file directly, but then those recursive&lt;br/&gt;
calls use up stack and don&apos;t close files until all calls complete&lt;/p&gt;</description>
                <environment>java 6 jdk on linux, jre 6 on windows 7</environment>
            <key id="15030">CLJ-883</key>
            <summary>Clojure head holding bug 				</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="gerrard.mcnulty@gmail.com">Gerrard McNulty</reporter>
                        <labels>
                    </labels>
                <created>Sun, 27 Nov 2011 05:53:11 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Tue, 27 Nov 2012 14:29:16 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27575" author="a_strange_guy" created="Mon, 16 Jan 2012 04:15:37 -0600"  >&lt;p&gt;There is actually no problem with head retention in your code.&lt;br/&gt;
It&apos;s zust the garbage collector that doesn&apos;t collect the seq right away. If there were problems, then you would get a OutOfMemoryError pretty fast.&lt;/p&gt;

&lt;p&gt;compare&lt;br/&gt;
(split-file &quot;foo&quot; (repeat 100000000 &quot;blah blah blah&quot;) 100000000 0)&lt;br/&gt;
with&lt;br/&gt;
(doall (repeat 100000000 &quot;blah blah blah&quot;))&lt;br/&gt;
to see the difference&lt;/p&gt;</comment>
                    <comment id="30064" author="halgari" created="Tue, 27 Nov 2012 14:29:03 -0600"  >&lt;p&gt;Closing due to lack of reproducible tests. On my system I actually saw memory usage not move at all when I ran the demo code, and at one point the GC kicked in and the memory usage went down a bit. &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-882] non-dynamic earmuff var warning would be better with file name and line number</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-882</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If a var name looks like it&apos;s meant to be dynamic but isn&apos;t declared so, Clojure 1.3 generates this warning:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Warning: *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. 
Please either indicate ^:dynamic *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* or change the name.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;When porting a project to Clojure 1.3, one of the project&apos;s dependencies may cause the warning, in which case it can be difficult to tell which.  The code causing the warning may only exist inside a .jar and possibly only in a .class file inside that.  This means significant work is required even to know which project needs to be told their code doesn&apos;t work on Clojure 1.3.&lt;/p&gt;

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

&lt;p&gt;I suggest just adding these to the end so that the warning would look like:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Warning: *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. 
Please either indicate ^:dynamic *some-&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;* or change the name. (out/of-date/code.clj:210)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15026">CLJ-882</key>
            <summary>non-dynamic earmuff var warning would be better with file name and line number</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="chouser@n01se.net">Chouser</assignee>
                                <reporter username="chouser@n01se.net">Chouser</reporter>
                        <labels>
                    </labels>
                <created>Tue, 22 Nov 2011 20:00:13 -0600</created>
                <updated>Fri, 2 Dec 2011 09:03:00 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:03:00 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27376" author="chouser@n01se.net" created="Wed, 30 Nov 2011 12:54:02 -0600"  >&lt;p&gt;Attach tiny patch to add filename and line number to warning about def of non-dynamic var with *&apos;s in the name (earmuffs)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10727" name="0001-Add-file-and-line-number-to-earmuff-warning.-CLJ-882.patch" size="1334" author="chouser@n01se.net" created="Wed, 30 Nov 2011 12:54:02 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-881] Problem with the &quot;cl-format&quot; function from the clojure.pprint</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-881</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Let&apos;s see the following scenario:&lt;/p&gt;

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

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


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

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

&lt;p&gt;See patch with tests and my suggestion for solving this problem.&lt;/p&gt;</description>
                <environment>Linux 2.6.31-22-generic #61-Ubuntu SMP Wed Jul 28 01:57:06 UTC 2010 i686 GNU/Linux</environment>
            <key id="15020">CLJ-881</key>
            <summary>Problem with the &quot;cl-format&quot; function from the clojure.pprint</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="vdim">Vyacheslav Dimitrov</reporter>
                        <labels>
                    </labels>
                <created>Sun, 20 Nov 2011 02:47:16 -0600</created>
                <updated>Fri, 18 May 2012 20:37:04 -0500</updated>
                    <resolved>Fri, 18 May 2012 20:37:04 -0500</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27313" author="vdim" created="Sun, 20 Nov 2011 02:49:03 -0600"  >&lt;p&gt;Also I can create pull request if any.&lt;/p&gt;</comment>
                    <comment id="27706" author="jafingerhut" created="Sun, 12 Feb 2012 02:29:18 -0600"  >&lt;p&gt;I&apos;ve modified Vyacheslav&apos;s patch so that it is in the proper format.  I also changed his implementation of function inc-s so that it should allocate a bit less memory, and removed an addition of a redundant test case that is in his patch.  There is a bug he has found here, and I&apos;ve verified that this patch fixes it.&lt;/p&gt;</comment>
                    <comment id="28014" author="jafingerhut" created="Mon, 26 Mar 2012 17:04:41 -0500"  >&lt;p&gt;clj-881-cl-format-exception-patch2.txt Mar 26, 2012 applies cleanly to latest master, and fixes the problem in the same way as my Feb 12, 2012 patch (since deleted to avoid confusion).  I am the author, and have signed a CA.&lt;/p&gt;</comment>
                    <comment id="28053" author="tomfaulhaber" created="Thu, 29 Mar 2012 20:15:36 -0500"  >&lt;p&gt;This patch looks good to me. I recommend we apply it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11010" name="clj-881-cl-format-exception-patch2.txt" size="3112" author="jafingerhut" created="Mon, 26 Mar 2012 17:04:41 -0500" />
                    <attachment id="10710" name="patchfile" size="2743" author="vdim" created="Sun, 20 Nov 2011 02:47:16 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-879] Allow :require to support a :refer clause</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-879</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There&apos;s been discussion previously about the complexity of the ns&lt;br/&gt;
macro. In particular the fact that :use causes all vars to be referred&lt;br/&gt;
by default is widely seen as unfortunate, and the distinction between&lt;br/&gt;
use and require is a source of conceptual overhead for people new to&lt;br/&gt;
the language.&lt;/p&gt;

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

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

&lt;p&gt;there is a warning when you run the tests though:&lt;/p&gt;

&lt;p&gt;     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Testing clojure.test-clojure.keywords&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; &lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Testing clojure.test-clojure.load&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; WARNING: with-bindings already refers to: #&apos;clojure.core/with-bindings in namespace: clojure.test-clojure.require-scratch, being replaced by: #&apos;clojure.main/with-bindings&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; &lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Testing clojure.test-clojure.logic&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; &lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; Testing clojure.test-clojure.macros&lt;/p&gt;</comment>
                    <comment id="27743" author="stuart.sierra" created="Fri, 17 Feb 2012 13:36:58 -0600"  >&lt;p&gt;Vetted. Patch is good, although it needs docstring updates in &apos;require&apos;&lt;/p&gt;</comment>
                    <comment id="27745" author="stuart.sierra" created="Fri, 17 Feb 2012 13:55:39 -0600"  >&lt;p&gt;Not Vetted. I can&apos;t remember what the names mean. Ready for Rich. That&apos;s &quot;Test&quot; right?&lt;/p&gt;</comment>
                    <comment id="27747" author="stuart.sierra" created="Fri, 17 Feb 2012 13:59:22 -0600"  >&lt;p&gt;My mistake. The docstring is included in &apos;require&apos;, but not in &apos;refer&apos;, which also changed. But the &lt;b&gt;public API&lt;/b&gt; of &apos;refer&apos; did not change. So this patch is good.&lt;/p&gt;</comment>
                    <comment id="27748" author="stuart.sierra" created="Fri, 17 Feb 2012 14:08:55 -0600"  >&lt;p&gt;Not &quot;Test.&quot; Screened. The patch is Screened. I hate this.&lt;/p&gt;</comment>
                    <comment id="27751" author="stuart.sierra" created="Fri, 17 Feb 2012 14:18:28 -0600"  >&lt;p&gt;Patch applied.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10716" name="0001-Allow-require-to-take-a-refer-option.patch" size="3422" author="technomancy" created="Fri, 25 Nov 2011 14:52:12 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-877] contains? is broken for vectors</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-877</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;contains? returns the wrong result for the last item in a vector:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (map #(contains? &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3 4&amp;#93;&lt;/span&gt; %) &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3 4&amp;#93;&lt;/span&gt;)&lt;br/&gt;
(true true true false)&lt;/p&gt;</description>
                <environment>OSX Lion</environment>
            <key id="15008">CLJ-877</key>
            <summary>contains? is broken for vectors</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="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jpalmucci">Jeff Palmucci</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Nov 2011 12:23:07 -0600</created>
                <updated>Mon, 14 Nov 2011 12:45:35 -0600</updated>
                    <resolved>Mon, 14 Nov 2011 12:42:00 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27296" author="steveminer@gmail.com" created="Mon, 14 Nov 2011 12:41:18 -0600"  >&lt;p&gt;This is not a bug.  Check the doc &amp;#8211; contains? refers to the keys of the collection, not the values.  For a vector, the &quot;keys&quot; are the indices.  &lt;/p&gt;

&lt;p&gt;user=&amp;gt;  (map #(contains? &lt;span class=&quot;error&quot;&gt;&amp;#91;10 20 30 40&amp;#93;&lt;/span&gt; %) (range 4))&lt;br/&gt;
(true true true true)&lt;/p&gt;</comment>
                    <comment id="27297" author="bsmith.occs@gmail.com" created="Mon, 14 Nov 2011 12:45:35 -0600"  >&lt;p&gt;This is a (common) misusing of &lt;tt&gt;contains?&lt;/tt&gt;. Perhaps it would have been better if &lt;tt&gt;contains?&lt;/tt&gt; had been named &lt;tt&gt;contains-key?&lt;/tt&gt;, but that ship has sailed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Usage: (contains? coll key)&lt;/p&gt;

&lt;p&gt;Returns true if key is present in the given collection, otherwise returns false.  Note that for numerically indexed collections like vectors and Java arrays, this tests if the numeric key is within the range of indexes. &apos;contains?&apos; operates constant or logarithmic time; it will not perform a linear search for a value.  See also &apos;some&apos;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;A vector of length 4 has four keys (indexes): 0, 1, 2, 3, which is why your example is returning (true true true false).&lt;/p&gt;

&lt;p&gt;To get the behavior your are expecting from &lt;tt&gt;contains?&lt;/tt&gt;, use &lt;tt&gt;some&lt;/tt&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Usage: (some pred coll)&lt;/p&gt;

&lt;p&gt;Returns the first logical true value of (pred x) for any x in coll, else nil.  One common idiom is to use a set as pred, for example this will return :fred if :fred is in the sequence, otherwise nil: (some #{:fred} coll)&lt;/p&gt;&lt;/blockquote&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; (map #(some #{%} [1 2 3 4]) [1 2 3 4])
(1 2 3 4) ; all of which are truthy
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you prefer booleans, you could do something like 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;user&amp;gt; (map (comp boolean #(some #{%} [1 2 3 4])) [1 2 3 4])
(true true true true)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-876] #^:dynamic vars declared in a nested form are not immediately dynamic</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-876</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/890202da5db0fe1/e34819de71c6ea24?hl=en&amp;amp;lnk=gst&amp;amp;q=micah#e34819de71c6ea24&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/890202da5db0fe1/e34819de71c6ea24?hl=en&amp;amp;lnk=gst&amp;amp;q=micah#e34819de71c6ea24&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;(list&lt;br/&gt;
  (declare ^:dynamic p)&lt;br/&gt;
  (defn q [] @p))&lt;br/&gt;
(binding &lt;span class=&quot;error&quot;&gt;&amp;#91;p (atom 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (q))&lt;/p&gt;</description>
                <environment>All</environment>
            <key id="15007">CLJ-876</key>
            <summary>#^:dynamic vars declared in a nested form are not immediately dynamic</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="slagyr">Micah Martin</assignee>
                                <reporter username="slagyr">Micah Martin</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Nov 2011 09:55:19 -0600</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27293" author="slagyr" created="Mon, 14 Nov 2011 10:10:07 -0600"  >&lt;p&gt;Rich fixed: &lt;a href=&quot;https://github.com/clojure/clojure/commit/535907eb2be47eaee0c385ae16436f39d52ffa96&quot;&gt;https://github.com/clojure/clojure/commit/535907eb2be47eaee0c385ae16436f39d52ffa96&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27406" author="stu" created="Fri, 2 Dec 2011 14:01:18 -0600"  >&lt;p&gt;test for fix already made&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10704" name="micah_testing_876.diff" size="1351" author="slagyr" created="Mon, 14 Nov 2011 10:10:07 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-875] Clojure&apos;s seq, keys, and vals can produce inconsistent values on strange iterators (e.g., IdentityHashMap)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-875</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user&amp;gt; &lt;b&gt;clojure-version&lt;/b&gt; &lt;br/&gt;
{:major 1, :minor 4, :incremental 0, :qualifier &quot;alpha1&quot;} &lt;br/&gt;
user&amp;gt; (def x (keys (java.util.IdentityHashMap. {:a true :b true}))) &lt;br/&gt;
#&apos;user/x &lt;br/&gt;
user&amp;gt; x &lt;br/&gt;
(:b :a) &lt;br/&gt;
user&amp;gt; x &lt;br/&gt;
(:a :a) &lt;/p&gt;

&lt;p&gt;As discussed on the mailing list, it&apos;s not clear exactly whose fault this is:&lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/group/clojure-dev/browse_frm/thread/bed458abf8e266aa#&quot;&gt;https://groups.google.com/group/clojure-dev/browse_frm/thread/bed458abf8e266aa#&lt;/a&gt;&lt;br/&gt;
given that the javadocs for iterators and entrySet dont&apos; seem to require (or mention at all) whether each .next() must return a unique value.&lt;/p&gt;

&lt;p&gt;keys and vals could be fixed by using keySet and values rather than entrySet, at least in this case, but this would not help for seq.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15002">CLJ-875</key>
            <summary>Clojure&apos;s seq, keys, and vals can produce inconsistent values on strange iterators (e.g., IdentityHashMap)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Nov 2011 15:06:44 -0600</created>
                <updated>Fri, 2 Dec 2011 09:28:16 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:28:16 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27393" author="stu" created="Fri, 2 Dec 2011 09:28:16 -0600"  >&lt;p&gt;The powers that be acknowledge that this is Java&apos;s fault: &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6312706&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6312706&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-874] defrecord factory inaccessibly from within type implementation</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-874</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Discovered this issue working through &lt;a href=&quot;https://github.com/relevance/labrepl&quot;&gt;https://github.com/relevance/labrepl&lt;/a&gt; when trying to use the new factory sytax for records:&lt;/p&gt;

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

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

&lt;p&gt;Notice that Mean returns a new instance with a different strategy.  However, the factory methods are not defined until after the record has been created thus this results in a syntax error.  To fix this I updated the macro to declare the factory methods before the record is emitted.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15001">CLJ-874</key>
            <summary>defrecord factory inaccessibly from within type implementation</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="kurtharriger">Kurt Harriger</reporter>
                        <labels>
                        <label>Compiler</label>
                    </labels>
                <created>Fri, 11 Nov 2011 11:31:52 -0600</created>
                <updated>Fri, 2 Dec 2011 09:03:00 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:03:00 -0600</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>4</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27275" author="kurtharriger" created="Fri, 11 Nov 2011 11:33:20 -0600"  >&lt;p&gt;On github: &lt;a href=&quot;https://github.com/kurtharriger/clojure/tree/fix-defrecord&quot;&gt;https://github.com/kurtharriger/clojure/tree/fix-defrecord&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27336" author="hiredman" created="Mon, 21 Nov 2011 13:19:41 -0600"  >&lt;p&gt;looks good to me&lt;/p&gt;</comment>
                    <comment id="27348" author="aaron" created="Sat, 26 Nov 2011 11:58:45 -0600"  >&lt;p&gt;Screened against e58a87fac72ed4b84a1d92f1e455b92d7ed3ef39&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10693" name="defrecord-patch.diff" size="927" author="kurtharriger" created="Fri, 11 Nov 2011 11:31:52 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-873] Allow the function / to be referred to in namespaces other than clojure.core</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-873</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The attached patch gives the programmer the option of referring to the division function in namespaces other than just clojure.core.  For example,&lt;/p&gt;

&lt;p&gt;(ns foo&lt;br/&gt;
  (:require &lt;span class=&quot;error&quot;&gt;&amp;#91;cljs.core :as core&amp;#93;&lt;/span&gt;))&lt;br/&gt;
(apply core// &apos;(1 2 3))&lt;/p&gt;

&lt;p&gt;The above lines do not compile without this patch.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15000">CLJ-873</key>
            <summary>Allow the function / to be referred to in namespaces other than clojure.core</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="chrismgray">Chris Gray</reporter>
                        <labels>
                    </labels>
                <created>Thu, 10 Nov 2011 09:48:56 -0600</created>
                <updated>Fri, 24 May 2013 08:39:11 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:08 -0500</resolved>
                            <version>Release 1.1</version>
                <version>Release 1.2</version>
                <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>7</votes>
                        <watches>6</watches>
                        <comments>
                    <comment id="27274" author="chrismgray" created="Thu, 10 Nov 2011 09:50:19 -0600"  >&lt;p&gt;I have signed the CA and it is in the mail. &lt;/p&gt;</comment>
                    <comment id="27329" author="chrismgray" created="Sun, 20 Nov 2011 18:21:20 -0600"  >&lt;p&gt;My CA has now been applied.  This patch is quite simple &amp;#8211; can someone have a look at it please?&lt;/p&gt;</comment>
                    <comment id="27437" author="alexmiller" created="Fri, 9 Dec 2011 09:34:21 -0600"  >&lt;p&gt;FYI, I have run into this in actual code as well (implementing a query language function library).  &lt;/p&gt;</comment>
                    <comment id="27863" author="jafingerhut" created="Fri, 24 Feb 2012 20:00:48 -0600"  >&lt;p&gt;clj-873-namespace-divides-patch.txt is same as Chris&apos;s, just updated to apply cleanly to latest master as of Feb 24, 2012.&lt;/p&gt;

&lt;p&gt;The test he added does fail without the code fix, and passes with it.  He is now on the list of contributors.&lt;/p&gt;</comment>
                    <comment id="28059" author="chrismgray" created="Fri, 30 Mar 2012 13:11:39 -0500"  >&lt;p&gt;A short further discussion of this patch appeared here: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/f095980802a82747/b723726c77c1ec64&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/f095980802a82747/b723726c77c1ec64&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, I assume this bug is what is referred to in Clojurescript&apos;s core.cljs, where it says &quot;;; FIXME: waiting on cljs.core//&quot;&lt;/p&gt;</comment>
                    <comment id="29768" author="stu" created="Mon, 22 Oct 2012 19:12:55 -0500"  >&lt;p&gt;Thanks all. It is nice to have supporting real-world stories such as Alex&apos;s in the comments.&lt;/p&gt;</comment>
                    <comment id="29769" author="jafingerhut" created="Mon, 22 Oct 2012 19:19:21 -0500"  >&lt;p&gt;I should have added a comment here a while back if it would have helped, but David Nolen&apos;s &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-930&quot; title=&quot;cljs.core// does not work in ClojureScript&quot;&gt;&lt;del&gt;CLJ-930&lt;/del&gt;&lt;/a&gt; was closed as a duplicate of this one.&lt;/p&gt;</comment>
                    <comment id="30347" author="bbloom" created="Wed, 2 Jan 2013 00:49:35 -0600"  >&lt;p&gt;This also affects a two of my libraries: 1) CSS generation library I&apos;m working on, which wants to be able to do division with pixels and other units. 2) Factjor which defines binary math operators against a stack.&lt;/p&gt;</comment>
                    <comment id="31138" author="bronsa" created="Fri, 24 May 2013 08:39:11 -0500"  >&lt;p&gt;clojure.lang.EdnReader should get patched aswell.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10964" name="clj-873-namespace-divides-patch.txt" size="2665" author="jafingerhut" created="Fri, 24 Feb 2012 20:00:48 -0600" />
                    <attachment id="10692" name="namespace-divides.diff" size="2810" author="chrismgray" created="Thu, 10 Nov 2011 09:48:56 -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-872] Add support for property lookup</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-872</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Add support for property lookups to match functionality introduced in ClojureScript with &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-89&quot; title=&quot;Simplify the dot access special form.&quot;&gt;&lt;del&gt;CLJS-89&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

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

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

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

<item>
            <title>[CLJ-871] instant literal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-871</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/pages/viewpage.action?pageId=950382&quot;&gt;http://dev.clojure.org/pages/viewpage.action?pageId=950382&lt;/a&gt; for design discussion.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14915">CLJ-871</key>
            <summary>instant literal</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Nov 2011 12:48:37 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:05:21 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27195" author="stu" created="Fri, 4 Nov 2011 12:59:21 -0500"  >&lt;p&gt;I have tested patch locally with no Joda, 1.6.2 Joda, and 2.0 Joda. All work as intended in simple invocations.&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

&lt;hr /&gt;

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

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

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

&lt;p&gt;Cons: Clojure 1.2 used the &lt;tt&gt;#:&lt;/tt&gt; syntax to print records.&lt;/p&gt;</comment>
                    <comment id="27596" author="fogus" created="Sat, 21 Jan 2012 09:11:54 -0600"  >&lt;p&gt;Oddly, I made another case for this.  My bad.  Attached is the updated patch based off of Ben&apos;s work.  This patch is merged into the tagged literal feature as implemented in v1.4-alpha4.  I also fixed a fence-post error and very minor doc problems.  The parser currently defaults to constructing j.u.Date instances of the following form:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;date-year   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                         ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
                         ; rules
time-secfrac    = &apos;.&apos; 1*DIGIT
time-numoffset  = (&apos;+&apos; / &apos;-&apos;) time-hour &apos;:&apos; time-minute
time-offset     = &apos;Z&apos; / time-numoffset

time-part            = time-hour [ &apos;:&apos; time-minute [ &apos;:&apos; time-second [time-secfrac] [time-offset] ] ]

timestamp       = date-year [ &apos;-&apos; date-month [ &apos;-&apos; date-mday [ &apos;T&apos; time-part ] ] ]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

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

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

&lt;p&gt;Since this behavior isn&apos;t documented it can lead to confusing errors, for example (made up semi real world example to explain the issue):&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(clojure.string/replace &quot;c:/windows/&quot; #&quot;/&quot; &quot;\\&quot;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(println (str &quot;\&quot;&quot; (clojure.string/replace &quot;my string with \\ and \&quot; in it&quot; #&quot;[\&quot;\\]&quot; (fn [x] (str &quot;\\&quot; x))) &quot;\&quot;&quot;))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 

&lt;p&gt;The expected result would be:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;&quot;my string with \\ and \&quot; in it&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 
&lt;p&gt;the actual result is:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;&quot;my string with \ and &quot; in it&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

</description>
                <environment>HW/OS/SW indipendant - issue is part of java interface</environment>
            <key id="14913">CLJ-870</key>
            <summary>clojure.string/replace behaves unexpectedly when \ or $ are part of the result string</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="licenser">Heinz N. Gies</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Nov 2011 05:28:31 -0500</created>
                <updated>Sat, 18 Aug 2012 07:50:41 -0500</updated>
                    <resolved>Sat, 18 Aug 2012 07:50:41 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="27192" author="licenser" created="Fri, 4 Nov 2011 05:31:57 -0500"  >&lt;p&gt;A working code for the replace example is: &lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(println (str &quot;\&quot;&quot; (clojure.string/replace &quot;my string with \\ and \&quot; in it&quot; #&quot;[\&quot;\\]&quot; (fn [x] (str  &quot;\\\\&quot;  (if (= x &quot;\\&quot;) &quot;\\&quot;) x))) &quot;\&quot;&quot;))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

&lt;p&gt;This is how these functions were originally written back in the days of clojure.contrib.str-utils. This would be a minor breaking change.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10760" name="0001-Add-tests-for-870.patch" size="964" author="amalloy" created="Thu, 5 Jan 2012 20:53:14 -0600" />
                    <attachment id="10761" name="0002-Fix-870-by-using-quoteReplacement.patch" size="1205" author="amalloy" created="Thu, 5 Jan 2012 20:53:14 -0600" />
                    <attachment id="10971" name="CLJ-753-870-905-combined-fix3.patch" size="8936" author="jafingerhut" created="Tue, 28 Feb 2012 12:38:29 -0600" />
                    <attachment id="10972" name="CLJ-753-870-905-combined-fix3.readme.txt" size="3571" author="jafingerhut" created="Tue, 28 Feb 2012 12:38:29 -0600" />
                    <attachment id="11434" name="clj-753-870-905-combined-fix4.patch" size="9071" author="jafingerhut" created="Wed, 15 Aug 2012 11:19:59 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-869] Macro auto-gensym in let not visible after a nested unquote/syntax-quote</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-869</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See the following simplified example:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (defmacro foo [flag]
        `(let [a# 1]
          ~(if flag
             `(println a#))))
#&apos;user/foo
user=&amp;gt; (foo false)
nil
user=&amp;gt; (foo true)
java.lang.Exception: Unable to resolve symbol: a__574__auto__ in this context (NO_SOURCE_FILE:6)
user=&amp;gt; (macroexpand-1 &apos;(foo true))
(clojure.core/let [a__575__auto__ 1] (clojure.core/println a__574__auto__))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14912">CLJ-869</key>
            <summary>Macro auto-gensym in let not visible after a nested unquote/syntax-quote</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Thu, 3 Nov 2011 22:19:31 -0500</created>
                <updated>Fri, 2 Dec 2011 10:42:59 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 10:42:59 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27396" author="richhickey" created="Fri, 2 Dec 2011 10:42:59 -0600"  >&lt;p&gt;This is not a bug&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-868] core min and max should behave predictably when args include NaN</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-868</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;min&lt;/tt&gt; and &lt;tt&gt;max&lt;/tt&gt; functions in &lt;tt&gt;clojure.core&lt;/tt&gt; behave unpredictably when one or more of their arguments is &lt;tt&gt;Float/NaN&lt;/tt&gt; or &lt;tt&gt;Double/NaN&lt;/tt&gt;. This is because the current implementation assumes that &lt;tt&gt;&amp;gt;&lt;/tt&gt; provides a total ordering, but this is not the case when &lt;tt&gt;NaN&lt;/tt&gt; is added to the mix. This is an unfortunate fact of life when dealing with IEEE floating point numbers.&lt;/p&gt;

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;This fell out of the implementation naturally and I couldn&apos;t see a good reason to prefer one behavior to another.&lt;/p&gt;</comment>
                    <comment id="27398" author="stu" created="Fri, 2 Dec 2011 12:38:01 -0600"  >&lt;p&gt;The contagious version of the patch seems to me the right approach, assuming fidelity to Java (e.g. Math/max and Math/min) is the standard.&lt;/p&gt;</comment>
                    <comment id="27435" author="richhickey" created="Fri, 9 Dec 2011 09:28:32 -0600"  >&lt;p&gt;contagious ok&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10594" name="CLJ-868-contagious-NaN.patch" size="8086" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 11:05:15 -0500" />
                    <attachment id="10596" name="CLJ-868-ignore-NaN.patch" size="8738" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 13:12:04 -0500" />
                    <attachment id="10595" name="CLJ-868-throw-exception-on-NaN.patch" size="8558" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 12:15:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-867] Records of different types with the same data have the same hashcodes, even though they are not considered to be equal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-867</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Records which contain the same field values are not considered to be equal, but the record type is not currently included in the hash.  This means that if an heterogenous map contains records of different types, where the fields aren&apos;t necessarily distinct, there is a high likelyhood of hash collisions.&lt;/p&gt;

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

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


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

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

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

&lt;p&gt;With this patch you will now see the following behavior:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (defrecord A [x])
user.A
user=&amp;gt; (defrecord B [x])
user.B
user=&amp;gt; (= (-&amp;gt;B 1) (-&amp;gt;A 1))
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (= (hash (-&amp;gt;B 1)) (hash (-&amp;gt;A 1)))
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10593" name="0001-CLJ-867-Incorporate-the-record-name-into-the-hash-co.patch" size="1478" author="djpowell" created="Sun, 30 Oct 2011 07:27:32 -0500" />
                    <attachment id="11085" name="clj-867-incorporate-record-name-into-hash-code.txt" size="1535" author="brentonashworth" created="Sat, 21 Apr 2012 17:17:14 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-863] interleave should accept 1 or 0 arguments</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-863</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;interleave should handle 0 and 1 arguments in the same way that concat does (i.e., 0 args --&amp;gt; empty seq, 1 args --&amp;gt; identity).&lt;/p&gt;</description>
                <environment></environment>
            <key id="14807">CLJ-863</key>
            <summary>interleave should accept 1 or 0 arguments</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="joegallo">Joe Gallo</reporter>
                        <labels>
                    </labels>
                <created>Mon, 24 Oct 2011 14:50:34 -0500</created>
                <updated>Fri, 24 May 2013 07:55:10 -0500</updated>
                    <resolved>Fri, 24 May 2013 07:55:10 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.6</fixVersion>
                                        <due></due>
                    <votes>5</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28814" author="richhickey" created="Fri, 15 Jun 2012 09:31:29 -0500"  >&lt;p&gt;(lazy-seq nil) should be ()&lt;/p&gt;</comment>
                    <comment id="28817" author="joegallo" created="Fri, 15 Jun 2012 10:13:06 -0500"  >&lt;p&gt;Hey Rich, if you&apos;re talking about the first line of the diff:&lt;/p&gt;

&lt;p&gt;+  ([] (lazy-seq nil))&lt;/p&gt;

&lt;p&gt;Then that&apos;s the implementation, not the tests &amp;#8211; given an empty vector of arguments, return (lazy-seq nil), which I just copied from the existing definition of concat.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Joe&lt;/p&gt;</comment>
                    <comment id="29591" author="mdzaebel" created="Wed, 3 Oct 2012 13:19:59 -0500"  >&lt;p&gt;(defn interleave &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; s&amp;#93;&lt;/span&gt; (apply mapcat list s))&lt;/p&gt;</comment>
                    <comment id="29592" author="m0smith" created="Wed, 3 Oct 2012 20:47:53 -0500"  >&lt;p&gt;Marc&apos;s definition doesn&apos;t work for no arguments.  Maybe:&lt;/p&gt;

&lt;p&gt;(defn interleave &lt;br/&gt;
    ([] ()) &lt;br/&gt;
    (&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; s&amp;#93;&lt;/span&gt; (apply mapcat list s)))&lt;/p&gt;</comment>
                    <comment id="29608" author="mdzaebel" created="Fri, 5 Oct 2012 13:07:13 -0500"  >&lt;p&gt;Yes, but my solution is too slow, as it uses &quot;apply&quot;.&lt;/p&gt;</comment>
                    <comment id="30343" author="jafingerhut" created="Tue, 1 Jan 2013 11:54:06 -0600"  >&lt;p&gt;Patch clj-863-make-interleave-handle-odd-args-like-concat-patch-v1.txt dated Jan 1 2013 is identical to Joe Gallo&apos;s 0001-make-interleave-handle-odd-arugments-in-the-same-man.patch patch dated Oct 24 2011, except it returns () instead of (lazy-seq nil) as per Rich&apos;s comment.  If concat should also return () instead of (lazy-seq nil), perhaps another ticket should be created to fix that.  Also presumptuously changing ticket state from Incomplete back to Vetted, since the reason it was marked Incomplete should now be addressed, and it was Screened before.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10496" name="0001-make-interleave-handle-odd-arugments-in-the-same-man.patch" size="1247" author="joegallo" created="Mon, 24 Oct 2011 14:50:36 -0500" />
                    <attachment id="11785" name="clj-863-make-interleave-handle-odd-args-like-concat-patch-v1.txt" size="1235" author="jafingerhut" created="Tue, 1 Jan 2013 11:54:06 -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-861] PersistentHashMap uses a hashing function that is incongruent with the equality function it uses</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-861</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;PersistentHashMap hashes its keys with Util.hash which simply calls Object.hashCode, but it compares its keys for equality using Util.equiv.  This means:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (clojure.lang.Util/equiv (Integer. -1) (Long. -1))
true
user=&amp;gt; (= (clojure.lang.Util/hash (Integer. -1)) (clojure.lang.Util/hash (Long. -1)))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;The following bad behavior results:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (def bad-map (clojure.lang.PersistentHashMap/create {(Long. -1) :here}))
#&apos;user/bad-map
user=&amp;gt; (contains? bad-map (Integer. -1))
false
user=&amp;gt; (get bad-map (Integer. -1))
nil
user=&amp;gt; (= bad-map (clojure.lang.PersistentHashMap/create {(Integer. -1) :here}))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compared to:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (def bad-map (clojure.lang.PersistentHashMap/create {(Long. 0) :here}))
#&apos;user/bad-map
user=&amp;gt; (contains? bad-map (Integer. 0))
true
user=&amp;gt; (get bad-map (Integer. 0))
:here
user=&amp;gt; (= bad-map (clojure.lang.PersistentHashMap/create {(Long. 0) :here}))
true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This bug also infects PersistentHashSet:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; #{(Long. 0) (Integer. 0)}
IllegalArgumentException Duplicate key: 0  clojure.lang.PersistentHashSet.createWithCheck (PersistentHashSet.java:56)
user=&amp;gt; #{(Long. -1) (Integer. -1)}
#{-1 -1}
user=&amp;gt; (contains? #{(Long. 0)} (Integer. 0))
true
user=&amp;gt; (contains? #{(Long. -1)} (Integer. -1))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14804">CLJ-861</key>
            <summary>PersistentHashMap uses a hashing function that is incongruent with the equality function it uses</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Sun, 23 Oct 2011 05:22:22 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Sun, 23 Oct 2011 19:28:28 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27083" author="pjstadig" created="Sun, 23 Oct 2011 05:24:19 -0500"  >&lt;p&gt;There may be a couple different ways to fix this.  I think what would work is adding a Util.hashEquiv method that has the same equality semantics as Util.equiv and using that to hash keys instead.&lt;/p&gt;

&lt;p&gt;I&apos;d be glad to create a patch for that.&lt;/p&gt;</comment>
                    <comment id="27085" author="pjstadig" created="Sun, 23 Oct 2011 19:28:27 -0500"  >&lt;p&gt;This ticket can be closed now.  It is fixed by &lt;a href=&quot;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&quot;&gt;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27086" author="richhickey" created="Sun, 23 Oct 2011 19:28:29 -0500"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&quot;&gt;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-860] Add ability to disable locals clearing</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-860</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When using a debugger, it is useful to be able to see all variable values.  Locals clearing reduces the number of variabls that are non-nil, and makes uncertain whether nil values are real or an artifact of locals clearing.&lt;/p&gt;

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

&lt;p&gt;The attached patch does this by introducing the &lt;b&gt;disable-locals-clearing&lt;/b&gt; var, and using it to initialise the canBeCleared field of LocalBinding.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14802">CLJ-860</key>
            <summary>Add ability to disable locals clearing</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Oct 2011 13:20:11 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Tue, 13 Mar 2012 10:15:49 -0500</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>7</votes>
                        <watches>10</watches>
                        <comments>
                    <comment id="27183" author="abrooks" created="Sat, 29 Oct 2011 12:19:08 -0500"  >&lt;p&gt;+1&lt;/p&gt;

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

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

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

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

&lt;p&gt;A dynamic map would work, but binding it correctly is more complicated:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(binding [*settings* (merge *settings* {...})] ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

&lt;p&gt;Implements &lt;tt&gt;&lt;b&gt;compiler-options&lt;/b&gt;&lt;/tt&gt; as a map, with a :locals-clearing key, initialised from the &lt;tt&gt;clojure.compile.locals-clearing&lt;/tt&gt; system property.&lt;/p&gt;</comment>
                    <comment id="27926" author="jafingerhut" created="Fri, 9 Mar 2012 09:39:43 -0600"  >&lt;p&gt;Just a note that all 3 patches attached right now fail to apply cleanly using &apos;git --keep-cr -s &amp;lt; patchfile.txt&apos; to latest master as of March 9, 2012.  Any consensus on which of these approaches to take?  I can update that one if so.&lt;/p&gt;</comment>
                    <comment id="27937" author="richhickey" created="Tue, 13 Mar 2012 10:15:49 -0500"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/4036c7720949cb21ccf53c5c7c54ed1daaff2fda&quot;&gt;https://github.com/clojure/clojure/commit/4036c7720949cb21ccf53c5c7c54ed1daaff2fda&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27973" author="george" created="Wed, 21 Mar 2012 00:14:04 -0500"  >&lt;p&gt;Per RH&apos;s request, I tested this with CDT, and confirmed it works there.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10961" name="0001-add-compiler-options-map.diff" size="4592" author="hugoduncan" created="Fri, 24 Feb 2012 16:19:28 -0600" />
                    <attachment id="10494" name="add-disable-locals-clearing.diff" size="1677" author="hugoduncan" created="Fri, 21 Oct 2011 13:20:12 -0500" />
                    <attachment id="10960" name="add-enable-locals-clearing.diff" size="1655" author="hugoduncan" created="Fri, 24 Feb 2012 12:34:34 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-857] CLJ-791 caused some compiler breakage</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-857</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Stuart Halloway reports:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here&apos;s a short example showing the problem (against master):&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(require &apos;[clojure.java.jdbc :as jdbc])
(set! *warn-on-reflection* true)
(jdbc/resultset-seq
 (-&amp;gt; (jdbc/connection)
    (.getMetadata)
    (.getColumns nil nil &quot;foo&quot; nil)))

Reflection warning, NO_SOURCE_PATH:8 - reference to field getMetadata can&apos;t be resolved.

NullPointerException
       clojure.lang.Compiler.expandArrayClassname (Compiler.java:2265)
       clojure.lang.Compiler.signatureString (Compiler.java:2275)
       clojure.lang.Compiler$InstanceMethodExpr.&amp;lt;init&amp;gt; (Compiler.java:1366)
       clojure.lang.Compiler$HostExpr$Parser.parse (Compiler.java:912)
       clojure.lang.Compiler.analyzeSeq (Compiler.java:6437)
       clojure.lang.Compiler.analyze (Compiler.java:6244)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;See also &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-791&quot; title=&quot;Include argument type info in reflection warnings and method signatures in dispatch compilation errors&quot;&gt;&lt;del&gt;CLJ-791&lt;/del&gt;&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14701">CLJ-857</key>
            <summary>CLJ-791 caused some compiler breakage</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bsmith.occs@gmail.com">Ben Smith-Mannschott</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Oct 2011 03:45:46 -0500</created>
                <updated>Tue, 25 Oct 2011 17:32:26 -0500</updated>
                    <resolved>Tue, 25 Oct 2011 17:32:26 -0500</resolved>
                            <version>Release 1.4</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26972" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 03:49:24 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-857&quot; title=&quot;CLJ-791 caused some compiler breakage&quot;&gt;&lt;del&gt;CLJ-857&lt;/del&gt;&lt;/a&gt;.patch&lt;br/&gt;
&quot;teach expandArrayClassname to handle null Classes&quot;&lt;/p&gt;</comment>
                    <comment id="26975" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 11:38:37 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-857&quot; title=&quot;CLJ-791 caused some compiler breakage&quot;&gt;&lt;del&gt;CLJ-857&lt;/del&gt;&lt;/a&gt;.patch&lt;br/&gt;
Now includes a test from Chas Emerick.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10392" name="CLJ-857.patch" size="2121" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 11:38:37 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

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