<!--
RSS generated by JIRA (4.4#649-r158309) at Sun May 19 17:39:59 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=project+%3D+CLJ+AND+resolution+%3D+Declined+AND+status+%3D+Closed&tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>Clojure JIRA</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+CLJ+AND+resolution+%3D+Declined+AND+status+%3D+Closed</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="143" total="143"/>
                <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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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;CLJ-896&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-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-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-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-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-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-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-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-851] Type-hinting a var with primitive array pseudo-class results in IllegalArgumentException when the var is used as an arg</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-851</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (def ^longs la (long-array 0))
#&apos;user/la
user=&amp;gt; (defn foo [] (alength la))
CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: clojure.core$longs@32dfcb47, compiling:(NO_SOURCE_PATH:9) 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Workaround: use the class string, e.g., &lt;tt&gt;^&quot;[J&quot;&lt;/tt&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14679">CLJ-851</key>
            <summary>Type-hinting a var with primitive array pseudo-class results in IllegalArgumentException when the var is used as an arg</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="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Oct 2011 00:26:46 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 9 Nov 2012 08:39:08 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26988" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 11:40:05 -0500"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-851&quot; title=&quot;Type-hinting a var with primitive array pseudo-class results in IllegalArgumentException when the var is used as an arg&quot;&gt;&lt;del&gt;CLJ-851&lt;/del&gt;&lt;/a&gt;-test.patch&lt;/p&gt;

&lt;p&gt;Provides a test to reproduce this issue, as well as a test that shows that the workaround of using ^&quot;[J&quot; as type hint works correctly.&lt;/p&gt;</comment>
                    <comment id="26995" author="bsmith.occs@gmail.com" created="Sun, 16 Oct 2011 02:23:54 -0500"  >&lt;p&gt;OK, I see the problem here: &lt;tt&gt;longs&lt;/tt&gt; plays two roles in Clojure:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;As an unqualified symbol, it&apos;s taken to mean &lt;tt&gt;long[].class&lt;/tt&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;clojure.core/longs&lt;/tt&gt; is a definline function which calls &lt;tt&gt;clojure.lang.Numbers.longs(...)&lt;/tt&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The example in the issue description is expecting the first interpretation, but what we&apos;re actually getting is the second interpretation, i.e. the :tag is not a symbol &lt;tt&gt;longs&lt;/tt&gt;, but rather a function (an instance of the class &lt;tt&gt;clojure.core$longs&lt;/tt&gt;, to be precise).&lt;/p&gt;

&lt;p&gt;So, it&apos;s as if we&apos;d written 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;(def ^{:tag clojure.core/longs} la (long-array 0))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When really, we meant 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;(def ^{:tag &apos;longs} la (long-array 0))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;While the behavior described by this issue is confusing, it looks to me like it&apos;s &lt;em&gt;not a bug&lt;/em&gt;.&lt;/p&gt;</comment>
                    <comment id="29917" author="stuart.sierra" created="Fri, 9 Nov 2012 08:39:08 -0600"  >&lt;p&gt;Correct, this is not a bug. The reader will attempt to resolve symbols in the ^tag metadata form, so that it can resolve unqualified class names.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10399" name="CLJ-851-test.patch" size="2225" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 11:40:05 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-848] defn :or form does not warn you if you provide a vector instead of a map</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-848</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I had a problem defining a function today, I passed :or a vector instead of a map - everything seemed to work fine but later on I got a really puzzling &quot;Null pointer exception&quot;.&lt;/p&gt;

&lt;p&gt;raek helped me debug the problem and suggested opening this ticket. I think it would be useful if an exception was thrown on the :or line unless it&apos;s given a map.&lt;/p&gt;

&lt;p&gt;Here are some examples&lt;/p&gt;

&lt;p&gt;(defn broken-example [{:keys &lt;span class=&quot;error&quot;&gt;&amp;#91;i processor&amp;#93;&lt;/span&gt;&lt;br/&gt;
                       :or &lt;span class=&quot;error&quot;&gt;&amp;#91;processor identity&amp;#93;&lt;/span&gt;}]&lt;br/&gt;
  (processor i))&lt;/p&gt;

&lt;p&gt;(defn working-example [{:keys &lt;span class=&quot;error&quot;&gt;&amp;#91;i processor&amp;#93;&lt;/span&gt;&lt;br/&gt;
                       :or {processor identity}}]&lt;br/&gt;
  (processor i))&lt;/p&gt;

&lt;p&gt;(working-example {:i 1})&lt;br/&gt;
 =&amp;gt; 1&lt;br/&gt;
(broken-example {:i 1})&lt;br/&gt;
 =&amp;gt; Null pointer exception&lt;/p&gt;

&lt;p&gt;Cheers, Dave.&lt;/p&gt;</description>
                <environment>Clojure 1.3, Emacs 23, OSX Lion</environment>
            <key id="14670">CLJ-848</key>
            <summary>defn :or form does not warn you if you provide a vector instead of a map</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="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="kzar">Dave Barker</reporter>
                        <labels>
                    </labels>
                <created>Thu, 6 Oct 2011 06:50:49 -0500</created>
                <updated>Tue, 25 Oct 2011 18:04:23 -0500</updated>
                    <resolved>Tue, 25 Oct 2011 18:04:23 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Approved Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26899" author="kzar" created="Thu, 6 Oct 2011 06:51:52 -0500"  >&lt;p&gt;Apologies, I meant to tag this as a minor issue instead of a major one!&lt;/p&gt;</comment>
                    <comment id="26908" author="stu" created="Fri, 7 Oct 2011 09:39:50 -0500"  >&lt;p&gt;Since vectors are associative, maybe using vectors for :or should just work?&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 [{noun 0
       verb 1
       obj 2
       :or [:n :v :o]}
      [:code :is]] obj)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27089" author="stu" created="Tue, 25 Oct 2011 18:04:23 -0500"  >&lt;p&gt;Closing this until someone wants to make a principled argument for what &lt;b&gt;should&lt;/b&gt; happen (see my previous comment)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-841] Unable to download clojure using wget. Wget seems to be blocked...</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-841</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;wget &lt;a href=&quot;http://repo1.maven.org/maven2/org/clojure/clojure/1.3.0/clojure-1.3.0.zip&quot;&gt;http://repo1.maven.org/maven2/org/clojure/clojure/1.3.0/clojure-1.3.0.zip&lt;/a&gt;&lt;br/&gt;
Gives me a 403, same with other people.&lt;/p&gt;

&lt;p&gt;When I add -U YUBLOCKWGET to the command, it downloads the file successfully.&lt;/p&gt;

&lt;p&gt;This &quot;feature&quot; needs to be removed.&lt;/p&gt;

&lt;p&gt;Also, I encountered this while trying to package clojure 1.3. So no, I can&apos;t just use a browser &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/tongue.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="14642">CLJ-841</key>
            <summary>Unable to download clojure using wget. Wget seems to be blocked...</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="td123">Thomas Dziedzic</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Sep 2011 23:35:31 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Tue, 8 May 2012 23:44:46 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28416" author="jim.blomo" created="Tue, 8 May 2012 23:44:46 -0500"  >&lt;p&gt;This is actually a policy of maven.org/sonatype: &lt;a href=&quot;https://issues.sonatype.org/browse/MVNCENTRAL-119&quot;&gt;https://issues.sonatype.org/browse/MVNCENTRAL-119&lt;/a&gt; , not Clojure.&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-826] Include drop, take, butlast from clojure.contrib.string (1.2) in clojure.string 1.3</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-826</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;From clojure.contrib.string 1.2, I have found myself using drop, take,&lt;br/&gt;
and butlast. (These are more than just wrappers for String/substring,&lt;br/&gt;
because they behave nicely when indices exceed the string length.) I&lt;br/&gt;
like these methods in part because they match the behavior of&lt;br/&gt;
corresponding sequence methods, but have better performance. This&lt;br/&gt;
makes optimizing (when needed) easier. &lt;/p&gt;</description>
                <environment></environment>
            <key id="14571">CLJ-826</key>
            <summary>Include drop, take, butlast from clojure.contrib.string (1.2) in clojure.string 1.3</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="arthuredelstein">Arthur Edelstein</reporter>
                        <labels>
                    </labels>
                <created>Mon, 8 Aug 2011 12:58:18 -0500</created>
                <updated>Fri, 2 Dec 2011 09:14:37 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:14:37 -0600</resolved>
                            <version>Backlog</version>
                                <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>3</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26711" author="thnetos" created="Mon, 8 Aug 2011 13:22:43 -0500"  >&lt;p&gt;Attached patch for adding the methods.&lt;/p&gt;</comment>
                    <comment id="26712" author="thnetos" created="Mon, 8 Aug 2011 18:28:24 -0500"  >&lt;p&gt;I intentionally left out the {:added &quot;_&quot;} from the vars since I have no idea when this will be added.&lt;/p&gt;

&lt;p&gt;This (as expected) causes this test to fail:&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:42)&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-docstrings))&lt;br/&gt;
     &lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   actual: (not (= [] (#&apos;clojure.string/butlast #&apos;clojure.string/drop #&apos;clojure.string/take)))&lt;/p&gt;

&lt;p&gt;Which is easily remedied. If desired, let me know what version this will be added to and I&apos;ll submit a new patch with the :added metadata included.&lt;/p&gt;</comment>
                    <comment id="27282" author="thnetos" created="Sat, 12 Nov 2011 16:29:22 -0600"  >&lt;p&gt;I have attached a patch with &quot;1.4&quot; as the added version now that 1.3 has been released.&lt;/p&gt;</comment>
                    <comment id="27307" author="chouser@n01se.net" created="Fri, 18 Nov 2011 22:29:46 -0600"  >&lt;p&gt;The algorithms, docs, and tests look good.  I think the functions would be better if they used clojure.core/subs like the rest of clojure.string does, instead of .substring.  This is more idiomatic Clojure and allows you to avoid hinting the String arg.&lt;/p&gt;

&lt;p&gt;When a new patch is uploaded, please remember to set the Patch field of this ticket to &quot;Code and Test&quot; and the Approval field to &quot;Test&quot;.  Hopefully this will lead to faster screening.&lt;/p&gt;</comment>
                    <comment id="27335" author="thnetos" created="Mon, 21 Nov 2011 12:50:49 -0600"  >&lt;p&gt;Attached a patch that uses subs instead of .substring (clj-826-add-take-drop-butlast-v3.diff).&lt;/p&gt;</comment>
                    <comment id="27390" author="stu" created="Fri, 2 Dec 2011 09:14:26 -0600"  >&lt;p&gt;These fns were left out intentionally. Feel free to propose a contrib home for them, though.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10311" name="clj-826-add-take-drop-butlast.diff" size="2423" author="thnetos" created="Mon, 8 Aug 2011 13:22:43 -0500" />
                    <attachment id="10712" name="clj-826-add-take-drop-butlast-v3.diff" size="2463" author="thnetos" created="Mon, 21 Nov 2011 12:50:49 -0600" />
                    <attachment id="10699" name="clj-826-add-take-drop-butlast-with-versions.diff" size="2477" author="thnetos" created="Sat, 12 Nov 2011 16:29:22 -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>thnetos</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-820] int coercion doesn&apos;t work in clojure 1.3</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-820</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using the clojure git head as of 2011-07-14 (commit f704853751d02faf72bd53be599ee0be6c1da63e), int coercion doesn&apos;t work:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (class (int 1))&lt;br/&gt;
java.lang.Long&lt;/p&gt;

&lt;p&gt;byte, short, double, and float coercion work fine, though:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (class (byte 1))&lt;br/&gt;
java.lang.Byte&lt;br/&gt;
user&amp;gt; (class (short 1))&lt;br/&gt;
java.lang.Short&lt;br/&gt;
user&amp;gt; (class (double 1))&lt;br/&gt;
java.lang.Double&lt;br/&gt;
user&amp;gt; (class (float 1))&lt;br/&gt;
java.lang.Float&lt;/p&gt;

&lt;p&gt;Also creating integers directly works fine:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (class (Integer. &quot;100&quot;))&lt;br/&gt;
java.lang.Integer&lt;br/&gt;
user&amp;gt; (class (Integer/valueOf 1))&lt;br/&gt;
java.lang.Integer&lt;br/&gt;
user&amp;gt; (class (Integer. 100))&lt;br/&gt;
java.lang.Integer&lt;/p&gt;

&lt;p&gt;This is probably related to &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-439&quot; title=&quot;Automatic type translation from Integer to Long&quot;&gt;&lt;del&gt;CLJ-439&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</description>
                <environment>Gentoo GNU/Linux</environment>
            <key id="14490">CLJ-820</key>
            <summary>int coercion doesn&apos;t work in clojure 1.3</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="tsdh">Tassilo Horn</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Jul 2011 08:05:40 -0500</created>
                <updated>Fri, 20 Jul 2012 16:54:48 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:54:48 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.5</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="26571" author="paraseba" created="Fri, 15 Jul 2011 14:33:57 -0500"  >&lt;p&gt;Related documentation here: &lt;a href=&quot;http://dev.clojure.org/display/doc/Enhanced+Primitive+Support&quot;&gt;http://dev.clojure.org/display/doc/Enhanced+Primitive+Support&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;all long-or-smaller integers are boxed as Long&lt;br/&gt;
You can&apos;t use primitive coercions to force specific box types&lt;br/&gt;
Your code was broken if you were relying on that&lt;/p&gt;

&lt;p&gt;So, apparently (int) has the correct behavior. It&apos;s byte and short which should be also boxed into Longs&lt;/p&gt;</comment>
                    <comment id="26572" author="paraseba" created="Fri, 15 Jul 2011 14:34:24 -0500"  >&lt;p&gt;See also this topic in clojure-dev: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/fXQAYv8s0tQ/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/fXQAYv8s0tQ/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26573" author="tsdh" created="Fri, 15 Jul 2011 15:00:20 -0500"  >&lt;p&gt;So to call some Java method that requires an int you have to use Integer/valueOf?&lt;/p&gt;</comment>
                    <comment id="26574" author="paraseba" created="Fri, 15 Jul 2011 15:46:02 -0500"  >&lt;p&gt;Yes, I think so&lt;/p&gt;</comment>
                    <comment id="26575" author="tsdh" created="Fri, 15 Jul 2011 16:16:11 -0500"  >&lt;p&gt;But for what are the coercion functions now good for?  I mean, &lt;a href=&quot;http://clojure.org/java_interop#Java&quot;&gt;http://clojure.org/java_interop#Java&lt;/a&gt; Interop-Coercions states:&lt;/p&gt;

&lt;p&gt;  &quot;At times it is necessary to have a value of a particular primitive type. These coercion functions yield a value of the indicated type as long as such a coercion is possible: bigdec bigint boolean byte char double float int long num short&quot;&lt;/p&gt;

&lt;p&gt;That&apos;s exactly my use case which is not supported anymore.&lt;/p&gt;</comment>
                    <comment id="26576" author="paraseba" created="Fri, 15 Jul 2011 23:09:37 -0500"  >&lt;p&gt;(int) (char) etc. are not intended to return boxed types, they always return primitive types. If you want boxed types you can use (num). When you do (class (int 42)) you are casting the long 42 to a int and then boxing it into a Long to get its class.&lt;/p&gt;

&lt;p&gt;For short and byte, I don&apos;t know, I think there is a bug, (class (short 42)) should be Short.&lt;/p&gt;</comment>
                    <comment id="26577" author="tsdh" created="Sat, 16 Jul 2011 07:13:07 -0500"  >&lt;p&gt;&lt;cite&gt;(int) (char) etc. are not intended to return boxed types, they always return primitive types.&lt;/cite&gt;&lt;/p&gt;

&lt;p&gt;Thank you, Sebasti&#225;n, that made it clear and unveiled the problem at my side.  When I did&lt;/p&gt;

&lt;p&gt;  &lt;tt&gt;(set-value! foo :position (int 17))&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;I got the exception &quot;java.lang.Long cannot be cast to java.lang.Integer&quot;.  set-value! is a protocol function extended on the java types of the java library I&apos;m interacting with.  Eventually, it&apos;ll call &lt;tt&gt;(doto foo (.setAttribute &quot;position&quot; (mutable &amp;lt;providedVal&amp;gt;))&lt;/tt&gt;, where mutable is yet another protocol function that converts clojure collections to the libraries counterparts and does nothing for primitive types.&lt;/p&gt;

&lt;p&gt;Now, although (int 17) returns an unboxed int, these two indirections box it into a Long again and the java setter is called with that leading to the error.&lt;/p&gt;

&lt;p&gt;  &lt;tt&gt;(set-value! foo :position (Integer/intValue 17))&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;circumvents the issue, because here you directly get an int boxed as Integer.&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;If you want boxed types you can use (num).&lt;/cite&gt;&lt;/p&gt;

&lt;p&gt;Well, I want a boxed value of a certain type, like Integer.&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;For short and byte, I don&apos;t know, I think there is a bug, (class (short 42)) should be Short.&lt;/cite&gt;&lt;/p&gt;

&lt;p&gt;Should or should not?  Currently, for all primitive types &amp;lt;primType&amp;gt;, the call &lt;tt&gt;(class (&amp;lt;primType&amp;gt; &amp;lt;val&amp;gt;))&lt;/tt&gt; returns the wrapper class corresponding to &amp;lt;primType&amp;gt; with the exception of int where you get a Long instead of an Integer.  That&apos;s totally surprising and caused me to file this bug report.&lt;/p&gt;</comment>
                    <comment id="28611" author="hircus" created="Sat, 26 May 2012 12:55:00 -0500"  >&lt;p&gt;This is fixed in 1.4.0 &amp;#8211; could one of the screeners confirm this, and maybe close the issue?&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-819] deftype print/read doesn&apos;t munge field names</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-819</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;=&amp;gt; *clojure-version*
{:major 1, :minor 3, :incremental 0, :qualifier &lt;span class=&quot;code-quote&quot;&gt;&quot;beta1&quot;&lt;/span&gt;}
=&amp;gt; (deftype P [a-b])
user.P
=&amp;gt; (P. &lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: No matching field found: a-b &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; class user.P&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The field names being passed along to the reflector need to be munged properly in core_print.clj (line 246), and the Compiler needs to do the same in the &lt;tt&gt;IType&lt;/tt&gt; block in &lt;tt&gt;ObjExpr.emitValue&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14484">CLJ-819</key>
            <summary>deftype print/read doesn&apos;t munge field names</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Jul 2011 12:48:27 -0500</created>
                <updated>Wed, 24 Aug 2011 05:05:23 -0500</updated>
                    <resolved>Wed, 24 Aug 2011 05:05:22 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26568" author="cemerick" created="Tue, 12 Jul 2011 12:48:51 -0500"  >&lt;p&gt;I&apos;ll pick this up on Friday if no one else has by then.&lt;/p&gt;</comment>
                    <comment id="26730" author="cemerick" created="Wed, 24 Aug 2011 05:05:23 -0500"  >&lt;p&gt;deftype print-method and print-dup pulled per &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-812&quot; title=&quot;print-dup should not be defined for deftypes&quot;&gt;&lt;del&gt;CLJ-812&lt;/del&gt;&lt;/a&gt;; this is no longer relevant.&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-818] doc string for resolve mentions &amp;env</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-818</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(defn resolve&lt;br/&gt;
  &quot;same as (ns-resolve &lt;b&gt;ns&lt;/b&gt; symbol) or (ns-resolve &lt;b&gt;ns&lt;/b&gt; &amp;amp;env symbol)&quot;&lt;/p&gt;

&lt;p&gt;The ampersand on &quot;&amp;amp;env&quot; in the doc string is distracting.  There&apos;s no macro magic involved so it should just say &quot;env&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14483">CLJ-818</key>
            <summary>doc string for resolve mentions &amp;env</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="steveminer">Steve Miner</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Jul 2011 14:55:01 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 23 Mar 2012 08:41:20 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27837" author="jafingerhut" created="Fri, 24 Feb 2012 11:20:38 -0600"  >&lt;p&gt;There are earlier uses of &amp;amp;form and &amp;amp;env in core.clj, but they are all in bootstrap code and none of them become visible in doc strings.  There are no other occurrences of &amp;amp; in resolve or ns-resolve, so it seems reasonable to remove it from resolve&apos;s doc string.&lt;/p&gt;

&lt;p&gt;Patch applies cleanly to latest master as of Feb 24, 2012.&lt;/p&gt;</comment>
                    <comment id="27991" author="stuart.sierra" created="Fri, 23 Mar 2012 08:41:20 -0500"  >&lt;p&gt;The only way to access local environments in Clojure is with the special &lt;tt&gt;&amp;amp;env&lt;/tt&gt; argument in a macro, so the use of &lt;tt&gt;&amp;amp;env&lt;/tt&gt; in the ns-resolve docstring makes sense.&lt;/p&gt;

&lt;p&gt;Declined.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10956" name="clj-818-resolve-doc-string-patch.txt" size="798" author="jafingerhut" created="Fri, 24 Feb 2012 11:20: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-814] Make the #= reader macro an official&quot; part of the language</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-814</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Can the #= reader macro be made &quot;official&quot; by documenting it on the clojure.org website. It seems to be quite useful for several applications, including regular macro definitions.&lt;/p&gt;</description>
                <environment>All</environment>
            <key id="14475">CLJ-814</key>
            <summary>Make the #= reader macro an official&quot; part of the language</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="grkuntzmd">G. Ralph Kuntz, MD</reporter>
                        <labels>
                    </labels>
                <created>Wed, 22 Jun 2011 06:13:07 -0500</created>
                <updated>Tue, 28 Jun 2011 18:25:10 -0500</updated>
                    <resolved>Tue, 28 Jun 2011 18:25:09 -0500</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26536" author="aaron" created="Tue, 28 Jun 2011 18:24:49 -0500"  >&lt;p&gt;Although this seems useful, we are not ready to commit to supporting it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-810] clojure.set/difference</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-810</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This seems a bit weird. Maybe set difference could check that the collections are sets?&lt;/p&gt;

&lt;p&gt;(clojure.set/difference (set &lt;span class=&quot;error&quot;&gt;&amp;#91;0 300 :a&amp;#93;&lt;/span&gt;) &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b&amp;#93;&lt;/span&gt;)&lt;br/&gt;
#{0 300}&lt;br/&gt;
(clojure.set/difference (set &lt;span class=&quot;error&quot;&gt;&amp;#91;0 300 :a&amp;#93;&lt;/span&gt;) &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b :c :d&amp;#93;&lt;/span&gt;)&lt;br/&gt;
#{:a 300}&lt;br/&gt;
(clojure.set/difference (set &lt;span class=&quot;error&quot;&gt;&amp;#91;0 300 :a&amp;#93;&lt;/span&gt;) (set &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b :c :d&amp;#93;&lt;/span&gt;))&lt;br/&gt;
#{0 300}&lt;/p&gt;

&lt;p&gt;The problem is still present in the master branch too.&lt;/p&gt;</description>
                <environment>Linux, openjdk 6</environment>
            <key id="14470">CLJ-810</key>
            <summary>clojure.set/difference</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="opqdonut">Joel Kaasinen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 15 Jun 2011 07:11:24 -0500</created>
                <updated>Mon, 20 Jun 2011 07:04:37 -0500</updated>
                    <resolved>Mon, 20 Jun 2011 07:04:37 -0500</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26515" author="stu" created="Mon, 20 Jun 2011 07:04:25 -0500"  >&lt;p&gt;set/difference&apos;s behavior is not documented if you don&apos;t pass in a set.&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-804] Expose memoization cache and original as metadata on memoized functions.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-804</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The attached patch exposes the memoization cache and original pre-memoized value as metadata on memoized functions.&lt;/p&gt;

&lt;p&gt;The metadata keys are ::memoize-cache and ::prememoized respectively, to which I&apos;m not too attached.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14447">CLJ-804</key>
            <summary>Expose memoization cache and original as metadata on memoized functions.</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="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="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Wed, 1 Jun 2011 11:28:56 -0500</created>
                <updated>Tue, 21 Jun 2011 18:04:42 -0500</updated>
                    <resolved>Tue, 21 Jun 2011 18:04:42 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26514" author="stu" created="Mon, 20 Jun 2011 06:51:15 -0500"  >&lt;p&gt;Can you say more about the problems(s) being solved there? Given all the other feature work that has been done/requested around memoization, tempted to let this work happen in a contrib library first. But that is partially because I don&apos;t know from this ticket what pain is being addressed.&lt;/p&gt;</comment>
                    <comment id="26516" author="fogus" created="Mon, 20 Jun 2011 08:17:22 -0500"  >&lt;p&gt;Unk may provide a starting point for a contrib lib. &lt;a href=&quot;https://github.com/fogus/unk&quot;&gt;https://github.com/fogus/unk&lt;/a&gt;&lt;/p&gt;
</comment>
                    <comment id="26519" author="technomancy" created="Mon, 20 Jun 2011 12:18:42 -0500"  >&lt;p&gt;I&apos;m in support of a smarter memoize a la unk; this could be considered a stop-gap measure that helps in situations where the current memoize implementation simply cannot be used due to unbounded memory use.&lt;/p&gt;

&lt;p&gt;I&apos;ve also come across circumstances where I can&apos;t use memoize because it will make my function untestable, though admittedly these involve memoizing impure functions&#8212;perhaps the answer there is just &quot;don&apos;t do that&quot;.&lt;/p&gt;</comment>
                    <comment id="26527" author="redinger" created="Tue, 21 Jun 2011 18:04:29 -0500"  >&lt;p&gt;Let&apos;s do one of the following instead:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;make unk a contrib (after addressing &lt;a href=&quot;http://blog.fogus.me/2011/06/20/unk/&quot;&gt;Rich&apos;s questions&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;recommend Guava for advanced caching&lt;/li&gt;
	&lt;li&gt;make a Guava-wrapping contrib&lt;/li&gt;
&lt;/ul&gt;
</comment>
                </comments>
                    <attachments>
                    <attachment id="10249" name="0001-Add-metadata-to-memoized-functions.patch" size="1076" author="technomancy" created="Wed, 1 Jun 2011 11:28:57 -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-799] ArrayMaps print-dup with read-eval</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-799</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (binding [*print-dup* true] (print-str (hash-map :k :v)))
&quot;{:k :v}&quot;
user=&amp;gt; (binding [*print-dup* true] (print-str {:k :v}))
&quot;#=(clojure.lang.PersistentArrayMap/create {:k :v})&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the top example, the reader will automatically create an array-map due to the number of entries, so unless there is an overriding reason to force type-preservation in the bottom example, it can likewise be printed as a literal map.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14434">CLJ-799</key>
            <summary>ArrayMaps print-dup with read-eval</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="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Mon, 16 May 2011 13:12:11 -0500</created>
                <updated>Fri, 27 May 2011 07:38:26 -0500</updated>
                    <resolved>Fri, 27 May 2011 07:38:26 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26453" author="ataggart" created="Sat, 21 May 2011 21:56:21 -0500"  >&lt;p&gt;Apply patch after &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-797&quot; title=&quot;Longs print-dup to the Long constructor&quot;&gt;&lt;del&gt;CLJ-797&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="26460" author="richhickey" created="Fri, 27 May 2011 07:38:11 -0500"  >&lt;p&gt;The point of print-dup is type preservation&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10234" name="print-dup-array-maps.patch" size="1663" author="ataggart" created="Sat, 21 May 2011 21:56:21 -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>
                                                                                    <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-793] print-doc triggers NPE in clojure.lang.Namespace.find</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-793</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In a swank repl I tried to invoke (print-doc ADefTypeInCurrentNamespace) and got the following exception:&lt;/p&gt;


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

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

&lt;p&gt;Backtrace:&lt;br/&gt;
  0: java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)&lt;br/&gt;
  1: clojure.lang.Namespace.find(Namespace.java:188)&lt;br/&gt;
  2: clojure.core$find_ns.invoke(core.clj:3180)&lt;br/&gt;
  3: clojure.core$the_ns.invoke(core.clj:3208)&lt;br/&gt;
  4: clojure.core$ns_name.invoke(core.clj:3214)&lt;br/&gt;
  5: clojure.core$print_doc.invoke(core.clj:3831)&lt;br/&gt;
  6: les$eval36576.invoke(NO_SOURCE_FILE:1)&lt;br/&gt;
  7: clojure.lang.Compiler.eval(Compiler.java:5424)&lt;br/&gt;
  8: clojure.lang.Compiler.eval(Compiler.java:5391)&lt;br/&gt;
  9: clojure.core$eval.invoke(core.clj:2382)&lt;br/&gt;
 10: swank.commands.basic$eval_region.invoke(basic.clj:47)&lt;br/&gt;
 11: swank.commands.basic$eval_region.invoke(basic.clj:37)&lt;br/&gt;
 12: swank.commands.basic$eval797$listener_eval__798.invoke(basic.clj:71)&lt;br/&gt;
 13: clojure.lang.Var.invoke(Var.java:365)&lt;br/&gt;
 14: les$eval36574.invoke(NO_SOURCE_FILE)&lt;br/&gt;
 15: clojure.lang.Compiler.eval(Compiler.java:5424)&lt;br/&gt;
 16: clojure.lang.Compiler.eval(Compiler.java:5391)&lt;br/&gt;
 17: clojure.core$eval.invoke(core.clj:2382)&lt;br/&gt;
 18: swank.core$eval_in_emacs_package.invoke(core.clj:90)&lt;br/&gt;
 19: swank.core$eval_for_emacs.invoke(core.clj:237)&lt;br/&gt;
 20: clojure.lang.Var.invoke(Var.java:373)&lt;br/&gt;
 21: clojure.lang.AFn.applyToHelper(AFn.java:169)&lt;br/&gt;
 22: clojure.lang.Var.applyTo(Var.java:482)&lt;br/&gt;
 23: clojure.core$apply.invoke(core.clj:540)&lt;br/&gt;
 24: swank.core$eval_from_control.invoke(core.clj:97)&lt;br/&gt;
 25: swank.core$eval_loop.invoke(core.clj:102)&lt;br/&gt;
 26: swank.core$spawn_repl_thread$fn_&lt;em&gt;482$fn&lt;/em&gt;_483.invoke(core.clj:307)&lt;br/&gt;
 27: clojure.lang.AFn.applyToHelper(AFn.java:159)&lt;br/&gt;
 28: clojure.lang.AFn.applyTo(AFn.java:151)&lt;br/&gt;
 29: clojure.core$apply.invoke(core.clj:540)&lt;br/&gt;
 30: swank.core$spawn_repl_thread$fn__482.doInvoke(core.clj:304)&lt;br/&gt;
 31: clojure.lang.RestFn.invoke(RestFn.java:398)&lt;br/&gt;
 32: clojure.lang.AFn.run(AFn.java:24)&lt;br/&gt;
 33: java.lang.Thread.run(Thread.java:619)&lt;/p&gt;</description>
                <environment>windows xp / java 1.6.0_24</environment>
            <key id="14424">CLJ-793</key>
            <summary>print-doc triggers NPE in clojure.lang.Namespace.find</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="ordnungswidrig">Philipp Meier</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 May 2011 03:17:06 -0500</created>
                <updated>Tue, 31 May 2011 09:15:10 -0500</updated>
                    <resolved>Tue, 31 May 2011 09:15:10 -0500</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26431" author="ordnungswidrig" created="Fri, 13 May 2011 03:18:59 -0500"  >&lt;p&gt;The following steps reproduce the error:&lt;/p&gt;

&lt;p&gt;(deftype Foo [])&lt;br/&gt;
(print-doc Foo)&lt;/p&gt;</comment>
                    <comment id="26476" author="stuart.sierra" created="Tue, 31 May 2011 09:15:10 -0500"  >&lt;p&gt;clojure.repl/print-doc is private in Clojure 1.3, and no longer throws NPE in the example case.&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-785] Optimize /</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-785</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Optimization to / such that the &lt;tt&gt;&amp;amp; more&lt;/tt&gt; version expands to equivalent of &lt;tt&gt;(/ x (reduce * y more))&lt;/tt&gt; rather than &lt;tt&gt;(reduce / (/ x y) more)&lt;/tt&gt;.  There should be an inlined variant of &lt;tt&gt;&amp;amp; more&lt;/tt&gt; as well.&lt;/p&gt;

&lt;p&gt;This was originally part of &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-184&quot; title=&quot;n-ary bit functions, also inlining of n-ary bit and math operations&quot;&gt;&lt;del&gt;CLJ-184&lt;/del&gt;&lt;/a&gt;, but was pulled out because it&apos;s big enough to be its own ticket.  The rationale is that multiplies are significantly faster than divides on the JVM, and n-ary calls to / could be faster.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://lingpipe-blog.com/2009/05/13/java-multiplication-faster-than-division-in-jdk-1-6/&quot;&gt;&quot;Java Multiplication (Much) Faster than Division&quot;&lt;/a&gt; for background and Java benchmarks.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14411">CLJ-785</key>
            <summary>Optimize /</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="alan@thinkrelevance.com">Alan Dipert</reporter>
                        <labels>
                    </labels>
                <created>Sat, 30 Apr 2011 16:09:40 -0500</created>
                <updated>Fri, 13 May 2011 09:26:14 -0500</updated>
                    <resolved>Fri, 13 May 2011 09:26:13 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26432" author="alan@thinkrelevance.com" created="Fri, 13 May 2011 09:26:14 -0500"  >&lt;p&gt;We don&apos;t want to mess with the semantics of division at the bottom.&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-767] Remove support for non-primitive bit-shift operations</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-767</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Per &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/2191cbf0048d8ca6&quot;&gt;Rich&apos;s comment&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Shift ops would be limited to primitives only. Default versions 64-bit, but explicit shift-int versions for 32 bits.&lt;/p&gt;&lt;/blockquote&gt;</description>
                <environment></environment>
            <key id="14391">CLJ-767</key>
            <summary>Remove support for non-primitive bit-shift operations</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="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Mon, 4 Apr 2011 00:10:58 -0500</created>
                <updated>Wed, 25 May 2011 12:12:21 -0500</updated>
                    <resolved>Wed, 25 May 2011 12:12:19 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26343" author="ataggart" created="Tue, 5 Apr 2011 16:23:12 -0500"  >&lt;p&gt;Rather than changing the behaviour of the extant unchecked ops (see the original discussion), I&apos;ve created three new namespaces:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;clojure.unchecked&lt;/tt&gt;: Contains unchecked versions of the primitive cast functions. Removed the &lt;tt&gt;unchecked-&lt;/tt&gt;&lt;em&gt;prim&lt;/em&gt; cast functions that were added to core recently.&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;clojure.unchecked.long&lt;/tt&gt;: Contains unchecked, long-arg versions of the numeric and bit-op functions from core.&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;clojure.unchecked.double&lt;/tt&gt;: Contains unchecked, double-arg versions of the numeric functions from core.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26353" author="ataggart" created="Wed, 6 Apr 2011 13:23:06 -0500"  >&lt;p&gt;Note that the &lt;tt&gt;clojure.unchecked&lt;/tt&gt; namespace idea was first proffered by Rich in the comments on &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-441&quot; title=&quot;Add unchecked coercions&quot;&gt;&lt;del&gt;CLJ-441&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="26354" author="richhickey" created="Thu, 7 Apr 2011 08:25:59 -0500"  >&lt;p&gt;This does way too much, and thus makes it hard to talk about.&lt;/p&gt;

&lt;p&gt;Moving unchecked coercions into unchecked ns is ok, and would make a fine and acceptably-sized patch.&lt;/p&gt;

&lt;p&gt;unchecked double makes no sense to me at all - no double ops are checked&lt;/p&gt;

&lt;p&gt;There seems to be general confusion about unchecked vs primitive-taking. Only a small subset of ops have the overflow checking that is turned off by &apos;unchecked&apos;&lt;/p&gt;

&lt;p&gt;There&apos;s no sense in which the interacts with &amp;#42;unchecked-math&amp;#42;, nor with the latest numerics approach (primitive semantics by default)&lt;/p&gt;

&lt;p&gt;There&apos;s a ton of duplication with things already in Numbers that handle primitive overloads. esp. in combination with different primitives and objects.&lt;/p&gt;

&lt;p&gt;The things we need for bit ops are lost in the noise.&lt;/p&gt;

&lt;p&gt;What I want for bit ops is the same thing we currently (in latest) have for other ops - primitive semantics by default, no conditionals, direct mapping to JVM primitive ops.&lt;/p&gt;

&lt;p&gt;And separate tickets and patches for each step, please. This is simply too much to consider.&lt;/p&gt;

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

&lt;p&gt;Rich&lt;/p&gt;</comment>
                    <comment id="26355" author="ataggart" created="Thu, 7 Apr 2011 20:11:07 -0500"  >&lt;p&gt;Patch removes support for non-primitive args to bit-shift operations.&lt;/p&gt;</comment>
                    <comment id="26456" author="ataggart" created="Wed, 25 May 2011 12:12:20 -0500"  >&lt;p&gt;Was effectively replaced by &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-772&quot; title=&quot;bit ops to have primitive semantics by default, no conditionals, direct mapping to JVM primitive ops&quot;&gt;&lt;del&gt;CLJ-772&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-762] Clojure compilation hangs</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-762</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Good day, i was trying to write simple sudoku solver as learning excercise, but suddenly stuck&lt;br/&gt;
on some point becasue compiler hangs when trying to run my snippet (attached).&lt;/p&gt;

</description>
                <environment>linux</environment>
            <key id="14378">CLJ-762</key>
            <summary>Clojure compilation hangs</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="df2">Dmitry</reporter>
                        <labels>
                    </labels>
                <created>Sun, 20 Mar 2011 12:31:45 -0500</created>
                <updated>Fri, 24 Feb 2012 10:36:51 -0600</updated>
                    <resolved>Fri, 24 Feb 2012 10:36:51 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26321" author="df2" created="Sun, 20 Mar 2011 14:20:09 -0500"  >&lt;p&gt;Sorry for false alert, its not compiler, it is program itself (ash on my head)&lt;/p&gt;</comment>
                    <comment id="27835" author="jafingerhut" created="Fri, 24 Feb 2012 10:36:51 -0600"  >&lt;p&gt;Bug reporter Dmitry apparently discovered that it was compiling and running, just taking longer to finish than he expected, which is not unusual for a program doing this much searching with no printing of intermediate results.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10155" name="sudoku.clj" size="1794" author="df2" created="Sun, 20 Mar 2011 12:31:46 -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-758] Add Clojure program to generate HTML and LaTeX cheatsheets from common source</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-758</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Discussion thread on clojure-dev: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/265b887a940219b2#&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/265b887a940219b2#&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steve Tayon created a cheat sheet of Clojure functions, macros, and vars organized into categories.  He created it in LaTeX, editing it through several revisions.  One or a few revisions were manually converted to HTML for publication at URL &lt;a href=&quot;http://clojure.org/cheatsheet&quot;&gt;http://clojure.org/cheatsheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alex Miller proposed creating a single source that could then be used to automatically generate both HTML and LaTeX/PDF versions, where each symbol on the cheatsheet would be a link to documentation on clojure.github.com&lt;/p&gt;

&lt;p&gt;Andy Fingerhut created a Clojure program that, from a single data structure contained within the program, generates either HTML or LaTeX, with or without the links.  The LaTeX can be used to generate PDF files in either A4 or US letter size pages.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14374">CLJ-758</key>
            <summary>Add Clojure program to generate HTML and LaTeX cheatsheets from common source</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="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Mar 2011 18:30:40 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:57 -0600</updated>
                    <resolved>Fri, 17 Feb 2012 02:37:38 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26311" author="jafingerhut" created="Mon, 14 Mar 2011 21:19:53 -0500"  >&lt;p&gt;First attempt at patch for adding cheat sheet generator program.  See readme.txt inside there for some open questions on how this ought to be packaged, e.g. does it belong here or in clojure-contrib?  What kinds of ant/maven targets should it have?&lt;/p&gt;</comment>
                    <comment id="27734" author="jafingerhut" created="Fri, 17 Feb 2012 02:36:34 -0600"  >&lt;p&gt;Updated versions of this code for newer versions of the cheatsheet will be added to a github repo soon, perhaps this one: &lt;a href=&quot;http://github.com/fogus/clojure-cheatsheets&quot;&gt;http://github.com/fogus/clojure-cheatsheets&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10148" name="clj758-patch-v1.diff" size="69675" author="jafingerhut" created="Mon, 14 Mar 2011 21:19:53 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-756] Workable upload destination for release zips</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-756</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;We have been using Github&apos;s file upload under &lt;a href=&quot;http://github.com/clojure&quot;&gt;http://github.com/clojure&lt;/a&gt; for uploading releases&lt;/p&gt;

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

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


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

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


&lt;p&gt;In order to get 1.3.0-alpha6 out the door (and end a multihour ordeal) I am pushing it to the files section at clojure.org. &lt;/p&gt;</description>
                <environment></environment>
            <key id="14372">CLJ-756</key>
            <summary>Workable upload destination for release zips</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 11 Mar 2011 15:10:44 -0600</created>
                <updated>Fri, 22 Apr 2011 09:34:52 -0500</updated>
                    <resolved>Fri, 22 Apr 2011 09:34:51 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26309" author="stuart.sierra" created="Sun, 13 Mar 2011 17:59:07 -0500"  >&lt;p&gt;What&apos;s behind clojure.org?  Is it a real server we can log into or some kind of hosted app?&lt;/p&gt;</comment>
                    <comment id="26382" author="redinger" created="Fri, 22 Apr 2011 09:34:52 -0500"  >&lt;p&gt;Will take this up with GitHub if we continue to have problems.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

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

<item>
            <title>[CLJ-746] Unreference keywords not correctly removed from keyword table (Utils.clearCache)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-746</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I just ran into &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-444&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-444&lt;/a&gt; in clojure 1.2 and think the anlaysis there missed the cause of the issue.&lt;/p&gt;

&lt;p&gt;Reading &lt;a href=&quot;http://download.oracle.com/javase/1.4.2/docs/api/java/lang/ref/ReferenceQueue.html#poll(&quot;&gt;http://download.oracle.com/javase/1.4.2/docs/api/java/lang/ref/ReferenceQueue.html#poll(&lt;/a&gt;) suggests poll removes an item from the queue.&lt;/p&gt;

&lt;p&gt;In Util.clearCache, there are two calls to rq.poll() with discarded return values, with the result that some of the enqueued soft references are not being removed from cache (ie the keyword table)&lt;/p&gt;</description>
                <environment></environment>
            <key id="14360">CLJ-746</key>
            <summary>Unreference keywords not correctly removed from keyword table (Utils.clearCache)</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="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Fri, 25 Feb 2011 17:09:11 -0600</created>
                <updated>Fri, 4 Mar 2011 21:49:42 -0600</updated>
                    <resolved>Fri, 4 Mar 2011 21:49:42 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26275" author="stu" created="Fri, 4 Mar 2011 21:49:17 -0600"  >&lt;p&gt;The references do not need to be removed using the queue. They can be (and are) removed by directly walking the values of the map. The queue serves only to notify that this work needs to be done.&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-744] proxy hides protected final methods</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-744</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When using proxy to override a class that has a protected final method, that method is not exposed.&lt;/p&gt;

&lt;p&gt;For example, given the class:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;ProxyMe.java&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; class ProxyMe {
    &lt;span class=&quot;code-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; void publicFinal() {}
    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; void protectedNonFinal() {}
    &lt;span class=&quot;code-keyword&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; void protectedFinal() {}
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And the Clojure code:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;proxy_me.clj&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(ns proxy-me
  (:import ProxyMe))

(def proxied-class (class (proxy [ProxyMe] [])))
(def no-args (into-array Class []))

; both are ok
(.getMethod proxied-class &quot;publicFinal&quot; no-args)
(.getMethod proxied-class &quot;protectedNonFinal&quot; no-args)

; throws NoSuchMethodException
(.getMethod proxied-class &quot;protectedFinal&quot; no-args)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Any attempt to access &lt;tt&gt;protectedFinal()&lt;/tt&gt; fails.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14358">CLJ-744</key>
            <summary>proxy hides protected final methods</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="dsg">Daniel Solano G&#243;mez</reporter>
                        <labels>
                    </labels>
                <created>Tue, 22 Feb 2011 20:51:20 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Fri, 25 Feb 2011 13:34:06 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26230" author="dsg" created="Tue, 22 Feb 2011 21:34:18 -0600"  >&lt;p&gt;I should have re-read the documentation.&lt;/p&gt;</comment>
                    <comment id="26231" author="dsg" created="Tue, 22 Feb 2011 22:01:30 -0600"  >&lt;p&gt;Okay, someone on #clojure ran into this problem as well, and I have verified it&apos;s an actual bug for both gen-class and proxy.  Neither one has access to protected final methods.&lt;/p&gt;</comment>
                    <comment id="26242" author="dsg" created="Fri, 25 Feb 2011 13:34:07 -0600"  >&lt;p&gt;I&apos;ve looked into this a bit more, and I think it&apos;s difficult for proxy to be able to call protected final methods.  It would be nice to be able to do, but for now I think it&apos;s best allow that functionality through gen-class.&lt;/p&gt;

&lt;p&gt;I will open a new ticket with a patch to allow gen-class to expose protected final methods.&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-743] Error messages for invalid destructured bindings are not helpful</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-743</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Errors in destructured forms throw errors that give no clue to what the actual problem is. For example, evaluating (let [&lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt; 3] a) throws a &apos;nth not supported on type Long&apos; error. It is not obvious that the destructuring expression is at fault.&lt;/p&gt;

&lt;p&gt;There should be another exception at the top level in the stack trace, something along the lines of of &quot;DestructuringException: value &amp;lt;value&amp;gt; could not be destructured&quot;, with the &apos;nth not supported&apos; exception as its cause.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14357">CLJ-743</key>
            <summary>Error messages for invalid destructured bindings are not helpful</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="lvanderhart">Luke VanderHart</assignee>
                                <reporter username="lvanderhart">Luke VanderHart</reporter>
                        <labels>
                    </labels>
                <created>Tue, 22 Feb 2011 19:28:26 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Thu, 24 Feb 2011 18:36:24 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26235" author="lvanderhart" created="Wed, 23 Feb 2011 20:27:27 -0600"  >&lt;p&gt;This may not be possible. Destructuring is implemented as a macro-like transformation on the expressions - by the time the expressions are evaluated and an error occurs, the runtime has no way of knowing that the expression was once destructured.&lt;/p&gt;

&lt;p&gt;Tagging the expressions with some sort of flag to indicate they were destructured is unviable. Not only is is complicated, it has runtime performance penalties.&lt;/p&gt;</comment>
                    <comment id="26237" author="stu" created="Thu, 24 Feb 2011 18:35:48 -0600"  >&lt;p&gt;I don&apos;t see a way to do this without runtime implications, even in the no-error case. I guess the destructure macro could emit special variants &lt;tt&gt;destructuring-nth&lt;/tt&gt; and &lt;tt&gt;destructuring-get&lt;/tt&gt;, etc. that provide specaliazed error messages...&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-732] (keyword &quot;&quot;) can be printed, but not read</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-732</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;user=&amp;gt; (keyword &quot;&quot;)&lt;br/&gt;
:&lt;br/&gt;
user=&amp;gt; (prn-str *1)&lt;br/&gt;
&quot;:\n&quot;&lt;br/&gt;
user=&amp;gt; (read-string *1)&lt;br/&gt;
java.lang.RuntimeException: java.lang.Exception: Invalid token: : (NO_SOURCE_FILE:0)&lt;/p&gt;

&lt;p&gt;This obviously isn&apos;t a huge defect, but I&apos;d argue that anything that can be printed should be readable.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14345">CLJ-732</key>
            <summary>(keyword &quot;&quot;) can be printed, but not read</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="ztellman">Zach Tellman</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Jan 2011 17:45:52 -0600</created>
                <updated>Fri, 29 Jul 2011 07:49:21 -0500</updated>
                    <resolved>Fri, 29 Jul 2011 07:49:20 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26182" author="stu" created="Fri, 28 Jan 2011 09:06:23 -0600"  >&lt;p&gt;Patch that throws IllegalArgumentException would be ok for this.&lt;/p&gt;</comment>
                    <comment id="26348" author="stu" created="Tue, 5 Apr 2011 20:57:08 -0500"  >&lt;p&gt;After a brief review of places that call intern, it appears that this problem might never be reached in the reader, only in user code calling (keyword ...). Does it make more sense to have the patch there, and a matching change for (symbol ...)?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10164" name="clj-732.diff" size="1366" author="aredington" created="Fri, 25 Mar 2011 15:53:10 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10006">Incomplete</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                        <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>richhickey</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-725] (;) causes repl to hang in Clojure 1.3-0-alpha3 on Mac OS X 10.6.3 Intel</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-725</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;From the new-to-Clojure but very excited about the language perspective, this seems simply seemed like low-priority-but-should-be-fixed-eventually bug. When I invoked ; as a function name by accident, I found that the REPL simply hung.&lt;/p&gt;

&lt;p&gt;jaten@host151:~$ uname -a&lt;br/&gt;
Darwin host151.wifi.epochcoffee.com 10.3.0 Darwin Kernel Version 10.3.0: Fri Feb 26 11:58:09 PST 2010; root:xnu-1504.3.12~1/RELEASE_I386 i386&lt;/p&gt;

&lt;p&gt;jaten@host151:~$ java -server -cp &quot;/home/jaten/pkg/clojure/jars/*&quot; clojure.main&lt;br/&gt;
Clojure 1.3.0-alpha3&lt;br/&gt;
user=&amp;gt; (&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; ; causes REPL to hang forever...???&lt;/p&gt;

&lt;p&gt;Also happens in clojure 1.2.0. I didn&apos;t try any other versions.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14338">CLJ-725</key>
            <summary>(;) causes repl to hang in Clojure 1.3-0-alpha3 on Mac OS X 10.6.3 Intel</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="jaten">Jason E. Aten</reporter>
                        <labels>
                    </labels>
                <created>Sat, 22 Jan 2011 19:11:56 -0600</created>
                <updated>Wed, 26 Jan 2011 00:30:00 -0600</updated>
                    <resolved>Wed, 26 Jan 2011 00:30:00 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26171" author="chouser@n01se.net" created="Wed, 26 Jan 2011 00:30:00 -0600"  >&lt;p&gt;The semicolon comments out the rest of the line, including the close paren.  The REPL then blocks waiting for the expression begun with the open paren to be completed with an (uncommented) close paren.  If you type a second close paren on and press Enter, I think you&apos;ll see the REPL was not hung but just waiting for more input.&lt;/p&gt;

&lt;p&gt;I don&apos;t know if it would be useful to provide a different prompt instead of no prompt at all when the REPL is waiting for the conclusion of an expression, but in any case that would be a feature request.&lt;/p&gt;

&lt;p&gt;The current behavior is as expected.&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-724] bean throws NPE when key doesn&apos;t exist</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-724</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The result of (bean obj) throws a NullPointerException when passed in a key that doen&apos;t exist. I think instead it should return nil to be consistent with maps and records - or at least the error message should be more explicit.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14337">CLJ-724</key>
            <summary>bean throws NPE when key doesn&apos;t exist</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="bsteuber">Benjamin Teuber</reporter>
                        <labels>
                    </labels>
                <created>Sat, 22 Jan 2011 09:57:23 -0600</created>
                <updated>Tue, 5 Apr 2011 20:46:42 -0500</updated>
                    <resolved>Tue, 5 Apr 2011 20:46:41 -0500</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26332" author="aredington" created="Fri, 25 Mar 2011 09:51:31 -0500"  >&lt;p&gt;The proxy returned by (bean) performs a bare invocation on the getter method without checking if it exists first. Fixed the bug by adding a long-hand constantly as the missing value for the map fetch. (constantly is not defined yet when core_proxy is read.)&lt;/p&gt;

&lt;p&gt;Also renamed the property map defined in bean to &apos;propmap&apos; instead of &apos;pmap&apos; to avoid ambiguity with clojure.core/pmap&lt;/p&gt;</comment>
                    <comment id="26347" author="stu" created="Tue, 5 Apr 2011 20:46:42 -0500"  >&lt;p&gt;Beans aren&apos;t maps, and without any discussion of motivation it isn&apos;t clear that this change is an improvement.&lt;/p&gt;

&lt;p&gt;If bean was more consumer-friendly, people might use it in production more often. Don&apos;t. Reflection is slow. If there is a motivating use case other than REPL exploration for converting beans to maps, let&apos;s design something more performant targeted to that case.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10163" name="clj-724.diff" size="2850" author="aredington" created="Fri, 25 Mar 2011 09:51:31 -0500" />
                </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>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-723] Add def- macro to core</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-723</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Having a def- macro in core as sugar for ^:private seems consistent and nice.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14336">CLJ-723</key>
            <summary>Add def- macro to 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="bsteuber">Benjamin Teuber</reporter>
                        <labels>
                    </labels>
                <created>Sat, 22 Jan 2011 09:34:02 -0600</created>
                <updated>Sat, 22 Jan 2011 09:49:32 -0600</updated>
                    <resolved>Sat, 22 Jan 2011 09:49:32 -0600</resolved>
                            <version>Release 1.3</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10088" name="add-def-.patch" size="821" author="bsteuber" created="Sat, 22 Jan 2011 09:34:02 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-722] Misleading documentation string in doseq</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-722</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The documentation string of doseq is slightly misleading because it doesn&apos;t state that doseq will behave like &quot;do&quot; when the seq-exprs argument is empty.&lt;/p&gt;

&lt;p&gt;Attached patch clarifies this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14335">CLJ-722</key>
            <summary>Misleading documentation string in doseq</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="ghoseb">Baishampayan Ghose</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Jan 2011 09:30:28 -0600</created>
                <updated>Fri, 2 Dec 2011 09:12:04 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:12:04 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26189" author="aaron" created="Fri, 28 Jan 2011 10:40:15 -0600"  >&lt;p&gt;Rich is this behavior intentional or a side effect?  Just wondering about this before I promote it up.&lt;/p&gt;</comment>
                    <comment id="27368" author="hiredman" created="Tue, 29 Nov 2011 19:38:59 -0600"  >&lt;p&gt;looks like an implementation detail to me.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10085" name="0001-Fix-the-docstring-of-doseq-to-clarify-that-it-works-.patch" size="882" author="ghoseb" created="Fri, 21 Jan 2011 09:30:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <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-717] A range function for characters, char-range</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-717</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve seen a lot of cases where people would do stuff 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;(def alphabet &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or other equally meh things in order to get a range of characters. Haskell&apos;s range supports creating ranges of characters, so that was inspiration for this addition.&lt;/p&gt;

&lt;p&gt;I&apos;ve created a function that is the analogue of range for characters. I&apos;ve called it char-range. It works almost precisely the same as range (and uses range under the hood), only the upper bound isn&apos;t exclusive. It made more sense to me for it to be inclusive, so that things like &lt;tt&gt;(char-range \a \z)&lt;/tt&gt; work and make sense.&lt;/p&gt;

&lt;p&gt;It takes the same argument combinations as range. For no arguments, it produces a lazy sequence of characters from Character/MIN_VALUE to Character/MAX_VALUE. For two arguments, it produces a lazy sequence from Character/MIN_VALUE to end. It allows for the same stepping that range allows for as well.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14330">CLJ-717</key>
            <summary>A range function for characters, char-range</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="anthonysimpson">Anthony Simpson</reporter>
                        <labels>
                    </labels>
                <created>Sat, 15 Jan 2011 07:11:10 -0600</created>
                <updated>Sun, 16 Jan 2011 09:12:39 -0600</updated>
                    <resolved>Sat, 15 Jan 2011 16:33:37 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26135" author="anthonysimpson" created="Sat, 15 Jan 2011 10:29:06 -0600"  >&lt;p&gt;A friend pointed out to me that I shouldn&apos;t have set the issue&apos;s approval to &apos;Test&apos;. I took &quot;If the ticket has (or you write) a patch that applies, test it. If it seems to work, set the status to &quot;Test.&quot;&quot; out of context. I don&apos;t see a way to set the Approval back to &quot;None&quot;, so I&apos;m just going to apologize and whistle.&lt;/p&gt;</comment>
                    <comment id="26137" author="stu" created="Sat, 15 Jan 2011 16:30:18 -0600"  >&lt;p&gt;Before implementing a feature like this, please document the problem and the other possible solutions/variants. Some things to think about:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;is the alphabet example a one-off, or representative of a family of things that are causing real pain?
	&lt;ul&gt;
		&lt;li&gt;wouldn&apos;t alphabet be less readable as a range? You&apos;d have to use two ranges, and know the character after Z&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;we already have range, this would add char-range. Are other things rangeable?
	&lt;ul&gt;
		&lt;li&gt;Haskell comparison useful&lt;/li&gt;
		&lt;li&gt;more so if expanded to a few other languages&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;if rangeable-ness is going to extend to non-numeric things, should it be polymorphic, instead of separate functions?&lt;/li&gt;
	&lt;li&gt;is rangeable-ness a categoric thing, like Comparable?
	&lt;ul&gt;
		&lt;li&gt;if so, are there ever types that might range in more than one way&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;what are the performance/needs and expectations of char-range users? At a glance, this patch uses higher-order fns and a fair amount of boxing, where the existing range fn is built in a lower-level way.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;If you want, please start a design discussion at &lt;a href=&quot;http://dev.clojure.org/display/design/Home&quot;&gt;http://dev.clojure.org/display/design/Home&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26138" author="scott" created="Sat, 15 Jan 2011 18:14:21 -0600"  >&lt;p&gt;It&apos;s a lot easier to tell that &lt;tt&gt;(char-range \a \z)&lt;/tt&gt; is correct than &lt;tt&gt;&quot;abcdefghijkmnopqrstuvwxyz&quot;&lt;/tt&gt; (did you notice the missing character at a glance?). &lt;/p&gt;

&lt;p&gt;Why would you need to know the character after Z? The OP clearly said the upper bound would be inclusive.&lt;/p&gt;

&lt;p&gt;As for performance, &lt;tt&gt;char-range&lt;/tt&gt; uses the functions &lt;tt&gt;map&lt;/tt&gt; and &lt;tt&gt;range&lt;/tt&gt; which are themselves built in a fast low-level way, so as long as they perform well, so will &lt;tt&gt;char-range&lt;/tt&gt;.&lt;/p&gt;</comment>
                    <comment id="26139" author="stu" created="Sun, 16 Jan 2011 09:12:39 -0600"  >&lt;p&gt;So range will be exclusive while char-range will be inclusive? Tough sell. You will need more motivation that this one example.&lt;/p&gt;

&lt;p&gt;I am not saying this couldn&apos;t be the right patch. I am saying that the hard part is answering the design questions, which has to come first. Also, threaded comments on a patch isn&apos;t the best place to do it. If char-range is important enough to you, then please start a design page under &lt;a href=&quot;http://dev.clojure.org/display/design/Home&quot;&gt;http://dev.clojure.org/display/design/Home&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10080" name="char-range.diff" size="1184" author="anthonysimpson" created="Sat, 15 Jan 2011 07:11: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-714] Real multi-line comments</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-714</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The (comment) macro is not a viable substitute for real multi-line comments:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;It evaluates to nil, so isn&apos;t really useful except at the top level&lt;/li&gt;
	&lt;li&gt;It requires proper paren/etc nesting inside itself&lt;/li&gt;
	&lt;li&gt;Contents must be valid tokens; for example TODO: is illegal inside a (comment)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Common Lisp has #|...|# for multi-line comments, and I think Clojure would benefit from having them too. I&apos;ve implemented #| to behave in a way that is identical (so far as I am able to test) to CL&apos;s implementation, and added tests to the reader test to verify that they work.&lt;/p&gt;

&lt;p&gt;Apologies for my formatting in the java files not quite matching up with the rest of the code: I didn&apos;t want to go through the pain of making it perfect unless this patch would actually be accepted; I can go back through if necessary.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14323">CLJ-714</key>
            <summary>Real multi-line comments</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="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Jan 2011 23:53:50 -0600</created>
                <updated>Sat, 3 Sep 2011 22:05:50 -0500</updated>
                    <resolved>Sat, 3 Sep 2011 22:05:50 -0500</resolved>
                                                                    <due></due>
                    <votes>5</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26116" author="anthonysimpson" created="Tue, 11 Jan 2011 23:56:53 -0600"  >&lt;p&gt;I am totally for this. I agree that comment isn&apos;t a valid substitution. comment is useless for a lot of things.&lt;/p&gt;</comment>
                    <comment id="26117" author="bsteuber" created="Thu, 13 Jan 2011 06:09:30 -0600"  >&lt;p&gt;Nice - but are you sure just doing nothing on an unexpected EOF is a good idea?&lt;br/&gt;
I guess it usually means I&apos;ve forgotten the close tag somewhere, so I&apos;d rather be informed about it by an exception. Omitting the |# on purpose just to save two characters seems dirty to me.&lt;/p&gt;</comment>
                    <comment id="26118" author="grkuntzmd" created="Thu, 13 Jan 2011 08:19:45 -0600"  >&lt;p&gt;What about &lt;tt&gt;#_(...)&lt;/tt&gt;?&lt;/p&gt;

&lt;p&gt;I know that the parens have to be balanced, but other than that, doesn&apos;t it do everything else?&lt;/p&gt;</comment>
                    <comment id="26119" author="anthonysimpson" created="Thu, 13 Jan 2011 08:35:11 -0600"  >&lt;p&gt;No.&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; #_(TODO: Hi there!)
java.lang.Exception: Invalid token: TODO:
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then, as you mentioned, we have the paren balance problem. The idea is to have something &lt;b&gt;completely&lt;/b&gt; ignores what is inside of it.&lt;/p&gt;</comment>
                    <comment id="26120" author="amalloy" created="Thu, 13 Jan 2011 13:13:28 -0600"  >&lt;p&gt;Good point, Benjamin. I just assumed most languages didn&apos;t need comments to close nicely, but having tried it out I can&apos;t find a single one that would let me get away with an unclosed multi-line comment.&lt;/p&gt;

&lt;p&gt;Revised patch attached, and using git format-patch now that I know it exists.&lt;/p&gt;</comment>
                    <comment id="26121" author="a_strange_guy" created="Thu, 13 Jan 2011 16:02:03 -0600"  >&lt;p&gt;You can use #_ with string literals already:&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;TODO: Hi there!&quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The only problem we have is that we don&apos;t have raw strings. I don&apos;t think that we need another litrals for comments.&lt;/p&gt;

&lt;p&gt;And I don&apos;t see any use for multiline comments. In Java etc. you use them to uncomment parts of your program (we have #_ (...) for that) or to document classes &amp;amp; methods (we have docstrings which are superior). If you need multiline comments to explain some part of your code, then you should do something about the code (or use #_ &quot;...&quot; if you are lazy).&lt;/p&gt;</comment>
                    <comment id="26122" author="anthonysimpson" created="Thu, 13 Jan 2011 16:20:01 -0600"  >&lt;p&gt;Except with #_&quot;&quot; you can&apos;t just paste something in there because it has to be escaped properly if it has strings and such embedded in it. &lt;/p&gt;

&lt;p&gt;Sure, we can work around these limitations somewhat. We can pile hacks on hacks to get half-working multiline comments or just add this trivial patch and have real multiline comments like every other language in existence. Just sayin&apos;.&lt;/p&gt;

&lt;p&gt;Multi-line comments aren&apos;t for just explaining bad code. #_ isn&apos;t designed for this and thus is not a solution to this, and marking every line of a prewritten text with ; and/or removing or editing it later is just tedious.&lt;/p&gt;

&lt;p&gt;Curiosity: wouldn&apos;t this be useful for literate programming tools?&lt;/p&gt;</comment>
                    <comment id="26123" author="stu" created="Fri, 14 Jan 2011 07:18:09 -0600"  >&lt;p&gt;Rich: if you are interested in this assign to me and I will screen.&lt;/p&gt;</comment>
                    <comment id="26132" author="a_strange_guy" created="Fri, 14 Jan 2011 23:41:57 -0600"  >&lt;p&gt;Don&apos;t think that this is a pressing issue, because every editor that has support for Clojure (or even just Scheme/CL) has a comment-region feature.&lt;/p&gt;

&lt;p&gt;I would support adding a reader macro for raw strings, because &lt;em&gt;that&lt;/em&gt; is an issue (almost every ns docstring is escaped), and if we had those, then multiline comments would be subsumed by them:&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;#_
#[[ ;; lua-like proposal for raw strings

]]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26133" author="laujensen" created="Sat, 15 Jan 2011 07:26:36 -0600"  >&lt;p&gt;If its a pressing issue or not isn&apos;t really the question is it? &lt;/p&gt;

&lt;p&gt;To me its a straightforward patch which adds functionality currently not found in Clojure and which I personally would label a welcomed addition.&lt;/p&gt;</comment>
                    <comment id="26161" author="chouser@n01se.net" created="Mon, 24 Jan 2011 09:40:35 -0600"  >&lt;p&gt;Sure it adds a feature, but it also adds syntax and complexity to the language.  If the feature it adds doesn&apos;t solve real problems of sufficient importance, it may be a net loss for the language.&lt;/p&gt;

&lt;p&gt;For temporarily commenting out code, #_ and (comment ...) work fine.  For hunks of documentation text, ; or ;; work nicely, especially if you have an ultra-advanced editor like vim to handle your text reformatting.  Is there another use case?&lt;/p&gt;</comment>
                    <comment id="26162" author="fogus" created="Mon, 24 Jan 2011 09:59:33 -0600"  >&lt;p&gt;I&apos;m with Chouser on this.  Additionally, I would add that the description of #_ is &quot;The form following #_ is completely skipped by the reader.&quot;  However, trying something like:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;    (defn gimmie-pi []
      #_( TODO: validate the accuracy
                of the return value. )
      3)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;currently throws an exception.  Maybe the form should &lt;b&gt;really&lt;/b&gt; be skipped by the reader and allow free form text?  I don&apos;t know if this is the right answer, but I would feel more comfortable with that than a new reader macro.&lt;/p&gt;</comment>
                    <comment id="26163" author="amalloy" created="Mon, 24 Jan 2011 11:21:03 -0600"  >&lt;p&gt;I don&apos;t think that&apos;s possible, Fogus. If it&apos;s going to skip &quot;a form&quot;, then it has to understand the syntax therein well enough to determine which closing paren matches up.&lt;/p&gt;</comment>
                    <comment id="26164" author="fogus" created="Mon, 24 Jan 2011 11:40:32 -0600"  >&lt;p&gt;&amp;gt; which closing paren matches up&lt;/p&gt;

&lt;p&gt;I&apos;m sorry, I was not clear that I didn&apos;t expect my idea to provide the entire functionality of the proposed #| ... |#.  &lt;/p&gt;

&lt;p&gt;I don&apos;t see the utility in providing a whole new reader macro to allow mismatched embedded parentheses.  I can &lt;b&gt;kinda&lt;/b&gt; see the value in allowing things like `TODO:`, although I would probably just use #_() or comment and just make sure that my embedded comment was not malformed and ; otherwise.&lt;/p&gt;</comment>
                    <comment id="26175" author="richhickey" created="Wed, 26 Jan 2011 07:12:52 -0600"  >&lt;p&gt;I&apos;m opposed. I don&apos;t think the benefit/complexity ratio (especially for tools) is high enough. We&apos;ve done without for quite a while and no one&apos;s caught fire.&lt;/p&gt;</comment>
                    <comment id="26758" author="cemerick" created="Sat, 3 Sep 2011 22:05:50 -0500"  >&lt;p&gt;Closed per request from Alan Malloy.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10079" name="0001-Add-multi-line-comments.diff" size="2004" author="amalloy" created="Thu, 13 Jan 2011 13:16:16 -0600" />
                    <attachment id="10077" name="patch.txt" size="2253" author="amalloy" created="Tue, 11 Jan 2011 23:53:50 -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-709] Add a way to test/detect promise objects</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-709</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;d like a predicate to determine whether an object is a (promise). Currently promises are implemented as a reify of IFn and IDeref, meaning there is no meaningful superclass to test for. It seems to me the simplest solution would be to create an IPromise interface extending IDeref; then (defn promise? &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (instance? IPromise x)) is a simple solution. Even an empty &quot;tagging&quot; interface for IPromise would do, but it might also be nice to add a delivered? predicate for promises so that it&apos;s possible to test whether they&apos;re delivered without blocking or catching the &quot;multiple deliver&quot; exception; that would make the IPromise interface more meaningful as well.&lt;/p&gt;

&lt;p&gt;This is fairly simple stuff, so I&apos;ll start plugging away at a patch and hope nobody objects.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14318">CLJ-709</key>
            <summary>Add a way to test/detect promise objects</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="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Sun, 9 Jan 2011 02:47:21 -0600</created>
                <updated>Sat, 3 Sep 2011 22:05:51 -0500</updated>
                    <resolved>Sat, 3 Sep 2011 22:05:51 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26110" author="amalloy" created="Sun, 9 Jan 2011 02:55:35 -0600"  >&lt;p&gt;Um, just noticed &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-680&quot;&gt;http://dev.clojure.org/jira/browse/CLJ-680&lt;/a&gt; but I don&apos;t know how to close this issue as a duplicate of that one. The only thing his patch doesn&apos;t have that I&apos;d like is:&lt;/p&gt;

&lt;p&gt;(defn promise? &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (instance? IPromiseImpl x))&lt;br/&gt;
(defn has-value? &lt;span class=&quot;error&quot;&gt;&amp;#91;^IPromiseImpl x&amp;#93;&lt;/span&gt; (.hasValue x))&lt;/p&gt;</comment>
                    <comment id="26759" author="cemerick" created="Sat, 3 Sep 2011 22:05:51 -0500"  >&lt;p&gt;Closed per request from Alan Malloy.&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-707] -&gt; produces known-invalid code when it could be smarter</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-707</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(-&amp;gt; inc (comp read ())&lt;/p&gt;

&lt;p&gt;Macroexpands to (nil (comp read promise)), which is known at compile-time to be illegal code.&lt;br/&gt;
It seems like it would be harmless, and occasionally useful, to special-case () to expand into wrapping parens around the preceding form, such as:&lt;/p&gt;

&lt;p&gt;((comp inc read))&lt;/p&gt;

&lt;p&gt;I&apos;ll put together a patch for this shortly if nobody tells me it&apos;s a terrible idea.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14316">CLJ-707</key>
            <summary>-&gt; produces known-invalid code when it could be smarter</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="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Fri, 7 Jan 2011 16:27:30 -0600</created>
                <updated>Sat, 3 Sep 2011 22:05:49 -0500</updated>
                    <resolved>Sat, 3 Sep 2011 22:05:48 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26106" author="amalloy" created="Fri, 7 Jan 2011 16:28:34 -0600"  >&lt;p&gt;Sorry, that &amp;#45;&amp;gt; form came out wrong. The first line should read: (&amp;#45;&amp;gt; inc (comp read) ())&lt;/p&gt;</comment>
                    <comment id="26107" author="amalloy" created="Sat, 8 Jan 2011 00:16:13 -0600"  >&lt;p&gt;Here&apos;s me testing that my improved versions of &amp;#45;&amp;gt; and &amp;#45;&amp;gt;&amp;gt; work in my use case, and preserve existing behavior for (&amp;#45;&amp;gt; x []) just in case someone was depending on the expansion of this crazy form. Patch will be attached momentarily.&lt;/p&gt;

&lt;p&gt;clojure.core&amp;gt; (macroexpand-all &apos;(-&amp;gt; inc (comp read) ()))&lt;br/&gt;
((comp inc read))&lt;br/&gt;
clojure.core&amp;gt; (macroexpand-all &apos;(-&amp;gt;&amp;gt; inc (comp read) ()))&lt;br/&gt;
((comp read inc))&lt;br/&gt;
clojure.core&amp;gt; (macroexpand-all &apos;(-&amp;gt;&amp;gt; read (comp inc) () inc))&lt;br/&gt;
(inc ((comp inc read)))&lt;br/&gt;
clojure.core&amp;gt; (macroexpand-all &apos;(-&amp;gt; x))&lt;br/&gt;
x&lt;br/&gt;
clojure.core&amp;gt; (macroexpand-all &apos;(-&amp;gt; x []))&lt;br/&gt;
([] x)&lt;/p&gt;</comment>
                    <comment id="26108" author="amalloy" created="Sat, 8 Jan 2011 00:20:11 -0600"  >&lt;p&gt;I also factored out some of the behavior common to -&amp;gt; and -&amp;gt;&amp;gt; into a separate function - especially helpful as I was adding still more common behavior. If y&apos;all think it&apos;s a good idea I can lift the rest of the common functionality (ie the defns and recursive cases) into a macro that gets called twice, but that seems likely to be less readable and it&apos;s not like we&apos;re playing golf here.&lt;/p&gt;</comment>
                    <comment id="26115" author="amalloy" created="Tue, 11 Jan 2011 23:41:46 -0600"  >&lt;p&gt;Having run ant test, I see that defn- isn&apos;t actually available at this point in the bootstrapping process; it should read defn ^:private.&lt;/p&gt;</comment>
                    <comment id="26124" author="stu" created="Fri, 14 Jan 2011 07:38:45 -0600"  >&lt;p&gt;Rich: interested?&lt;/p&gt;</comment>
                    <comment id="26125" author="richhickey" created="Fri, 14 Jan 2011 08:06:03 -0600"  >&lt;p&gt;No&lt;/p&gt;</comment>
                    <comment id="26757" author="cemerick" created="Sat, 3 Sep 2011 22:05:49 -0500"  >&lt;p&gt;Closed per request from Alan Malloy.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10073" name="patch.txt" size="1404" author="amalloy" created="Sat, 8 Jan 2011 00:20:11 -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-694] Set func create sorted hash-set</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-694</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-javascript&quot;&gt;(def _sortedset (set (list 1,3,2)))
(println _sortedset)
(println (class _sortedset))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This code output is:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;&amp;gt;&amp;gt; #{1 2 3}
&amp;gt;&amp;gt; clojure.lang.PersistentHashSet&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;As you can see set function create hash-set, but already sorted.&lt;/p&gt;
</description>
                <environment>Ubuntu 10.04</environment>
            <key id="14303">CLJ-694</key>
            <summary>Set func create sorted hash-set</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="skrauchenia">Sergey Krauchenia</reporter>
                        <labels>
                    </labels>
                <created>Sat, 18 Dec 2010 09:43:32 -0600</created>
                <updated>Mon, 27 Dec 2010 12:51:05 -0600</updated>
                    <resolved>Mon, 27 Dec 2010 08:15:27 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26063" author="fogus" created="Mon, 27 Dec 2010 08:15:27 -0600"  >&lt;p&gt;The hash set that you&apos;re creating only seems sorted.  That is, while the ordering of a set is not guaranteed, it&apos;s a perfectly valid set if it is.  The ordering in this case is due to implementation details guided by the fact that you happen to be inserting values of the same type whose hash values are ordered.  If you make a change to one of the values then you could see a change:&lt;/p&gt;

&lt;p&gt;    (set (list 1 3.0 2))&lt;br/&gt;
    ;=&amp;gt; #{3.0 1 2)&lt;/p&gt;
</comment>
                    <comment id="26064" author="skrauchenia" created="Mon, 27 Dec 2010 12:51:05 -0600"  >&lt;p&gt;Thanks Michel for explanation.&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-692] Should &quot;some&quot; be using &quot;seq?&quot; rather than &quot;seq&quot; ?</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-692</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Very minor, but noticed while browsing that &quot;some&quot; is defined as:&lt;/p&gt;

&lt;p&gt;(defn some&lt;br/&gt;
  ...&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;pred coll&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (when (seq coll)&lt;br/&gt;
      (or (pred (first coll)) (recur pred (next coll)))))&lt;/p&gt;

&lt;p&gt;The &quot;(seq coll)&quot; call will potentially generate an unused seq each time.&lt;/p&gt;</description>
                <environment>Mac OS X Java 6</environment>
            <key id="14301">CLJ-692</key>
            <summary>Should &quot;some&quot; be using &quot;seq?&quot; rather than &quot;seq&quot; ?</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="m@mattp.name">Matthew Phillips</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 Dec 2010 03:16:22 -0600</created>
                <updated>Fri, 8 Jul 2011 03:28:42 -0500</updated>
                    <resolved>Mon, 27 Dec 2010 07:57:17 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26062" author="fogus" created="Mon, 27 Dec 2010 07:57:18 -0600"  >&lt;p&gt;The `seq` function is the idiomatic way to ask the question &quot;does this collection have something in it?&quot; and is the correct approach in the case of `some`.  If we were to use `seq?` then we would be asking an entirely different question: &quot;does this collection implement the ISeq interface&quot;.  In the case of using `seq?`, `some` would no longer work against the seq abstraction.  It&apos;s tempting to look at the name `seq` and `seq?` and assume that they mean similar things.  The type-based predicates are tricky. &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="26557" author="m@mattp.name" created="Fri, 8 Jul 2011 03:28:41 -0500"  >&lt;p&gt;Thanks for the informative comment Michael. I was just watching Rich&apos;s talk on seq&apos;s, and remembered making this noob bug report: sorry! &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-688] subs function should count back from the end of the string when given negative offset</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-688</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;subs function should count back from the end of the string when given negative offset.&lt;/p&gt;

&lt;p&gt;Patch attached with test and implementation.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14297">CLJ-688</key>
            <summary>subs function should count back from the end of the string when given negative offset</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="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Thu, 9 Dec 2010 01:28:07 -0600</created>
                <updated>Fri, 1 Mar 2013 12:46:58 -0600</updated>
                    <resolved>Fri, 31 Dec 2010 15:39:00 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26071" author="stu" created="Fri, 31 Dec 2010 15:39:00 -0600"  >&lt;p&gt;A major strength of Clojure is consistency. If &lt;tt&gt;(foo X)&lt;/tt&gt; works, then &lt;tt&gt;(foo Y)&lt;/tt&gt; should work if &lt;tt&gt;X&lt;/tt&gt; and &lt;tt&gt;Y&lt;/tt&gt; are similar in relevant ways.&lt;/p&gt;

&lt;p&gt;The negative offset convenience was considered and rejected when the string library was originally moved into Clojure. In order for a feature like this to be on the table, a proposal would need to include an evaluation of all API fns that take indexes, and a plan to either make all of them handle negative indexes, or have a meaningful rule about which ones do and which ones don&apos;t. If someone is interested in doing this, please begin with a motivating problem statement in the &lt;a href=&quot;http://dev.clojure.org/display/design/Home&quot;&gt;Design space&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That said, this feels very low priority.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10048" name="0001-subs-should-count-backwards-when-given-a-negative-ar.patch" size="1954" author="technomancy" created="Thu, 9 Dec 2010 01:28:07 -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>
                                                                                        </customfields>
    </item>

<item>
            <title>[CLJ-676] Calling seq on the resultset-seq of an empty ResultSet throws an exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-676</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The clojure.sql/resultset-seq function returns a seq over the JDBC ResultSet.  &lt;/p&gt;

&lt;p&gt;&lt;b&gt;Expected:&lt;/b&gt; calling seq on an empty ResultSet should return nil&lt;br/&gt;
&lt;b&gt;Actual:&lt;/b&gt; throws an error due to a closed ResultSet&lt;/p&gt;

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

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def db {:classname &lt;span class=&quot;code-quote&quot;&gt;&quot;oracle.jdbc.driver.OracleDriver&quot;&lt;/span&gt;
         :subprotocol &lt;span class=&quot;code-quote&quot;&gt;&quot;oracle:thin&quot;&lt;/span&gt;
         :subname &lt;span class=&quot;code-quote&quot;&gt;&quot;@detroit:1521:XE&quot;&lt;/span&gt;
         :user &lt;span class=&quot;code-quote&quot;&gt;&quot;ted&quot;&lt;/span&gt;
         :password &lt;span class=&quot;code-quote&quot;&gt;&quot;nugent&quot;&lt;/span&gt;
         :schema &lt;span class=&quot;code-quote&quot;&gt;&quot;sweaty&quot;&lt;/span&gt;})

(with-connection db
  (with-query-results res [&lt;span class=&quot;code-quote&quot;&gt;&quot;SELECT 1 FROM dual WHERE 0=1&quot;&lt;/span&gt;]
    (seq res)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;returns:&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.sql.SQLRecoverableException: Closed Resultset: next
  [Thrown class java.lang.RuntimeException]

Backtrace:
  0: clojure.lang.LazySeq.sval(LazySeq.java:47)
  1: clojure.lang.LazySeq.seq(LazySeq.java:56)
  2: clojure.lang.Cons.next(Cons.java:39)
  3: clojure.lang.RT.next(RT.java:560)
  4: clojure.core$next.invoke(core.clj:61)
  5: clojure.core$nthnext.invoke(core.clj:3399)
  6: clojure.core$print_sequential.invoke(core_print.clj:55)
  7: clojure.core$fn__4845.invoke(core_print.clj:138)
  8: clojure.lang.MultiFn.invoke(MultiFn.java:167)
  9: clojure.core$pr_on.invoke(core.clj:2812)
 10: clojure.core$pr.invoke(core.clj:2824)
 11: clojure.lang.AFn.applyToHelper(AFn.java:163)
 12: clojure.lang.RestFn.applyTo(RestFn.java:133)
 13: clojure.core$apply.invoke(core.clj:540)
 14: clojure.core$pr_str.doInvoke(core.clj:3700)
 15: clojure.lang.RestFn.invoke(RestFn.java:409)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Suggested workaround: &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-connection db
  (with-query-results res [&lt;span class=&quot;code-quote&quot;&gt;&quot;SELECT 1 FROM dual WHERE 0=0&quot;&lt;/span&gt;]
    (not (empty? res))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14284">CLJ-676</key>
            <summary>Calling seq on the resultset-seq of an empty ResultSet throws an 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="alexmiller">Alex Miller</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Nov 2010 16:13:56 -0600</created>
                <updated>Fri, 17 Dec 2010 19:56:22 -0600</updated>
                    <resolved>Fri, 17 Dec 2010 19:56:22 -0600</resolved>
                            <version>Release 1.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="26055" author="stuart.sierra" created="Fri, 17 Dec 2010 19:56:22 -0600"  >&lt;p&gt;This is not a Clojure issue.  clojure.contrib.sql is part of the old clojure-contrib project, soon to be replaced.&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-670] Add filter-indexed function</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-670</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In Clojure 1.2, keep-indexed and map-indexed were introduced in lieu of promoting clojure.contrib.seq/indexed.&lt;/p&gt;

&lt;p&gt;The difference between filter and keep is that keep treats false and nil differently; only nil values are removed. This behaviour may be desired in some places, but filter is much more common. It seems that since keep-indexed exists without filter-indexed, people might pull in the nil/false distinction where that&apos;s not appropriate.&lt;/p&gt;

&lt;p&gt;I can provide a patch for this if desired.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14272">CLJ-670</key>
            <summary>Add filter-indexed function</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="technomancy">Phil Hagelberg</reporter>
                        <labels>
                    </labels>
                <created>Thu, 4 Nov 2010 11:56:41 -0500</created>
                <updated>Thu, 6 Jan 2011 16:02:12 -0600</updated>
                    <resolved>Thu, 6 Jan 2011 16:02:11 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26073" author="stu" created="Fri, 31 Dec 2010 15:43:16 -0600"  >&lt;p&gt;Rich: Please mark this waiting on Phil if you want a patch for this, or decline if not. &lt;/p&gt;</comment>
                    <comment id="26084" author="richhickey" created="Tue, 4 Jan 2011 20:17:08 -0600"  >&lt;p&gt;The difference between filter and keep is that filter returns the values in the collection based upon the predicate function and keep returns the result of the function itself.&lt;/p&gt;

&lt;p&gt;Is this an actual problem people are having or a completeness exercise?&lt;/p&gt;</comment>
                    <comment id="26093" author="technomancy" created="Thu, 6 Jan 2011 16:02:12 -0600"  >&lt;p&gt;OK, this is due to a misunderstanding then; I must have read some misleading info about keep.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                        <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>technomancy</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[CLJ-463] Strip leading colons when creating keywords from single strings</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-463</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This seems unfortunate:&lt;/p&gt;

&lt;p&gt;=&amp;gt; (-&amp;gt; :foo str keyword)&lt;br/&gt;
::foo&lt;/p&gt;

&lt;p&gt;Symbols are far saner in this regard:&lt;/p&gt;

&lt;p&gt;=&amp;gt; (-&amp;gt; &apos;foo str symbol)&lt;br/&gt;
foo&lt;/p&gt;

&lt;p&gt;Simply stripping leading colons from strings prior to turning them into keywords should suffice. The 2-arity Keyword.intern method and clojure.core/keyword fn should be left intact, so as to provide an escape hatch for those that really do need colon-prefixed keywords.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13860">CLJ-463</key>
            <summary>Strip leading colons when creating keywords from single strings</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 20 Oct 2010 04:41:00 -0500</created>
                <updated>Fri, 19 Nov 2010 10:07:07 -0600</updated>
                    <resolved>Fri, 19 Nov 2010 10:07:06 -0600</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24315" author="importer" created="Wed, 20 Oct 2010 04:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/463&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/463&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
463-strip-keyword-colons.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bKmJCu2_Wr36meeJe5cbLA/download/bKmJCu2_Wr36meeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bKmJCu2_Wr36meeJe5cbLA/download/bKmJCu2_Wr36meeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24316" author="importer" created="Wed, 20 Oct 2010 04:44:00 -0500"  >&lt;p&gt;cemerick said: [&lt;a href=&quot;file:bKmJCu2_Wr36meeJe5cbLA&quot;&gt;file:bKmJCu2_Wr36meeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="25887" author="stu" created="Fri, 29 Oct 2010 10:00:11 -0500"  >&lt;p&gt;I am uncomfortable with this. If I say (keyword &quot;::foo&quot;), what am I asking for? I almost wonder if this should throw an exception.&lt;/p&gt;</comment>
                    <comment id="25888" author="richhickey" created="Fri, 29 Oct 2010 10:07:09 -0500"  >&lt;p&gt;I think (keyword &quot;::foo&quot;) (and any more leading colons) should fail, and this patch should only strip one colon.&lt;/p&gt;</comment>
                    <comment id="25894" author="cemerick" created="Fri, 29 Oct 2010 11:11:52 -0500"  >&lt;p&gt;Updated patch forthcoming.&lt;/p&gt;</comment>
                    <comment id="25947" author="cemerick" created="Fri, 19 Nov 2010 10:07:06 -0600"  >&lt;p&gt;After thinking about this for a while, I&apos;ve now reversed my position, and am in favor or retaining the current functionality.  Thanks for the pushback.&lt;/p&gt;

&lt;p&gt;As for throwing exceptions on colon-prefixed, un-namespaced keywords, I&apos;m not certain that that&apos;s a good idea.  People use keywords to hold all sorts of data, use them as map keys and lookup fns, etc.&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-461] require namespace implicitly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-461</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Referencing a function with a fully-qualified namespace should work without first using require or use, similar to how a fully-qualified java class can be used without importing it.&lt;/p&gt;

&lt;p&gt;It&apos;s a small change in Compiler that tries to call (require x) if the fully qualified classname is not found.  This should give priority to the java class, which protects backwards compatibility.  There is no runtime performance impact, only compile time (the first time the namespace is seen).  The fact that code (the namespace) is loaded during compilation of a form is no different than loading code to look up a java class.&lt;/p&gt;

&lt;p&gt;This makes it easier to write quick scripts as in the example below, also to use one-liners in the repl or ad hoc in code.&lt;/p&gt;

&lt;p&gt;For example: java -cp src/clj/:classes clojure.main -e &quot;(clojure.set/union #{1} #{2})&quot;&lt;br/&gt;
&lt;br/&gt;
Currently on master, this produces: Exception in thread &quot;main&quot; java.lang.ClassNotFoundException: clojure.set&lt;br/&gt;
but this works: java -cp src/clj/:classes clojure.main -e &quot;(require &apos;clojure.set) (clojure.set/union #{1} #{2})&quot;&lt;/p&gt;

&lt;p&gt;Obviously, (use) would make the code shorter, but my goal is to make it implicit.&lt;/p&gt;

&lt;p&gt;Discussion: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/t/69823ce63dd94a0c&quot;&gt;http://groups.google.com/group/clojure-dev/t/69823ce63dd94a0c&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13858">CLJ-461</key>
            <summary>require namespace implicitly</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="1" iconUrl="http://dev.clojure.org/jira/images/icons/priority_blocker.gif">Blocker</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="mikehinchey">Mike Hinchey</assignee>
                                <reporter username="mikehinchey">Mike Hinchey</reporter>
                        <labels>
                    </labels>
                <created>Sat, 16 Oct 2010 02:41:00 -0500</created>
                <updated>Tue, 21 Jun 2011 18:41:38 -0500</updated>
                    <resolved>Tue, 21 Jun 2011 18:41:38 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="24311" author="importer" created="Sun, 17 Oct 2010 21:37:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/461&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/461&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
mh-461-require.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cQSfQ22L8r37zxeJe5cbCb/download/cQSfQ22L8r37zxeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cQSfQ22L8r37zxeJe5cbCb/download/cQSfQ22L8r37zxeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24312" author="importer" created="Sun, 17 Oct 2010 21:37:00 -0500"  >&lt;p&gt;mikehinchey said: [&lt;a href=&quot;file:cQSfQ22L8r37zxeJe5cbCb&quot;&gt;file:cQSfQ22L8r37zxeJe5cbCb&lt;/a&gt;]: patch to fix #461&lt;/p&gt;</comment>
                    <comment id="24313" author="importer" created="Sun, 17 Oct 2010 21:37:00 -0500"  >&lt;p&gt;mikehinchey said: The discussion shows some people want this, other&apos;s aren&apos;t sure.  Attached the patch so people can try it out.&lt;/p&gt;</comment>
                    <comment id="26025" author="stuart.sierra" created="Sun, 12 Dec 2010 16:06:47 -0600"  >&lt;p&gt;One problem I see: With this change, it becomes harder for code-reading tools to determine all the dependencies of a namespace without evaluating it. Right now, I can &lt;a href=&quot;https://github.com/stuartsierra/lazytest/blob/86a75572e81625b09f9ed15981fb9efd670e00a9/modules/lazytest/src/main/clojure/lazytest/nsdeps.clj&quot;&gt;parse the &quot;ns&quot; declaration&lt;/a&gt; of any file and know its dependencies. (Obviously, this breaks if the file loads code outside of the &quot;ns&quot; declaration, but then static analysis is virtually impossible.) &lt;/p&gt;

&lt;p&gt;With this change, the &quot;ns&quot; declaration no longer represents the complete set of dependencies for the namespace. I can try to read the whole file, but I have no way of knowing if &quot;foo.bar.baz/quux&quot; represents a namespace-qualified symbol or a static Java member, unless I evaluate it.&lt;/p&gt;

&lt;p&gt;I think loading Java classes and loading Clojure namespaces are fundamentally different operations because classes, unlike namespaces, cannot change after they are loaded.&lt;/p&gt;</comment>
                    <comment id="26500" author="pjstadig" created="Fri, 10 Jun 2011 14:01:27 -0500"  >&lt;p&gt;Stuart,&lt;br/&gt;
On the first point: it is already hard for code-reading tools.  One can (require &apos;something) outside of the ns form.  There are also uses of eval, direct references to fully qualified classes, and other nefarious ways.  You seem to have admitted this already, so I&apos;m not quite sure what you are objecting to?  Objection 1: OVERRULED.&lt;/p&gt;

&lt;p&gt;On the second point: you already admitted above that the ns declaration doesn&apos;t represent the complete set of dependencies, so there is no &quot;no longer&quot; about it.  It was just never the case.  Secondly, &quot;foo.bar.baz/quux&quot; could be a static Java member, or a Clojure Var, but that is irrelevant to this patch.  That was always the case, and the patch is about autoloading, not about interpreting to what &quot;foo.bar.baz/quux&quot; is referring.  Objection 2: OVERRULED.&lt;/p&gt;

&lt;p&gt;On the third point: again, I don&apos;t see the relevance of the fact that a namespace can be changed after it has been loaded but a class cannot.  Again, the patch is about autoloading, and the immutability/mutability of namespaces vs. classes is orthogonal.  Objection 3: OVERRULED.&lt;/p&gt;

&lt;p&gt;Finally, the original ML thread that spawned this had a +1 from the following persons: myself, Christophe Grand, Phil Hagelberg, Laurent Petit, Steve Gilardi, Cosmin Stejerean, and Chas Emerick.&lt;/p&gt;

&lt;p&gt;It had a -1 only from: you, Dimitry Gashinsky.&lt;/p&gt;

&lt;p&gt;A negative comment from Stu Halloway, and a positive-ish comment from Chris Houser.&lt;/p&gt;

&lt;p&gt;I say we move forward with this.&lt;/p&gt;</comment>
                    <comment id="26501" author="hiredman" created="Fri, 10 Jun 2011 14:07:21 -0500"  >&lt;p&gt;I have serious reservations about the complexity this will add to the compiler. the current patch is no good, it will break for aot compilation.&lt;/p&gt;</comment>
                    <comment id="26502" author="pjstadig" created="Fri, 10 Jun 2011 14:21:52 -0500"  >&lt;p&gt;So I&apos;ve been told that my tongue-in-cheek may not have translated well, but that was the intent.  I apologize if that was the case.&lt;/p&gt;

&lt;p&gt;My point is just to draw attention to this ticket again.  It was discussed on the ML with several +1&apos;s and has been mentioned again in chat.  I don&apos;t think any of the objections that Stuart Sierra raised are particularly relevant to the question of autoloading the namespace of a fully qualified var.&lt;/p&gt;

&lt;p&gt;Has anyone tried the patch?  Kevin Downey seems to think it will not work in the context of AOT.&lt;/p&gt;

&lt;p&gt;Do we need a new patch?&lt;/p&gt;</comment>
                    <comment id="26503" author="hiredman" created="Fri, 10 Jun 2011 14:27:08 -0500"  >&lt;p&gt;the patch doesn&apos;t actually cause code to load the required namespaces to be generated. it only loads the required namespaces during compilation, which is why it breaks aot. once you get into code generation for aot it gets complicated, where does the generated code go? do we want to try and emit it separately like the requires from an ns form or does it get emitted in the middle of the particular function being compiled. I think the first approach is desirable from a stand point of correctness, but carries with it a load of complexity.&lt;/p&gt;</comment>
                    <comment id="26504" author="pjstadig" created="Fri, 10 Jun 2011 15:00:24 -0500"  >&lt;p&gt;I think it gets emitted in the middle of a function, just like would happen now if you do (require &apos;clojure.set) (clojure.set/union ...)&lt;/p&gt;

&lt;p&gt;Is there a benefit to having it emit separately like an ns form?  Isn&apos;t the ns form just a macro that turns into calls to (require ...) which happen to be at the top of a file because that&apos;s where the ns form is?&lt;/p&gt;</comment>
                    <comment id="26529" author="richhickey" created="Tue, 21 Jun 2011 18:41:24 -0500"  >&lt;p&gt;This is not a good idea, for many reasons, the simplest of which is: it makes loading a side effect of calling a function in a module. Since loading can have arbitrary effects, it shouldn&apos;t be implicit. This isn&apos;t warranted by the meager benefits it might provide.&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-455] Calculating large numbers results in java.math.BigIntegerArithmeticException</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-455</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(class (* 1000 1000 1000 1000 1000 1000 1000))&lt;br/&gt;
1.1 returns : java.math.BigInteger&lt;br/&gt;
1.3.0-alpha returns : java.math.BigIntegerArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1575)&lt;/p&gt;</description>
                <environment></environment>
            <key id="13852">CLJ-455</key>
            <summary>Calculating large numbers results in java.math.BigIntegerArithmeticException</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Oct 2010 21:36:00 -0500</created>
                <updated>Sat, 23 Oct 2010 22:52:00 -0500</updated>
                    <resolved>Sat, 23 Oct 2010 22:52:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24298" author="importer" created="Sat, 23 Oct 2010 22:52:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/455&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/455&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24299" author="importer" created="Sat, 23 Oct 2010 22:52:00 -0500"  >&lt;p&gt;ataggart said: This is correct behavior with respect to 1.3.0 (yes, it&apos;s a breaking change). &lt;/p&gt;

&lt;p&gt;If one wants to allow numbers larger than what fits in a long to flow out of math ops, one needs to explicitly start with a BigInt:&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; (type 1N)
clojure.lang.BigInt
user=&amp;gt; (class (* 1000N 1000N 1000N 1000N 1000N 1000N 1000N))
clojure.lang.BigInt&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
If one wants to allow autopromotion, one can use the &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;tick&quot;&lt;/span&gt; math ops:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;user=&amp;gt; (class (*&apos; 1000 1000 1000 1000 1000 1000 1000))
clojure.lang.BigInt&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;NB: Rich suspects almost no one should need these ops, and if you think you do, you&apos;re probably wrong.&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-452] Miscellaneous improvements to Clojure runtime usability from Java</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-452</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using Clojure from Java is very pleasant overall, but there are some rough edges, many of which could be smoothed over with very simple enhancements.  I would suggest:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;there should be an RT.var or Var.find that takes a single string&lt;/li&gt;
	&lt;li&gt;an IFn wrapper should be available that catches and rethrows Exceptions as RuntimeExceptions&lt;/li&gt;
	&lt;li&gt;a simple class (clojure.lang.Clojure perhaps?) that provides a well-documented and stable API for common operations: requiring namespaces, loading files, finding vars, evaluating strings, etc.  This also would have a side benefit of allowing breaking changes to the implementation details without breaking interop code.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;There are others of this sort that I&apos;ve come across; will update the above as I remember them.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13849">CLJ-452</key>
            <summary>Miscellaneous improvements to Clojure runtime usability from Java</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="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 6 Oct 2010 15:38:00 -0500</created>
                <updated>Fri, 7 Oct 2011 12:22:43 -0500</updated>
                    <resolved>Fri, 7 Oct 2011 12:22:41 -0500</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24286" author="importer" created="Tue, 26 Oct 2010 22:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/452&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/452&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24287" author="importer" created="Tue, 26 Oct 2010 22:30:00 -0500"  >&lt;p&gt;cemerick said: Here&apos;s an implementation of that IFn wrapper that rethrows Exceptions as RuntimeExceptions: &lt;a href=&quot;http://github.com/clojure/tools.nrepl/blob/master/src/main/clojure/clojure/tools/nrepl/SafeFn.java&quot;&gt;SafeFn.java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This makes sense to me, but perhaps not everyone. Thoughts?&lt;/p&gt;</comment>
                    <comment id="26323" author="cemerick" created="Mon, 21 Mar 2011 09:03:53 -0500"  >&lt;p&gt;See &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; for a discussion of these changes.&lt;/p&gt;</comment>
                    <comment id="26910" author="stu" created="Fri, 7 Oct 2011 12:22:21 -0500"  >&lt;p&gt;While the title of this ticket is broad, it looks like the actual discussion is about rethrowing RuntimeException. Clojure 1.3 and later solve this problem a different way, by not declaring Exception on the relevant interface points.&lt;/p&gt;

&lt;p&gt;Please add tickets for the other items discussed on the wiki as appropriate. &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-446] 1.3 alpha1 gives reflection warning in a case where 1.2 does not</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-446</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Feel free to reclassify this as something other than a bug if I&apos;ve misclassified it.&lt;/p&gt;

&lt;p&gt;Related Clojure Google group conversation: &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/83c08f6c2f313c50#&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/83c08f6c2f313c50#&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When doing AOT compilation on the attached program nbody.clj with 1.2:&lt;/p&gt;

&lt;p&gt;java -Dclojure.compile.path=. -cp clojure-1.2.0.jar:. clojure.lang.Compile nbody&lt;/p&gt;

&lt;p&gt;there are no reflection warnings, and a more complex version of the program using the type Body runs quickly.  When doing AOT compilation with 1.3 alpha1:&lt;/p&gt;

&lt;p&gt;java -Dclojure.compile.path=. -cp clojure-1.3.0-alpha1.jar:. clojure.lang.Compile nbody&lt;/p&gt;

&lt;p&gt;I see these reflection warnings, and a more complex version of the program using the type Body runs significantly more slowly, most likely due to the reflection warned about:&lt;/p&gt;

&lt;p&gt;Reflection warning, nbody.clj:18 - reference to field x can&apos;t be resolved.&lt;br/&gt;
Reflection warning, nbody.clj:19 - reference to field y can&apos;t be resolved.&lt;/p&gt;

&lt;p&gt;Changing the name of the file to nbod.clj and the first line to &quot;(ns nbod&quot;, and making corresponding changes to the compilation commands above, causes the reflection warnings to go away in 1.3 alpha1.&lt;/p&gt;

&lt;p&gt;Similarly, taking the original attached file nbody.clj and replacing the three occurrences of &quot;nbody&quot; that are not the namespace name with a different name like &quot;nbod&quot; (or probably any name other than &quot;nbody&quot;) also causes the reflection warnings to go away in 1.3 alpha1.&lt;/p&gt;

&lt;p&gt;In case it makes any difference, I was using Clojure jars pulled via Leiningen, and HotSpot 1.6.0_xxx JVMs on Mac OS X 10.5.8 and Ubuntu 10.4.&lt;/p&gt;

&lt;p&gt;Admittedly, a change with very limited impact on typical Clojure users.  I wanted to file a ticket in case this was an unwanted consequence of some desirable change in 1.3.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13843">CLJ-446</key>
            <summary>1.3 alpha1 gives reflection warning in a case where 1.2 does not</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Wed, 29 Sep 2010 02:37:00 -0500</created>
                <updated>Fri, 9 Dec 2011 15:20:10 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 15:20:10 -0600</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="24258" author="importer" created="Sun, 3 Oct 2010 01:32:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/446&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/446&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
nbody.clj - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/auzfxEY2Or35j2eJe5cbCb/download/auzfxEY2Or35j2eJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/auzfxEY2Or35j2eJe5cbCb/download/auzfxEY2Or35j2eJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24259" author="importer" created="Sun, 3 Oct 2010 01:32:00 -0500"  >&lt;p&gt;ataggart said: Fix available via #445.&lt;/p&gt;</comment>
                    <comment id="27446" author="stuart.sierra" created="Fri, 9 Dec 2011 15:19:52 -0600"  >&lt;p&gt;Marking &quot;Incomplete&quot; because no patch is included.&lt;/p&gt;

&lt;p&gt;Furthermore, I cannot reproduce the problem described using Clojure 1.3.0.&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="10006">Incomplete</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-436] Bug in clojure.contrib.json/read-json</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-436</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;b&gt;What (small set of) steps will reproduce the problem?&lt;/b&gt;&lt;br/&gt;
$ java -cp lib/clojure-1.2.0.jar:lib/clojure-contrib-1.2.0.jar clojure.main&lt;br/&gt;
Clojure 1.2.0&lt;br/&gt;
user=&amp;gt; (require &apos;clojure.contrib.json)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (clojure.contrib.json/read-json &quot;&quot;)&lt;br/&gt;
java.lang.IllegalArgumentException: Value out of range for char: -1 (NO_SOURCE_FILE:0)&lt;br/&gt;
user=&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;What is the expected output? What do you see instead?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Expected:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; eof-error?
  (&lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (EOFException. &lt;span class=&quot;code-quote&quot;&gt;&quot;JSON error (end-of-file)&quot;&lt;/span&gt;))
  eof-value)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;b&gt;What version are you using?&lt;/b&gt;&lt;br/&gt;
1.2&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Was this discussed on the group? If so, please provide a link to the discussion&lt;/b&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;13:51&amp;#93;&lt;/span&gt; &amp;lt;&lt;em&gt;na_ka_na&lt;/em&gt;&amp;gt; Hey guys I think there&apos;s a bug in clojure.contrib.json at line 116&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;13:51&amp;#93;&lt;/span&gt; &amp;lt;&lt;em&gt;na_ka_na&lt;/em&gt;&amp;gt; in clojure 1.2&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;13:52&amp;#93;&lt;/span&gt; &amp;lt;&lt;em&gt;na_ka_na&lt;/em&gt;&amp;gt; it has a (char i) and then checks for (= i -1)  ... but (char -1) fails&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;13:52&amp;#93;&lt;/span&gt; &amp;lt;&lt;em&gt;na_ka_na&lt;/em&gt;&amp;gt; where can I report it ?&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;13:53&amp;#93;&lt;/span&gt; &amp;lt;LauJensen&amp;gt; &lt;em&gt;na_ka_na&lt;/em&gt;: assembla/support&lt;/p&gt;</description>
                <environment></environment>
            <key id="13833">CLJ-436</key>
            <summary>Bug in clojure.contrib.json/read-json</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Sep 2010 13:14:00 -0500</created>
                <updated>Fri, 1 Oct 2010 15:32:00 -0500</updated>
                    <resolved>Fri, 1 Oct 2010 15:32:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24229" author="importer" created="Fri, 1 Oct 2010 15:32:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/436&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/436&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24230" author="importer" created="Fri, 1 Oct 2010 15:32:00 -0500"  >&lt;p&gt;donmullen said: Added ticket on &lt;a href=&quot;http://www.assembla.com/spaces/clojure-contrib/tickets/99-bug-in-clojure-contrib-json-read-json&quot;&gt;clojure-contrib-99&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-419] LispReader uses Character.isWhitespace rather than Character.isSpaceChar</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-419</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Character.isWhitespace doesn&apos;t handle non-breaking space correctly. Apparently it&apos;s pretty ancient from The Olden Days Before People Knew How To Do Character Encodings.&lt;/p&gt;

&lt;p&gt;In Java 1.5 Character.isSpaceChar was added, which handles supplementary characters the right way: &lt;a href=&quot;http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html#isWhitespace(char&quot;&gt;http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html#isWhitespace(char&lt;/a&gt;)&lt;/p&gt;</description>
                <environment></environment>
            <key id="13816">CLJ-419</key>
            <summary>LispReader uses Character.isWhitespace rather than Character.isSpaceChar</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 4 Aug 2010 23:31:00 -0500</created>
                <updated>Sat, 23 Oct 2010 15:03:00 -0500</updated>
                    <resolved>Sat, 23 Oct 2010 15:03:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24172" author="importer" created="Sat, 23 Oct 2010 15:03:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/419&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/419&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24173" author="importer" created="Sat, 23 Oct 2010 15:03:00 -0500"  >&lt;p&gt;stu said: Phil, &lt;/p&gt;

&lt;p&gt;Please add an example and nag me to bump the priority if this is causing real and present pain.&lt;/p&gt;</comment>
                    <comment id="24174" author="importer" created="Sat, 23 Oct 2010 15:03:00 -0500"  >&lt;p&gt;technomancy said: Eh; it&apos;s not causing real pain.&lt;/p&gt;

&lt;p&gt;I would be OK with a WONTFIX if that&apos;s what is decided. Just thought it wouldn&apos;t hurt to have a record of it somewhere (even as a closed-as-invalid ticket), and I was in a particularly pedantic mood last night for some reason.&lt;/p&gt;

&lt;p&gt;I ran across it because of an escaping bug in Wine where I wanted to treat &quot;(use &apos;foo)(-main)&quot; as a single token in bash but two still be valid Clojure code. But luckily I found a better workaround. I am OK with leaving it at lowest priority.&lt;/p&gt;</comment>
                    <comment id="24175" author="importer" created="Sat, 23 Oct 2010 15:03:00 -0500"  >&lt;p&gt;djpowell said: Hmm, I&apos;m not sure isSpaceChar is right - it doesn&apos;t seem to allow things like tabs and newlines.  If you really wanted to support non-break-space, then it would probably be best to just use isWhitespace and add them as a special case.&lt;/p&gt;

&lt;p&gt;Actually... I would quite like to see \ufeff treated as whitespace.  It is the Unicode BOM.  Some editors including Windows Notepad include the BOM at the start of UTF-8 files.  The latest Unicode docs seem to recognise the UTF-8 BOM.  By treating it as whitespace we can avoid any problems with it.&lt;/p&gt;</comment>
                    <comment id="24176" author="importer" created="Sat, 23 Oct 2010 15:03:00 -0500"  >&lt;p&gt;technomancy said: Sounds like I had this not quite right; probably not worth worrying about.&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-414] In latest clojure, empty list is neither true nor false</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-414</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In latest Clojure, compiled today:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (true? ())&lt;br/&gt;
false&lt;br/&gt;
user&amp;gt; (false? ())&lt;br/&gt;
false&lt;/p&gt;

&lt;p&gt;This makes empty collections the only entities in Clojure which are neither true, nor false. &lt;br/&gt;
I&apos;m fairly sure () used to be true &amp;#8211; is this an intentional change? Googling reveals lots of warnings about the empty list not being false in Clojure.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13811">CLJ-414</key>
            <summary>In latest clojure, empty list is neither true nor false</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Sat, 24 Jul 2010 21:56:00 -0500</created>
                <updated>Tue, 24 Aug 2010 00:35:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 00:35:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24159" author="importer" created="Tue, 24 Aug 2010 00:35:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/414&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/414&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24160" author="importer" created="Tue, 24 Aug 2010 00:35:00 -0500"  >&lt;p&gt;bpsm said: You&apos;ve confused &lt;em&gt;true?&lt;/em&gt; and &lt;em&gt;false?&lt;/em&gt; with &lt;em&gt;boolean&lt;/em&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;Clojure 1.0.1-alpha-SNAPSHOT
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;? &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;? &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;Clojure 1.1.0
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;? &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;? &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;Clojure 1.2.0-beta1
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;? &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;? &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
user=&amp;gt; (&lt;span class=&quot;code-object&quot;&gt;boolean&lt;/span&gt; &apos;())
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;boolean&lt;/em&gt; converts its argument to either &lt;b&gt;true&lt;/b&gt; or &lt;b&gt;false&lt;/b&gt;. &lt;b&gt;nil&lt;/b&gt; and &lt;b&gt;false&lt;/b&gt; yield &lt;b&gt;false&lt;/b&gt;, everything else yields &lt;b&gt;true&lt;/b&gt;. &lt;br/&gt;
&lt;em&gt;true?&lt;/em&gt; and &lt;em&gt;false?&lt;/em&gt; do no such conversion, nor should they. Only &lt;b&gt;true&lt;/b&gt; is &lt;em&gt;true?&lt;/em&gt;. Only &lt;b&gt;false&lt;/b&gt; is &lt;em&gt;false?&lt;/em&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-412] clojure.xml/emit, emit-element are not documented at clojure.org</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-412</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Neither function makes an appearance here:&lt;br/&gt;
&lt;a href=&quot;http://clojure.github.com/clojure/clojure.xml-api.html&quot;&gt;http://clojure.github.com/clojure/clojure.xml-api.html&lt;/a&gt;&lt;br/&gt;
Despite the fact that neither appears to be private. Perhaps the doc generator just ignores all functions that have no doc comment?&lt;/p&gt;</description>
                <environment></environment>
            <key id="13809">CLJ-412</key>
            <summary>clojure.xml/emit, emit-element are not documented at clojure.org</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Jul 2010 00:57:00 -0500</created>
                <updated>Tue, 24 Aug 2010 00:34:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 00:34:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24150" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/412&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/412&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24151" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;stu said: If a var is (a) public (b) has a docstring and (c) has :added metadata, then the Clojure team is committed to supporting it. These vars don&apos;t meet the criteria. In the context of a broader overhaul of XML support these might become official APIs.&lt;/p&gt;</comment>
                    <comment id="24152" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;bpsm said: That makes sense. I wasn&apos;t aware of those conventions. Perhaps the library should advertise itself as being only for XML reading:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;--- a/src/clj/clojure/xml.clj
+++ b/src/clj/clojure/xml.clj
@@ -6,7 +6,7 @@
 ;   the terms of &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; license.
 ;   You must not remove &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; notice, or any other, from &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; software.
 
-(ns ^{:doc &lt;span class=&quot;code-quote&quot;&gt;&quot;XML reading/writing.&quot;&lt;/span&gt;
+(ns ^{:doc &lt;span class=&quot;code-quote&quot;&gt;&quot;XML reading.&quot;&lt;/span&gt;
        :author &lt;span class=&quot;code-quote&quot;&gt;&quot;Rich Hickey&quot;&lt;/span&gt;}
   clojure.xml
   (:&lt;span class=&quot;code-keyword&quot;&gt;import&lt;/span&gt; (org.xml.sax ContentHandler Attributes SAXException)&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-411] clojure.xml/emit should be encoding-aware</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-411</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.xml/emit blithely asserts that it&apos;s writing UTF-8 despite the fact that it&apos;s actually writing &lt;b&gt;characters&lt;/b&gt;, not bytes. Encoding isn&apos;t actually decided until actual bytes are written. This forces clients using clojure.xml/emit to write XML back to disk to use UTF-8. They won&apos;t know to do that unless they actually peek at the implementation. This behavior isn&apos;t documented.&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 emit [x]
  (println &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&amp;gt;&quot;&lt;/span&gt;)
  (emit-element x))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13808">CLJ-411</key>
            <summary>clojure.xml/emit should be encoding-aware</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Jul 2010 00:53:00 -0500</created>
                <updated>Fri, 1 Oct 2010 09:56:00 -0500</updated>
                    <resolved>Fri, 1 Oct 2010 09:56:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24148" author="importer" created="Fri, 1 Oct 2010 09:56:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/411&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/411&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24149" author="importer" created="Fri, 1 Oct 2010 09:56:00 -0500"  >&lt;p&gt;stu said: APIs without docstrings (like emit) are not supported.&lt;/p&gt;

&lt;p&gt;We would welcome a redesign of the XML support that made this good enough to publicize and support.&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-410] clojure.xml parse/emit do not round-trip</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-410</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;m not expecting (emit (parse x)) to produce the same characters as originally in x. (That would be canonical form.)&lt;br/&gt;
However, it seems reasonable to expect that (= (parse x) (parse (emit (parse x)))). That&apos;s not currently the case because of #277 and #408.&lt;br/&gt;
It&apos;s not currently possible to demonstrate this bug via a unit test because of #409.&lt;br/&gt;
This fails:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest parse-and-emit-should-round-trip-data
  (are [s0]
       (let [x1 (str-&amp;gt;xml s0)
             s2 (xml-&amp;gt;str x1)
             x3 (str-&amp;gt;xml s2)]
         (is (= x1 x3)))
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e/&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;content&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e a=&apos;attribute&apos;/&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e a=&apos;attribute&apos;&amp;gt;content&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;&amp;lt;e&amp;gt;&amp;lt;e/&amp;gt;&amp;lt;/e&amp;gt;&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt; &amp;lt;/e&amp;gt;&quot;&lt;/span&gt;
       &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;e&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;amp;gt;&amp;lt;/e&amp;gt;&quot;&lt;/span&gt;))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
Where:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;(defn xml-&amp;gt;str [x]
  (with-out-str
    (xml/emit-element x)))

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

&lt;p&gt;Or, rather it crashes prematurely in str-&amp;gt;xml because of #409.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13807">CLJ-410</key>
            <summary>clojure.xml parse/emit do not round-trip</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Jul 2010 00:46:00 -0500</created>
                <updated>Mon, 15 Nov 2010 12:49:00 -0600</updated>
                    <resolved>Sat, 30 Oct 2010 14:46:19 -0500</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24143" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/410&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/410&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
410-emit-element-no-longer-emits-spurious-new.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b6SULoLZer346_eJe5cbLr/download/b6SULoLZer346_eJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b6SULoLZer346_eJe5cbLr/download/b6SULoLZer346_eJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24144" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;bpsm said: Tests that demonstrate #410 are available at &lt;a href=&quot;http://github.com/bpsm/test-clojure-xml&quot;&gt;http://github.com/bpsm/test-clojure-xml&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="24145" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;bpsm said: [&lt;a href=&quot;file:b6SULoLZer346_eJe5cbLr&quot;&gt;file:b6SULoLZer346_eJe5cbLr&lt;/a&gt;]: see also &lt;a href=&quot;http://github.com/bpsm/clojure/commits/fix408,410,277&quot;&gt;http://github.com/bpsm/clojure/commits/fix408,410,277&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24146" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;stu said: &lt;b&gt;Duplicated&lt;/b&gt; association with ticket #277 was added&lt;/p&gt;</comment>
                    <comment id="24147" author="importer" created="Tue, 28 Sep 2010 11:19:00 -0500"  >&lt;p&gt;chouser@n01se.net said: Please consider the solution provided by clojure.contrib.lazy-xml/emit which uses javax.xml.transform classes to fix not only these bugs (#410 and #408) but also support indent, xml-declaration, and encoding options.&lt;/p&gt;</comment>
                    <comment id="25907" author="stu" created="Sat, 30 Oct 2010 14:46:19 -0500"  >&lt;p&gt;emit is not part of Clojure&apos;s public API, and we don&apos;t want to grow a public API via an issue-driven random walk. If you are interested in this issue, please chime in on the design page for a new data.xml library: &lt;a href=&quot;http://dev.clojure.org/display/DXML/Home&quot;&gt;http://dev.clojure.org/display/DXML/Home&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

<item>
            <title>[CLJ-409] SAXParserFactoryImpl is missing at unit testing time</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-409</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;SAXParserFactoryImpl seems to be AWOL while clojure unit tests are running, but is present when clojure is started from the command line. WTF?&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 clojure.test-clojure.clojure-xml
  (:use clojure.test)
  (:&lt;span class=&quot;code-keyword&quot;&gt;import&lt;/span&gt; [javax.xml.parsers SAXParserFactory])
  (:require [clojure.xml :as xml]))

(deftest sax-parser-factory-is-not-awol
  (is (SAXParserFactory/newInstance)))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;Tell ant to run the unit tests:

$ ant test

And get the following exception:

ERROR in (sax-parser-factory-is-not-awol) (SAXParserFactory.java:134)
expected: (SAXParserFactory/newInstance)
actual: javax.xml.parsers.FactoryConfigurationError: Provider
        org.apache.xerces.jaxp.SAXParserFactoryImpl not found
at javax.xml.parsers.SAXParserFactory.newInstance (SAXParserFactory.java:134)
   clojure.test_clojure.clojure_xml/fn (clojure_xml.clj:17)

Yet, when I run clojure from the command line and &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; the same thing,
all is well.

$ java -jar clojure.jar
Clojure 1.2.0-beta1
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;import&lt;/span&gt; &apos;javax.xml.parsers.SAXParserFactory)
javax.xml.parsers.SAXParserFactory
user=&amp;gt; (SAXParserFactory/newInstance)
#&amp;lt;SAXParserFactoryImpl org.apache.xerces.jaxp.SAXParserFactoryImpl@19381960&amp;gt;
user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;See also:&lt;br/&gt;
&lt;a href=&quot;http://github.com/bpsm/clojure/commits/409show&quot;&gt;http://github.com/bpsm/clojure/commits/409show&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13806">CLJ-409</key>
            <summary>SAXParserFactoryImpl is missing at unit testing time</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Jul 2010 00:36:00 -0500</created>
                <updated>Tue, 24 Aug 2010 00:34:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 00:34:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24137" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/409&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/409&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
show-409-on-oberon.txt - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aSijYaMmCr35jQeJe5cbLr/download/aSijYaMmCr35jQeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aSijYaMmCr35jQeJe5cbLr/download/aSijYaMmCr35jQeJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24138" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;bpsm said: Provide link to my &apos;409show&apos; branch, which does what it says on the tin.&lt;/p&gt;</comment>
                    <comment id="24139" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;stu said: This code works fine for me locally (Mac OS X). I would investigate a busted Ant setup, or getting a different version of Java, on your end.&lt;/p&gt;

&lt;p&gt;I&apos;ll be looking through the rest of the XML tickets your filed this morning &amp;#8211; thanks for taking the time!&lt;/p&gt;</comment>
                    <comment id="24140" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;bpsm said: Thanks. I&apos;ve seen this both on my Mac and Linux netbook (JDK 1.6.0_20), but I&apos;m sitting in front of a machine I haven&apos;t tried to reproduce this on yet, so I&apos;ll give it a whirl here and report what I find.&lt;/p&gt;</comment>
                    <comment id="24141" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;bpsm said: [&lt;a href=&quot;file:aSijYaMmCr35jQeJe5cbLr&quot;&gt;file:aSijYaMmCr35jQeJe5cbLr&lt;/a&gt;]: demonstrates #409 on x64, Java1.6.0_20, ant 1.7.1&lt;/p&gt;</comment>
                    <comment id="24142" author="importer" created="Tue, 24 Aug 2010 00:34:00 -0500"  >&lt;p&gt;bpsm said: I see the failure on my workstation as well, alas. I&apos;ve attached a transcript including ant -diagnostics output. If it is my local setup at fault, I&apos;m not sure what it could be. Perhaps something there will catch your eye.&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-408] clojure.xml emit does not properly escape attribute and element content</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-408</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;(with-out-str
  (clojure.xml/emit-element {:tag :e :attrs nil :content &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;amp;&quot;&lt;/span&gt;}))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
produces: &amp;lt;e&amp;gt;&amp;amp;&amp;lt;/e&amp;gt;
correct would be: &amp;lt;e&amp;gt;&amp;amp;amp;&amp;lt;/e&amp;gt;
This is &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; both element content and attribute content. &amp;lt; and &amp;gt; are not escaped as well. Furthermore, apostrophe ( &apos; ) in an attribute value leads to broken xml:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
&amp;lt;e a=&apos;&apos;&apos;/&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13805">CLJ-408</key>
            <summary>clojure.xml emit does not properly escape attribute and element content</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Jul 2010 09:31:00 -0500</created>
                <updated>Mon, 15 Nov 2010 12:49:00 -0600</updated>
                    <resolved>Sat, 30 Oct 2010 14:47:18 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24133" author="importer" created="Tue, 28 Sep 2010 08:51:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/408&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/408&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
408-escape-and-in-content-and-attribute-value.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aBCHT2LZer34ioeJe5cbLr/download/aBCHT2LZer34ioeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aBCHT2LZer34ioeJe5cbLr/download/aBCHT2LZer34ioeJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24134" author="importer" created="Tue, 28 Sep 2010 08:51:00 -0500"  >&lt;p&gt;bpsm said: Tests that demonstrate #408 are available at &lt;a href=&quot;http://github.com/bpsm/test-clojure-xml&quot;&gt;http://github.com/bpsm/test-clojure-xml&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="24135" author="importer" created="Tue, 28 Sep 2010 08:51:00 -0500"  >&lt;p&gt;bpsm said: [&lt;a href=&quot;file:aBCHT2LZer34ioeJe5cbLr&quot;&gt;file:aBCHT2LZer34ioeJe5cbLr&lt;/a&gt;]: see also &lt;a href=&quot;http://github.com/bpsm/clojure/commits/fix408,410,277&quot;&gt;http://github.com/bpsm/clojure/commits/fix408,410,277&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24136" author="importer" created="Tue, 28 Sep 2010 08:51:00 -0500"  >&lt;p&gt;bpsm said: I saw rich&apos;s message about marking issues &quot;ready for test&quot; to get patches noticed. This was in connection with marking #410 as ready for test. This issue is joined at the hip with 410 and also has a patch ready.&lt;/p&gt;</comment>
                    <comment id="25908" author="stu" created="Sat, 30 Oct 2010 14:47:18 -0500"  >&lt;p&gt;emit is not part of Clojure&apos;s public API, and we don&apos;t want to grow a public API via an issue-driven random walk. If you are interested in this issue, please chime in on the design page for a new data.xml library: &lt;a href=&quot;http://dev.clojure.org/display/DXML/Home&quot;&gt;http://dev.clojure.org/display/DXML/Home&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

<item>
            <title>[CLJ-406] Typo in underive causes breaking in the resulting hierarchy</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-406</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;There&apos;s a typo on line 4515 in core.clj, in the definition of underive:&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;{:parent ... }
; should be
{:parents ... }
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
causing breakage in hierarchies which had relationships underived in them.

E.g.
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
(derive ::foo ::bar)
(underive ::foo ::bar)
(derive ::foo ::bar)
; =&amp;gt; NPE&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;#clojure discussion:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://clojure-log.n01se.net/date/2010-07-21.html#20:54&quot;&gt;http://clojure-log.n01se.net/date/2010-07-21.html#20:54&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13803">CLJ-406</key>
            <summary>Typo in underive causes breaking in the resulting hierarchy</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 22 Jul 2010 03:20:00 -0500</created>
                <updated>Tue, 24 Aug 2010 18:31:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 18:31:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24124" author="importer" created="Tue, 24 Aug 2010 18:31:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/406&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/406&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24125" author="importer" created="Tue, 24 Aug 2010 18:31:00 -0500"  >&lt;p&gt;stu said: Already discussed as a subset of #382.&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-395] &quot;underive&quot; corrupts ad hoc hierarchies.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-395</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See transcript below, from 1.20-dev snapshot compiled about a week ago:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (derive ::dad ::grandad)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (derive ::son ::dad)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (underive ::dad ::grandad)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (derive ::dad ::grandad)&lt;br/&gt;
java.lang.NullPointerException (NO_SOURCE_FILE:0)&lt;br/&gt;
user=&amp;gt; (derive ::foo ::bar)&lt;br/&gt;
java.lang.NullPointerException (NO_SOURCE_FILE:0)&lt;br/&gt;
user=&amp;gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13792">CLJ-395</key>
            <summary>&quot;underive&quot; corrupts ad hoc hierarchies.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 7 Jul 2010 02:34:00 -0500</created>
                <updated>Tue, 24 Aug 2010 11:06:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 11:06:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24085" author="importer" created="Tue, 24 Aug 2010 11:06:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/395&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/395&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24086" author="importer" created="Tue, 24 Aug 2010 11:06:00 -0500"  >&lt;p&gt;stu said: Duplicates #382.&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-389] slurp should not read one character at a time</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-389</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;A discussion of slurp performance came up on the mailing list. The attached patch makes slurp use a 4kb buffer size instead of reading one character at a time, resulting in a significant performance improvement.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13786">CLJ-389</key>
            <summary>slurp should not read one character at a time</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="aaron">Aaron Bedra</assignee>
                                <reporter username="aaron">Aaron Bedra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 25 Jun 2010 08:15:00 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 13:30:22 -0600</resolved>
                            <version>Approved Backlog</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="24059" author="importer" created="Mon, 25 Oct 2010 21:30:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/389&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/389&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
slurp-buffer-size.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/c7INhmGfSr34YDeJe5cbCb/download/c7INhmGfSr34YDeJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/c7INhmGfSr34YDeJe5cbCb/download/c7INhmGfSr34YDeJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24060" author="importer" created="Mon, 25 Oct 2010 21:30:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#389, #371)&lt;/p&gt;</comment>
                    <comment id="24061" author="importer" created="Mon, 25 Oct 2010 21:30:00 -0500"  >&lt;p&gt;aaron said: Patch does not apply.  It is not in the proper format.  Please take a look at &lt;a href=&quot;http://clojure.org/patches&quot;&gt;http://clojure.org/patches&lt;/a&gt; and resubmit.  I will continue to review the code itself against the current master.&lt;/p&gt;</comment>
                    <comment id="25884" author="aaron" created="Fri, 29 Oct 2010 09:43:45 -0500"  >&lt;p&gt;Contacted original poster about this to inform him of the move to JIRA and ensure interest in this patch&lt;/p&gt;</comment>
                    <comment id="25936" author="aaron" created="Fri, 12 Nov 2010 13:55:32 -0600"  >&lt;p&gt;The patch has been reformatted and submitted.&lt;/p&gt;</comment>
                    <comment id="25937" author="juergenhoetzel" created="Sat, 13 Nov 2010 02:07:29 -0600"  >&lt;p&gt;Maybe duplicate: &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-668&quot; title=&quot;Improve slurp performance by using native Java StringWriter and jio/copy&quot;&gt;CLJ-668&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="25960" author="aaron" created="Fri, 26 Nov 2010 10:17:34 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-668&quot; title=&quot;Improve slurp performance by using native Java StringWriter and jio/copy&quot;&gt;CLJ-668&lt;/a&gt; is a duplicate of this ticket. I have tested your patch and would like to consider it as a resolution to this ticket along with closing &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-668&quot; title=&quot;Improve slurp performance by using native Java StringWriter and jio/copy&quot;&gt;CLJ-668&lt;/a&gt; as a duplicate. Can you please submit a patch to this ticket instead of a link to github?  I am going to test all of the patches presented on OSX, Linux, EC2, and Windows.&lt;/p&gt;</comment>
                    <comment id="25964" author="juergenhoetzel" created="Sat, 27 Nov 2010 04:57:21 -0600"  >&lt;p&gt;Seems like the changes are already applied by your previous commit:&lt;/p&gt;

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

&lt;p&gt;Just a leftover StringBuilder Object (patch attached)&lt;/p&gt;</comment>
                    <comment id="25968" author="aaron" created="Sun, 28 Nov 2010 10:06:05 -0600"  >&lt;p&gt;Yes, that was a mistake.  It should not have gone in under #441.  I was doing some testing and somehow I didn&apos;t properly revert what I was working on.  Please consider that a mistake for now and include a patch here so you can get credit for your work.&lt;/p&gt;</comment>
                    <comment id="25969" author="juergenhoetzel" created="Mon, 29 Nov 2010 02:50:03 -0600"  >&lt;p&gt;Thanks. Patch enclosed.&lt;/p&gt;</comment>
                    <comment id="25989" author="aaron" created="Fri, 3 Dec 2010 08:19:40 -0600"  >&lt;p&gt;Thanks. I am going to be testing the various ideas on multiple platforms to see which (if any) is the best fit.&lt;/p&gt;</comment>
                    <comment id="27382" author="aaron" created="Wed, 30 Nov 2011 19:59:41 -0600"  >&lt;p&gt;This patch carries a performance hit. For example:&lt;/p&gt;

&lt;p&gt;Clojure 1.4.0&lt;/p&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; File Size &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; best timed 10x slurp &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 7.3 MB    &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 2960.363 msecs       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 260 KB    &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 105.255 msecs        &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;


&lt;p&gt;With Patch&lt;/p&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; File Size &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; best timed 10x slurp &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 7.3 MB    &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 3700.406 msecs       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 260 KB    &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 129.311 msecs        &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;This was tested with&lt;/p&gt;

&lt;p&gt;(time (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;_ 10&amp;#93;&lt;/span&gt; (slurp &quot;file&quot;)))&lt;/p&gt;

&lt;p&gt;with each execution of this form done 20 times.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10034" name="0001-Improve-slurp-performance-by-using-native-Java-Strin.patch" size="1060" author="juergenhoetzel" created="Mon, 29 Nov 2010 02:50:02 -0600" />
                    <attachment id="10031" name="0001-needles-StrinbBuilder-in-slurp.patch" size="728" author="juergenhoetzel" created="Sat, 27 Nov 2010 04:57:21 -0600" />
                    <attachment id="10018" name="0389_buffered_slurp.diff" size="1228" author="aaron" created="Fri, 12 Nov 2010 13:55:57 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10006">Incomplete</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>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-384] Document upgrade from 1.1 to 1.2</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-384</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In addition to things I assume are bugs, I&apos;ve hit a couple of issues going from 1.1 to 1.2&lt;/p&gt;

&lt;p&gt;The change in meaning of the ^ reader macro is big&lt;/p&gt;

&lt;p&gt;I&apos;m seeing errors now that meta data is limited to String, Keyword, Symbol or Map  (I had some boolean values as meta data in my framework).&lt;/p&gt;

&lt;p&gt;There&apos;s the notes about how name collisions on imports are now warnings, not errors (I&apos;ve also heard that may change back to errors as in 1.1).&lt;/p&gt;

&lt;p&gt;What else?&lt;/p&gt;

&lt;p&gt;Anyway, IMHO there needs to be a &quot;Upgrade to 1.2&quot; page on clojure.org&lt;/p&gt;</description>
                <environment></environment>
            <key id="13781">CLJ-384</key>
            <summary>Document upgrade from 1.1 to 1.2</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 18 Jun 2010 15:11:00 -0500</created>
                <updated>Fri, 1 Oct 2010 08:45:00 -0500</updated>
                    <resolved>Fri, 1 Oct 2010 08:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24046" author="importer" created="Fri, 1 Oct 2010 08:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/384&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/384&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24047" author="importer" created="Fri, 1 Oct 2010 08:45:00 -0500"  >&lt;p&gt;hlship said: &lt;b&gt;Related&lt;/b&gt; association with ticket #383 was added&lt;/p&gt;</comment>
                    <comment id="24048" author="importer" created="Fri, 1 Oct 2010 08:45:00 -0500"  >&lt;p&gt;stu said: Nobody stepped up and did this, so I am killing it so it stops showing up in reports. The Confluence is open to any CA signer who wants to write such documentation.&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-383] different arrities of macro don&apos;t work in 1.2 (20100607 build)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-383</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I&apos;ve been in the process of upgrading my framework from 1.1 to 1.2 and I&apos;ve hit a serious stopper in code that works (and was tested) under 1.1.&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-workspace/cascade
$ lein repl
cascade.version=&amp;gt; (use &apos;cascade)
nil
cascade.version=&amp;gt; (link nil nil nil)
java.lang.IllegalArgumentException: Wrong number of args (3) passed to: cascade$link (NO_SOURCE_FILE:1)
cascade.version=&amp;gt; (doc link)
-------------------------
cascade/link
([env function] [env function extra-path-info] [env function extra-path-info query-parameters])
Macro
  Creates a link to a view or action function. Additional path info data may be specified (as a seq of
  data items), as well as query parameters (as a map whose keys are strings or keywords and whose values
  are converted to strings.). Uses standard keys from the env map. The resulting link is returned as a string.
nil
cascade.version=&amp;gt; (.printStackTrace *e)
java.lang.IllegalArgumentException: Wrong number of args (3) passed to: cascade$link (NO_SOURCE_FILE:1)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5437)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5388)
 at clojure.core$eval.invoke(core.clj:2370)
 at clojure.main$repl$read_eval_print__5620.invoke(main.clj:183)
 at clojure.main$repl$fn__5625.invoke(main.clj:203)
 at clojure.main$repl.doInvoke(main.clj:203)
 at clojure.lang.RestFn.invoke(RestFn.java:422)
 at user$eval9$fn__10.invoke(NO_SOURCE_FILE:1)
 at user$eval9.invoke(NO_SOURCE_FILE:1)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5421)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5412)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5412)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5388)
 at clojure.core$eval.invoke(core.clj:2370)
 at clojure.main$eval_opt.invoke(main.clj:234)
 at clojure.main$initialize.invoke(main.clj:253)
 at clojure.main$null_opt.invoke(main.clj:278)
 at clojure.main$main.doInvoke(main.clj:353)
 at clojure.lang.RestFn.invoke(RestFn.java:422)
 at clojure.lang.Var.invoke(Var.java:369)
 at clojure.lang.AFn.applyToHelper(AFn.java:165)
 at clojure.lang.Var.applyTo(Var.java:482)
 at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: Wrong number of args (3) passed to: cascade$link
 at clojure.lang.AFn.throwArity(AFn.java:439)
 at clojure.lang.AFn.invoke(AFn.java:47)
 at cascade$link.invoke(cascade.clj:90)
 at cascade$link.invoke(cascade.clj:92)
 at clojure.lang.Var.invoke(Var.java:381)
 at clojure.lang.AFn.applyToHelper(AFn.java:180)
 at clojure.lang.Var.applyTo(Var.java:482)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.macroexpand1(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5283)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.macroexpand(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5338)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5406)
 ... 22 more
Reflection warning, NO_SOURCE_PATH:6 - reference to field printStackTrace can&apos;t be resolved.
nil
cascade.version=&amp;gt; 
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
 

Here&apos;s the source:

&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;
(defmacro link
  &quot;Creates a link to a view or action function. Additional path info data may be specified (as a seq of
  data items), as well as query parameters (as a map whose keys are strings or keywords and whose values
  are converted to strings.). Uses standard keys from the env map. The resulting link is returned as a string.&quot;
  ([env function]
    (link env function nil))
  ([env function extra-path-info]
    (link env function extra-path-info nil))
  ([env function extra-path-info query-parameters]
    `(link-path ~env (link-map-from-function ~function ~extra-path-info ~query-parameters))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, &lt;tt&gt;(doc)&lt;/tt&gt; shows the number of parameters correctly, as does the code, but attempting to use it with 3 parameters generates the spurious error.&lt;/p&gt;

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

&lt;p&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;
&amp;lt;code&amp;gt;&lt;br/&gt;
$ lein repl&lt;br/&gt;
cascade.version=&amp;gt; (defmacro ex (&lt;span class=&quot;error&quot;&gt;&amp;#91;a&amp;#93;&lt;/span&gt; (ex a &quot;no-b&quot;)) (&lt;span class=&quot;error&quot;&gt;&amp;#91;a b&amp;#93;&lt;/span&gt; `(format &quot;a=%s, b=%s&quot; ~a ~b)))&lt;br/&gt;
#&apos;cascade.version/ex&lt;br/&gt;
cascade.version=&amp;gt; (ex)&lt;br/&gt;
java.lang.IllegalArgumentException: Wrong number of args (2) passed to: version$ex (NO_SOURCE_FILE:1)&lt;br/&gt;
cascade.version=&amp;gt; (ex 1)&lt;br/&gt;
java.lang.IllegalArgumentException: Wrong number of args (2) passed to: version$ex (NO_SOURCE_FILE:1)&lt;br/&gt;
cascade.version=&amp;gt; (ex 1 2)&lt;br/&gt;
&quot;a=1, b=2&quot;&lt;br/&gt;
cascade.version=&amp;gt; &lt;br/&gt;
&amp;lt;/code&amp;gt;&lt;br/&gt;
&amp;lt;/pre&amp;gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13780">CLJ-383</key>
            <summary>different arrities of macro don&apos;t work in 1.2 (20100607 build)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 18 Jun 2010 14:22:00 -0500</created>
                <updated>Tue, 24 Aug 2010 08:47:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 08:47:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="24039" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/383&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/383&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="24040" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;hlship said: &lt;b&gt;Related&lt;/b&gt; association with ticket #384 was added&lt;/p&gt;</comment>
                    <comment id="24041" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;cgrand said: You were relying on an implementation detail (relying on macros being fns of same arity and those fns being not yet tagged as macro during the 1st evaluation of the body. Indeed this behaviour is brittle if your reload a new definition of the macro:&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; (defmacro ex ([] (ex &lt;span class=&quot;code-quote&quot;&gt;&quot;v1&quot;&lt;/span&gt;)) ([v] (str &lt;span class=&quot;code-quote&quot;&gt;&quot;v1: I&apos;m &quot;&lt;/span&gt; v)))
#&apos;user/ex
user=&amp;gt; (ex)
&lt;span class=&quot;code-quote&quot;&gt;&quot;v1: I&apos;m v1&quot;&lt;/span&gt;
user=&amp;gt; (defmacro ex ([] (ex &lt;span class=&quot;code-quote&quot;&gt;&quot;v2&quot;&lt;/span&gt;)) ([v] (str &lt;span class=&quot;code-quote&quot;&gt;&quot;v2: I&apos;m &quot;&lt;/span&gt; v)))
#&apos;user/ex
user=&amp;gt; (ex)
&lt;span class=&quot;code-quote&quot;&gt;&quot;v1: I&apos;m v2&quot;&lt;/span&gt; ; and not &lt;span class=&quot;code-quote&quot;&gt;&quot;v2: I&apos;m v2&quot;&lt;/span&gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;

The correct way has always been to write:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;(defmacro ex ([a] `(ex ~a &lt;span class=&quot;code-quote&quot;&gt;&quot;no-b&quot;&lt;/span&gt;)) ([a b] `(format &lt;span class=&quot;code-quote&quot;&gt;&quot;a=%s, b=%s&quot;&lt;/span&gt; ~a ~b)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and this till works with 1.2.&lt;/p&gt;</comment>
                    <comment id="24042" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;hlship said: Point taken; I&apos;ve been reviewing Stu&apos;s book and I can see how he does as your example (what I&apos;ve called the workaround), which is to have the short form expand into a macro call to the next larger form.  Anyway, this does rub me a little oddly ... I had thought of macros as merely special functions whose execution was integrated into the Clojure reader/compiler but not otherwise unlike ordinary functions. This is clearly not the case, though I&apos;m curious as to the underlying change from 1.1 to 1.2.&lt;/p&gt;

&lt;p&gt;Further I think there&apos;s still an underlying problem:&lt;/p&gt;



&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (defmacro ex ([a] `(ex ~a &lt;span class=&quot;code-quote&quot;&gt;&quot;no-b&quot;&lt;/span&gt;)) ([a b] `(format &lt;span class=&quot;code-quote&quot;&gt;&quot;a=%s, b=%s&quot;&lt;/span&gt; ~a ~b)))
#&apos;user/ex
user=&amp;gt; (ex)
java.lang.IllegalArgumentException: Wrong number of args (2) passed to: user$ex (NO_SOURCE_FILE:1)
user=&amp;gt; (ex 1)
&lt;span class=&quot;code-quote&quot;&gt;&quot;a=1, b=no-b&quot;&lt;/span&gt;
user=&amp;gt; (ex 1 2)
&lt;span class=&quot;code-quote&quot;&gt;&quot;a=1, b=2&quot;&lt;/span&gt;
user=&amp;gt; (ex 1 2 3)
java.lang.IllegalArgumentException: Wrong number of args (5) passed to: user$ex (NO_SOURCE_FILE:1)
user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Seems like macros now get two extra invisible arguments, presumably related to how they are now implemented. Even so, the error message is confusing since the programmer&apos;s code didn&apos;t pass 2 arguments, it passed 0 arguments.&lt;/p&gt;</comment>
                    <comment id="24043" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;cgrand said: The two implicit args are &amp;amp;env (a map whose keys are the locally bound symbols, values are unspecified) and &amp;amp;form (the whole form undergoing macroexpansion &amp;#8211; it allows you to look at form&apos;s metadata). I reckon the off-by-two argcount in errors is annoying.&lt;/p&gt;</comment>
                    <comment id="24044" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;hlship said: Right, so fixing that part of the problem, identifying the  number of arguments in terms of what the coder wrote, rather than how Clojure is implemented, is a low priority fix, but one that should be addressed.&lt;/p&gt;</comment>
                    <comment id="24045" author="importer" created="Tue, 24 Aug 2010 08:47:00 -0500"  >&lt;p&gt;stu said: Error reporting issue captured in #397.&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-372] possible binding issue in clojure.template?</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-372</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I came across some strange behavior the other day in clojure.test/are, where the template replacement seems a bit over-eager.  As a simple case:&lt;/p&gt;

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

&lt;p&gt;(are &lt;span class=&quot;error&quot;&gt;&amp;#91;x y&amp;#93;&lt;/span&gt; (= x y)&lt;br/&gt;
  &apos;(4 9 16) (map (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (* x x)) &apos;(2 3 4)))&lt;/p&gt;

&lt;p&gt;gives &quot;java.lang.Exception: Unsupported binding form: clojure.lang.LazySeq@7bed76a7&quot;, but &lt;/p&gt;

&lt;p&gt;(are &lt;span class=&quot;error&quot;&gt;&amp;#91;x y&amp;#93;&lt;/span&gt; (= x y)&lt;br/&gt;
  &apos;(4 9 16) (map (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;z&amp;#93;&lt;/span&gt; (* z z)) &apos;(2 3 4)))&lt;/p&gt;

&lt;p&gt;is fine.  It seems that all instances of the variable x get replaced, even the ones in other expressions that are doing the replacing. A macroexpand-1 traced it to clojure.template, and if I patch apply-template there to use postwalk-replace rather than prewalk-replace, clojure.test/are works as I had expected.  However, the simple test case I wrote to expose this problem (wrapping deftest around the first example above) fails with what seems to me to be a bizarre error:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; FAIL in (can-test-using-local-bindings) (test_clojure.clj:87)&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;  but got :pass&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt; expected: (= (quote (4 9 16)) (map (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; (* x x)) (quote (2 3 4))))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;java&amp;#93;&lt;/span&gt;   actual: (#&amp;lt;core$&lt;em&gt;EQ&lt;/em&gt; clojure.core$&lt;em&gt;EQ&lt;/em&gt;@a947850&amp;gt; (4 9 16) (4 9 16))&lt;/p&gt;

&lt;p&gt;Can anyone decipher why this fails, or come up with a better solution?&lt;/p&gt;</description>
                <environment></environment>
            <key id="13769">CLJ-372</key>
            <summary>possible binding issue in clojure.template?</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 3 Jun 2010 01:17:00 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:10 -0600</updated>
                    <resolved>Fri, 26 Nov 2010 08:54:42 -0600</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23995" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/372&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/372&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
template-local-binding.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bEvfq-BS8r36foeJe5cbLA/download/bEvfq-BS8r36foeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bEvfq-BS8r36foeJe5cbLA/download/bEvfq-BS8r36foeJe5cbLA&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23996" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;stuart.sierra said: Reason for the bizarre error is the awkwardness of using clojure.test to test itself.  clojure.test-clojure.test uses an alternate reporting function that looks at the doc string of the assertion.&lt;/p&gt;

&lt;p&gt;This can be fixed by placing the can-test-use-local-bindings test in a different namespace.&lt;/p&gt;</comment>
                    <comment id="23997" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;stuart.sierra said: I can&apos;t reproduce the error.  This works for me:&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; (are [x y] (= x y) &apos;(4 9 16) (map (fn [x] (* x x)) &apos;(2 3 4)))
&lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="25957" author="stuart.sierra" created="Fri, 26 Nov 2010 08:54:43 -0600"  >&lt;p&gt;Could not reproduce the reported error.&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="10004">Screened</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-371] dynamic defrecord definitions trumped by AOT versions in classpath</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-371</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Symptom: Define a defrecord at the repl and you still see the old (AOT&apos;d) defrecord.&lt;/p&gt;

&lt;p&gt;In the attached project:&lt;br/&gt;
  lein compile&lt;br/&gt;
  lein repl&lt;/p&gt;

&lt;p&gt;and enter the commands in the comment in src/defrecordissue/core.clj&lt;/p&gt;

&lt;p&gt;Design Discussion here: &lt;a href=&quot;http://dev.clojure.org/display/design/Dynamic+defrecord+definitions+trumped+by+AOT+versions+in+classpath&quot;&gt;http://dev.clojure.org/display/design/Dynamic+defrecord+definitions+trumped+by+AOT+versions+in+classpath&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13768">CLJ-371</key>
            <summary>dynamic defrecord definitions trumped by AOT versions in classpath</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 2 Jun 2010 17:58:00 -0500</created>
                <updated>Fri, 2 Dec 2011 13:39:40 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 13:39:40 -0600</resolved>
                            <version>Approved Backlog</version>
                                <fixVersion>Approved Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="23991" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/371&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/371&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
defrecordissue.tar.gz - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aggm70BPir356HeJe5cbLr/download/aggm70BPir356HeJe5cbLr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aggm70BPir356HeJe5cbLr/download/aggm70BPir356HeJe5cbLr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23992" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;stu said: Rich: I understand the classloader situation that causes this. If you tell me what you think should happen instead I will make a patch.&lt;/p&gt;</comment>
                    <comment id="23993" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#389, #371)&lt;/p&gt;</comment>
                    <comment id="23994" author="importer" created="Tue, 24 Aug 2010 11:29:00 -0500"  >&lt;p&gt;cemerick said: AFAICT, this also affects protocol definitions, where the associated interface classfile is available on the classpath.&lt;/p&gt;</comment>
                    <comment id="26372" author="redinger" created="Fri, 15 Apr 2011 12:57:23 -0500"  >&lt;p&gt;You said you&apos;d make a patch if Rich said it needed on. Your move.&lt;/p&gt;</comment>
                    <comment id="26373" author="stu" created="Fri, 15 Apr 2011 18:25:18 -0500"  >&lt;p&gt;This behavior is to be expected, given Java&apos;s class loaders. If you want static classes, compile them onto your classpath. If you want reloadable classes, load them at runtime (preferable) from source.&lt;/p&gt;

&lt;p&gt;The real place to fix this problem is in build tools and IDEs. When you are developing interactively, these tools &lt;b&gt;should&lt;/b&gt; default to non-compilation of Clojure files. The Clojure/core team will fix this in a future version of the Clojure maven build tools.&lt;/p&gt;</comment>
                    <comment id="26386" author="redinger" created="Fri, 22 Apr 2011 11:47:19 -0500"  >&lt;p&gt;Re-opening - we closed this thinking it would be handled via tooling. It seems we should fix this though.&lt;/p&gt;</comment>
                    <comment id="27301" author="stu" created="Tue, 15 Nov 2011 19:16:33 -0600"  >&lt;p&gt;I don&apos;t know of any appropriate action to take, other than to change tools.&lt;/p&gt;</comment>
                    <comment id="27404" author="stu" created="Fri, 2 Dec 2011 13:39:40 -0600"  >&lt;p&gt;no, really, declined&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

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

<item>
            <title>[CLJ-370] record multimethod</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-370</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;non-reflective dynamic creation of defrecord instances via a multimethod&lt;/p&gt;</description>
                <environment></environment>
            <key id="13767">CLJ-370</key>
            <summary>record multimethod</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Tue, 1 Jun 2010 20:06:00 -0500</created>
                <updated>Sun, 16 Oct 2011 05:33:31 -0500</updated>
                    <resolved>Sun, 16 Oct 2011 05:33:30 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="23982" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/370&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/370&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0370-record-multimethod.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/d2J0riBEKr35rdeJe5cbLA/download/d2J0riBEKr35rdeJe5cbLA&quot;&gt;https://www.assembla.com/spaces/clojure/documents/d2J0riBEKr35rdeJe5cbLA/download/d2J0riBEKr35rdeJe5cbLA&lt;/a&gt;&lt;br/&gt;
0370-record-multimethod-take-2.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aGvvlSCmWr35fseJe5cbCb/download/aGvvlSCmWr35fseJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aGvvlSCmWr35fseJe5cbCb/download/aGvvlSCmWr35fseJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23983" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:d2J0riBEKr35rdeJe5cbLA&quot;&gt;file:d2J0riBEKr35rdeJe5cbLA&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23984" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;stu said: Questions:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;I don&apos;t like that create-record is public in core. Change its name? Throw in another namespace?&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="23985" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;richhickey said: how about record-implementation-detail-multimethod?&lt;/p&gt;

&lt;p&gt;Inside emit-record-factory-method, how about:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;using :keys destructuring for fields&lt;/li&gt;
	&lt;li&gt;no need for apply on dissoc - it takes multiple keys&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Also, you might want to make record itself a macro, so you can flow metadata to the created record:&lt;/p&gt;

&lt;p&gt;^{:my &quot;meta&quot;}(record ::Foo :a 1 :b 2)&lt;/p&gt;

&lt;p&gt;This will be useful since this will likely become at least the print-dup form for records&lt;/p&gt;</comment>
                    <comment id="23986" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;stu said: I was thinking that record might often get apply-ed. Do we need a function and a macro?&lt;/p&gt;</comment>
                    <comment id="23987" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;stu said: [&lt;a href=&quot;file:aGvvlSCmWr35fseJe5cbCb&quot;&gt;file:aGvvlSCmWr35fseJe5cbCb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="23988" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;stu said: second patch subsumes first and incorporates Rich&apos;s feedback. print/read moved to separate ticket #374&lt;/p&gt;</comment>
                    <comment id="23989" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;richhickey said: second thoughts here&lt;/p&gt;</comment>
                    <comment id="23990" author="importer" created="Tue, 24 Aug 2010 10:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#370, #366, #374)&lt;/p&gt;</comment>
                    <comment id="26083" author="stu" created="Tue, 4 Jan 2011 19:40:50 -0600"  >&lt;p&gt;Rich: updated design proposal at &lt;a href=&quot;http://dev.clojure.org/display/design/defrecord+improvements&quot;&gt;http://dev.clojure.org/display/design/defrecord+improvements&lt;/a&gt;. Please provide feedback there and then mark this as waiting on me.&lt;/p&gt;</comment>
                    <comment id="26996" author="stu" created="Sun, 16 Oct 2011 05:33:30 -0500"  >&lt;p&gt;Old ticket. Goal was accomplished via factory fns and literals.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                    <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                        <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-363] defn doesn&apos;t put the right metadata on its fn value</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-363</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;duplicate of #270&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; (defn foo {:bar :baz} [] 42)
#&apos;user/foo
user=&amp;gt; (meta #&apos;foo)
{:ns #&amp;lt;Namespace user&amp;gt;, :name foo, :file &lt;span class=&quot;code-quote&quot;&gt;&quot;NO_SOURCE_PATH&quot;&lt;/span&gt;, :line 221, :arglists ([]), :bar :baz}
user=&amp;gt; (meta foo)
{:ns #&amp;lt;Namespace user&amp;gt;, :name foo} ; the value has only the basic keys
user=&amp;gt; (defn foo {:lucy :ethel} [] 43)
#&apos;user/foo
user=&amp;gt; (meta #&apos;foo)
{:ns #&amp;lt;Namespace user&amp;gt;, :name foo, :file &lt;span class=&quot;code-quote&quot;&gt;&quot;NO_SOURCE_PATH&quot;&lt;/span&gt;, :line 224, :arglists ([]), :lucy :ethel}
user=&amp;gt; (meta foo) ; the value has the previous metadata
{:ns #&amp;lt;Namespace user&amp;gt;, :name foo, :file &lt;span class=&quot;code-quote&quot;&gt;&quot;NO_SOURCE_PATH&quot;&lt;/span&gt;, :line 221, :arglists ([]), :bar :baz}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13760">CLJ-363</key>
            <summary>defn doesn&apos;t put the right metadata on its fn value</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 May 2010 00:13:00 -0500</created>
                <updated>Tue, 24 Aug 2010 08:20:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 08:20:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23956" author="importer" created="Tue, 24 Aug 2010 08:20:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/363&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/363&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23957" author="importer" created="Tue, 24 Aug 2010 08:20:00 -0500"  >&lt;p&gt;cgrand said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #270 was added&lt;/p&gt;</comment>
                    <comment id="23958" author="importer" created="Tue, 24 Aug 2010 08:20:00 -0500"  >&lt;p&gt;cgrand said: duplicate of #270&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-351] Disable transients after persistent! call</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-351</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="13748">CLJ-351</key>
            <summary>Disable transients after persistent! call</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 19 May 2010 05:53:00 -0500</created>
                <updated>Tue, 24 Aug 2010 08:10:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 08:10:00 -0500</resolved>
                                            <fixVersion>Release 1.2</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23896" author="importer" created="Tue, 24 Aug 2010 08:10:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/351&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/351&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-345] clojure.contrib.string.replace-str throws NPE on nil string</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-345</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Version: Clojure 1.2 / clojure-contrib 1.2&lt;/p&gt;

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

&lt;p&gt;user=&amp;gt; (clojure.contrib.string/replace-str &quot;a&quot; &quot;b&quot; nil)&lt;br/&gt;
#&amp;lt;CompilerException java.lang.NullPointerException (NO_SOURCE_FILE:29)&amp;gt;&lt;/p&gt;

&lt;p&gt;throws a NullPointerException when passed a nil string.  It seems like more corner cases could be automatically handled by returning nil in this case rather than throwing an NPE.  At the very least, it would be nice to update the docstring to state that s cannot be nil.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13742">CLJ-345</key>
            <summary>clojure.contrib.string.replace-str throws NPE on nil string</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 May 2010 10:27:00 -0500</created>
                <updated>Fri, 1 Oct 2010 06:44:00 -0500</updated>
                    <resolved>Fri, 1 Oct 2010 06:44:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23876" author="importer" created="Fri, 1 Oct 2010 06:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/345&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/345&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23877" author="importer" created="Fri, 1 Oct 2010 06:44:00 -0500"  >&lt;p&gt;stu said: I evaluated this agains the latest version of the fn in clojre (e.g. clojure.string/replace).&lt;/p&gt;

&lt;p&gt;The documentation string correctly lists legal parameters for replace as string, char, or fn, so an NPE is expected behavior.&lt;/p&gt;

&lt;p&gt;Note also: the contrib versions of most string fns are deprecated.&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-307] consistent deprecation strategy</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-307</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I am filing this as a Clojure ticket even though the problem currently occurs mostly in Contrib. That&apos;s because I think there needs to be an official &quot;Clojure way&quot; &amp;#8211; this ticket is a request for documentation, not implementation.&lt;/p&gt;

&lt;p&gt;Absent official guidelines, function and namespace deprecation has been handled in an ad hoc fashion. Sometimes functions move from one namespace to another, leaving no trace. Other times, something is left in the old namespace: either an error or a warning redirecting to the new namespace.&lt;/p&gt;

&lt;p&gt;I would like to see a recommendation that leaves some kind of visible trace (for at least one point release) both in the source code tree and in the api docs. &lt;/p&gt;

&lt;p&gt;Fallback namespaces (&lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/9fde83ce4c06ed77&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/9fde83ce4c06ed77&lt;/a&gt;) are out of scope for this ticket, but might be a separate ticket that builds on whatever is decided here.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13704">CLJ-307</key>
            <summary>consistent deprecation strategy</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 21 Apr 2010 09:39:00 -0500</created>
                <updated>Tue, 24 Aug 2010 10:39:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 10:39:00 -0500</resolved>
                                            <fixVersion>Release 1.2</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23682" author="importer" created="Tue, 24 Aug 2010 10:39:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/307&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/307&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23683" author="importer" created="Tue, 24 Aug 2010 10:39:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#303, #306, #307)&lt;/p&gt;</comment>
                    <comment id="23684" author="importer" created="Tue, 24 Aug 2010 10:39:00 -0500"  >&lt;p&gt;stu said: We are sorting this out in contrib.&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-295] disambiguate protocol extended to two interfaces</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-295</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If a protocol is extended to two interfaces, and an object implements both, it will get one of them at random. I&apos;d be happy if this case was simply an error.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13692">CLJ-295</key>
            <summary>disambiguate protocol extended to two interfaces</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 15 Apr 2010 15:08:00 -0500</created>
                <updated>Tue, 24 Aug 2010 10:32:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 10:32:00 -0500</resolved>
                                            <fixVersion>Release 1.2</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23623" author="importer" created="Tue, 24 Aug 2010 10:32:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/295&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/295&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-287] (take-nth 0 coll) spins wheels on Solaris</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-287</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;(take-nth 0 (range 5)) is a silly thing to do, but if you&apos;re anything like me then it inexorably fills heap space and cpu time by an infinite number of RMI calls.&lt;br/&gt;
I&apos;m running Clojure 1.1.0-master-SNAPSHOT under Java 1.6R17 on Solaris 10 and I watched it fill up to 56GB&lt;br/&gt;
I think it should raise an exception instead but Im too new to clojure to recommend one. Sorry&lt;br/&gt;
Cheers&lt;br/&gt;
Simon&lt;/p&gt;</description>
                <environment></environment>
            <key id="13684">CLJ-287</key>
            <summary>(take-nth 0 coll) spins wheels on Solaris</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 31 Mar 2010 19:53:00 -0500</created>
                <updated>Tue, 24 Aug 2010 10:10:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 10:10:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23596" author="importer" created="Tue, 24 Aug 2010 10:10:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/287&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/287&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
take-nth.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/awDmNUpz4r34FheJe5aVNr/download/awDmNUpz4r34FheJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/awDmNUpz4r34FheJe5aVNr/download/awDmNUpz4r34FheJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23597" author="importer" created="Tue, 24 Aug 2010 10:10:00 -0500"  >&lt;p&gt;bhurt said: [&lt;a href=&quot;file:awDmNUpz4r34FheJe5aVNr&quot;&gt;file:awDmNUpz4r34FheJe5aVNr&lt;/a&gt;]: Proposed patch to fix this ticket&lt;/p&gt;</comment>
                    <comment id="23598" author="importer" created="Tue, 24 Aug 2010 10:10:00 -0500"  >&lt;p&gt;stu said: Hi Simon,&lt;/p&gt;

&lt;p&gt;If you set the &lt;b&gt;print-length&lt;/b&gt; you can prevent runaway sequences from trying to print. Try the following, and if still blows up please re-open or file a new bug:&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! *print-length* 10)
 (take-nth 0 (range 5))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Stu&lt;/p&gt;</comment>
                    <comment id="23599" author="importer" created="Tue, 24 Aug 2010 10:10:00 -0500"  >&lt;p&gt;bhurt said: I think the real problem is that (take-nth 0 some-list) is invalid.  It&apos;s nonsensical in a deep way- take every 0th element?  If you glanced at my patch, all I did was validate the arguments and throw an exception if the n argument is not positive, rather than returning an infinite list.  I mean, a similar problem shows up if you do (count (take-nth 0 (range 5))).&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-284] Cannot cast 0xFF to a byte (fails range check)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-284</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Prompted by &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/c3a12f395651cf65/70d6dde44814da0f&quot;&gt;a thread&lt;/a&gt; on the clojure group.&lt;/p&gt;

&lt;p&gt;The recently added range checking to casts/coercions adversely affects a common usage of the byte cast to pull the 8 LSBs of an integer.  Since the numerical representation of a byte is signed in java, the &lt;tt&gt;Byte.MIN_VALUE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Byte.MAX_VALUE&amp;lt;/code&amp;gt; used in the range check of &amp;lt;code&amp;gt;clojure.lang.RT.byteCast()&lt;/tt&gt; do not allow for integer values up to 0xFF.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13681">CLJ-284</key>
            <summary>Cannot cast 0xFF to a byte (fails range check)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Mar 2010 14:23:00 -0500</created>
                <updated>Tue, 28 Sep 2010 13:05:00 -0500</updated>
                    <resolved>Tue, 28 Sep 2010 13:05:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23579" author="importer" created="Tue, 28 Sep 2010 13:05:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/284&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/284&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
ubyte.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b_MyyAn4mr34xSeJe5avMc/download/b_MyyAn4mr34xSeJe5avMc&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b_MyyAn4mr34xSeJe5avMc/download/b_MyyAn4mr34xSeJe5avMc&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23580" author="importer" created="Tue, 28 Sep 2010 13:05:00 -0500"  >&lt;p&gt;ataggart said: [&lt;a href=&quot;file:b_MyyAn4mr34xSeJe5avMc&quot;&gt;file:b_MyyAn4mr34xSeJe5avMc&lt;/a&gt;]: Adds a ubyte coercion when the resulting byte should be considered unsigned, thus inputs of 0-255 are acceptable&lt;/p&gt;</comment>
                    <comment id="23581" author="importer" created="Tue, 28 Sep 2010 13:05:00 -0500"  >&lt;p&gt;ataggart said: Patch provided to add a ubyte coercion:&lt;/p&gt;

&lt;p&gt;&amp;lt;pre&amp;gt;user=&amp;gt; 0xFF       &lt;br/&gt;
255&lt;br/&gt;
user=&amp;gt; (Integer/toBinaryString 0xFF)&lt;br/&gt;
&quot;11111111&quot;&lt;br/&gt;
user=&amp;gt; (byte 0xFF)&lt;br/&gt;
java.lang.IllegalArgumentException: Value out of range for byte: 255 (NO_SOURCE_FILE:0)&lt;br/&gt;
user=&amp;gt; (ubyte 0xFF)&lt;br/&gt;
-1&lt;br/&gt;
user=&amp;gt; (ubyte 256)  &lt;br/&gt;
java.lang.IllegalArgumentException: Value out of range for unsigned byte: 256 (NO_SOURCE_FILE:0)&lt;br/&gt;
&amp;lt;/pre&amp;gt;&lt;/p&gt;</comment>
                    <comment id="23582" author="importer" created="Tue, 28 Sep 2010 13:05:00 -0500"  >&lt;p&gt;richhickey said: This is really a subset of #441&lt;/p&gt;</comment>
                    <comment id="23583" author="importer" created="Tue, 28 Sep 2010 13:05:00 -0500"  >&lt;p&gt;ataggart said: Agreed.&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-283] recur ignores rest args</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-283</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When you recur inside a function, the arguments are not assigned as expected:&lt;/p&gt;

&lt;p&gt;(defn weird &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;amp; b&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (println b)&lt;br/&gt;
  (when (&amp;lt; (first b) 2)&lt;br/&gt;
    (recur (inc (first b)))))&lt;/p&gt;

&lt;p&gt;(weird 1)&lt;/p&gt;

&lt;p&gt;The first time it runs, b is a seq, but the second time it&apos;s just an integer.&lt;/p&gt;

&lt;p&gt;After some discussion I found out this is because there&apos;s no way to apply recur, so technically making recur act as a normal function call means you can&apos;t pass a seq of args in. While this is arguably a decent workaround, it leads to very confusing, undocumented behaviour; at the very least it should be tracked in an issue until a better solution can be found.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13680">CLJ-283</key>
            <summary>recur ignores rest args</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Mar 2010 13:28:00 -0500</created>
                <updated>Tue, 24 Aug 2010 07:55:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 07:55:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23576" author="importer" created="Tue, 24 Aug 2010 07:55:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/283&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/283&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23577" author="importer" created="Tue, 24 Aug 2010 07:55:00 -0500"  >&lt;p&gt;stu said: Recur doesn&apos;t re-enter the function, it just goes back to the top (the vararging doesn&apos;t happen again). Since b is a collection coming in, recur with a collection and you will be fine.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn weird [&amp;amp; b]
  (println b)
  (when (&amp;lt; (first b) 2)
    (recur (cons (inc (first b)) (&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; b)))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I find this intuitive, but when I launch the Assembla FAQ feel free to add an item for this if you like.&lt;/p&gt;</comment>
                    <comment id="23578" author="importer" created="Tue, 24 Aug 2010 07:55:00 -0500"  >&lt;p&gt;technomancy said: &amp;gt; I find this intuitive, but when I launch the Assembla FAQ feel free to add an item for this if you like.&lt;/p&gt;

&lt;p&gt;OK. Anecdotally I asked four other seasoned Clojure users what they thought was going on here and only one had an explanation, so most folks are going to think this is an unintended result when they see it. I don&apos;t know if it&apos;s FA enough to qualify this for a FAQ, but even having this closed issue show up in search results is an improvement.&lt;/p&gt;

&lt;p&gt;I know internally there&apos;s a difference between calling a function and executing the body of a function, but up till this point I considered that an implementation detail.&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-271] Determine direct binding policy and controls</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-271</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Direct binding is in place as an experiment. We need ways to control the application and granularity of direct binding.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13668">CLJ-271</key>
            <summary>Determine direct binding policy and controls</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Feb 2010 14:47:00 -0600</created>
                <updated>Tue, 24 Aug 2010 06:25:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 06:25:00 -0500</resolved>
                                            <fixVersion>Release 1.2</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23518" author="importer" created="Tue, 24 Aug 2010 06:25:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/271&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/271&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23519" author="importer" created="Tue, 24 Aug 2010 06:25:00 -0500"  >&lt;p&gt;technomancy said: &lt;b&gt;Related&lt;/b&gt; association with ticket #246 was added&lt;/p&gt;</comment>
                    <comment id="23520" author="importer" created="Tue, 24 Aug 2010 06:25:00 -0500"  >&lt;p&gt;stu said: disable for 1.2 and then move to approved backlog&lt;/p&gt;</comment>
                    <comment id="23521" author="importer" created="Tue, 24 Aug 2010 06:25:00 -0500"  >&lt;p&gt;stu said: Direct binding is dead in favor of a better perf enhancement post 1.2.&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-261] Use Ant instead of Maven for Clojure-Contrib</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-261</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It would be nice if we could go back to Ant for building the clojure-contrib.  At this time, it appears to be downloading many different packages that are not a part of the Clojure-Contrib source but Maven dependencies.  Furthermore, it would be consistent with the way that we currently build Clojure.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13658">CLJ-261</key>
            <summary>Use Ant instead of Maven for Clojure-Contrib</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Feb 2010 00:00:00 -0600</created>
                <updated>Tue, 24 Aug 2010 06:19:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 06:19:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23454" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/261&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/261&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23455" author="importer" created="Tue, 24 Aug 2010 06:19:00 -0500"  >&lt;p&gt;technomancy said: Regardless of whether this is a valid point, it should be opened on the Contrib project rather than Clojure.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.assembla.com/spaces/clojure-contrib/tickets&quot;&gt;http://www.assembla.com/spaces/clojure-contrib/tickets&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-260] Cannot load clojure classes from Jar files outside classpath using URLClassLoader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-260</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;It is not possible to use URLClassLoader to load a class from a jar file if the jar is outside the classpath. It seems that RT.load tries to search for *.clj file within the classpath and doesn&apos;t respect the URLClassLoader and then fails with:&lt;/p&gt;

&lt;p&gt;Exception in thread &quot;main&quot; java.lang.ExceptionInInitializerError&lt;br/&gt;
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&lt;br/&gt;
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)&lt;br/&gt;
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)&lt;br/&gt;
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)&lt;br/&gt;
        at java.lang.Class.newInstance0(Class.java:355)&lt;br/&gt;
        at java.lang.Class.newInstance(Class.java:308)&lt;br/&gt;
        at Loader.main(Loader.java:17)&lt;br/&gt;
Caused by: java.io.FileNotFoundException: Could not locate net/experimentalworks/Foo__init.class or net/experimentalworks/Foo.clj on classpath: &lt;br/&gt;
        at clojure.lang.RT.load(RT.java:402)&lt;br/&gt;
        at clojure.lang.RT.load(RT.java:371)&lt;br/&gt;
        at clojure.core$load_&lt;em&gt;6449$fn&lt;/em&gt;_6458.invoke(core.clj:4171)&lt;br/&gt;
        at clojure.core$load__6449.doInvoke(core.clj:4170)&lt;br/&gt;
        at clojure.lang.RestFn.invoke(RestFn.java:413)&lt;br/&gt;
        at clojure.lang.Var.invoke(Var.java:359)&lt;br/&gt;
        at net.experimentalworks.Foo.&amp;lt;clinit&amp;gt;(Unknown Source)&lt;br/&gt;
        ... 7 more&lt;/p&gt;

&lt;p&gt;The attached .tar.gz contains a sample jar file and the clojure file that was used to generate the class files as well as the sample loader. Java oder Scala written classes can be loaded without any problems. For sure the I put the clojure runtime into the classpath but not the loadme-clojure.jar&lt;/p&gt;</description>
                <environment></environment>
            <key id="13657">CLJ-260</key>
            <summary>Cannot load clojure classes from Jar files outside classpath using URLClassLoader</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 9 Feb 2010 19:08:00 -0600</created>
                <updated>Tue, 24 Aug 2010 15:18:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 15:18:00 -0500</resolved>
                                            <fixVersion>Release 1.2</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23452" author="importer" created="Tue, 24 Aug 2010 15:18:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/260&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/260&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
loader.tar.gz - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/ayyZTifAyr34QPeJe5aVNr/download/ayyZTifAyr34QPeJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/ayyZTifAyr34QPeJe5aVNr/download/ayyZTifAyr34QPeJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23453" author="importer" created="Tue, 24 Aug 2010 15:18:00 -0500"  >&lt;p&gt;stu said: Clojure&apos;s base loader uses the thread context loader so long as &lt;b&gt;use-context-classloader&lt;/b&gt; is true (the default). Make sure context class loader is set, and then set the thread context class loader to be the loader you have created by calling:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-object&quot;&gt;Thread&lt;/span&gt;.currentThread().setContextClassLoader(loader);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Do this before using the loader to load classes.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Stu&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-251] macroexpand should respect :inline</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-251</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;macroexpand and macroexpand-1 currently do not respect the :inline metadata of&lt;br/&gt;
functions.  For example you currently see:&lt;/p&gt;

&lt;p&gt; (macroexpand &apos;(+ 1 2))&lt;br/&gt;
 ;=&amp;gt; (+ 1 2)&lt;/p&gt;

&lt;p&gt;Instead, macroexpand should return something like:&lt;/p&gt;

&lt;p&gt; ;=&amp;gt; (. clojure.lang.Numbers (add 1 2))&lt;/p&gt;

&lt;p&gt;...depending of course on the exact definition of +&apos;s :inline fn.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13648">CLJ-251</key>
            <summary>macroexpand should respect :inline</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Thu, 28 Jan 2010 10:14:00 -0600</created>
                <updated>Fri, 7 Oct 2011 07:47:38 -0500</updated>
                    <resolved>Fri, 7 Oct 2011 07:47:38 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23418" author="importer" created="Tue, 24 Aug 2010 06:06:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/251&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/251&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-241] Tests for reify</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-241</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;subsumed by #239 and #240&lt;/p&gt;</description>
                <environment></environment>
            <key id="13638">CLJ-241</key>
            <summary>Tests for reify</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Jan 2010 16:19:00 -0600</created>
                <updated>Tue, 24 Aug 2010 15:51:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 15:51:00 -0500</resolved>
                                            <fixVersion>Release 1.2</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23388" author="importer" created="Tue, 24 Aug 2010 15:51:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/241&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/241&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-238] Make re-pattern accept multiple arguments to concatenate them.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-238</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This would help concatenating multiple regular expressions. The attached patch simply converts all arguments to a string and then pass that string to re-pattern. Currently if you&apos;re trying to concatenate literal regular expressions, you&apos;re force to use the str function. It&apos;s not much extra code, but given the similarity between re-pattern and str, I thought it would be nice to have them behave the same way. e.g.:&lt;/p&gt;

&lt;p&gt;(re-pattern (apply str (map (partial format &quot;%s{%s}&quot;) &lt;span class=&quot;error&quot;&gt;&amp;#91;\a \b \c \d \e&amp;#93;&lt;/span&gt; (iterate inc 1))))&lt;br/&gt;
would become&lt;br/&gt;
(apply re-pattern (map (partial format &quot;%s{%s}&quot;) &lt;span class=&quot;error&quot;&gt;&amp;#91;\a \b \c \d \e&amp;#93;&lt;/span&gt; (iterate inc 1)))&lt;/p&gt;

&lt;p&gt;It only save one call to str, so it might not warrant the extra code in the end.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13635">CLJ-238</key>
            <summary>Make re-pattern accept multiple arguments to concatenate them.</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="budu">Nicolas Buduroi</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 5 Jan 2010 13:09:00 -0600</created>
                <updated>Fri, 7 Oct 2011 07:51:41 -0500</updated>
                    <resolved>Fri, 7 Oct 2011 07:51:41 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23378" author="importer" created="Tue, 28 Sep 2010 07:06:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/238&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/238&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Changed-re-pattern-to-accept-multiple-arguments-to-c.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/barzR2-Jyr3OGheJe5aVNr/download/barzR2-Jyr3OGheJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/barzR2-Jyr3OGheJe5aVNr/download/barzR2-Jyr3OGheJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23379" author="importer" created="Tue, 28 Sep 2010 07:06:00 -0500"  >&lt;p&gt;richhickey said: Could you please put an example of what the enhancement would let you do, in the description? Thanks.&lt;/p&gt;</comment>
                    <comment id="23380" author="importer" created="Tue, 28 Sep 2010 07:06:00 -0500"  >&lt;p&gt;richhickey said: I don&apos;t see the need for this&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="10013">Test</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-237] Adding a :only-keys destructuring option, that throws an exception if there&apos;s extra key(s).</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-237</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;While discussing the issue that prompted ticket [&lt;span class=&quot;error&quot;&gt;&amp;#91;ticket:236&amp;#93;&lt;/span&gt;] on clojure-dev, Richard Newman suggested modifying map destructuring to incorporate a :only-keys. It works exactly like :keys but raises an exception if the destructured map contains other keys. The attached patch shows a possible implementation.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13634">CLJ-237</key>
            <summary>Adding a :only-keys destructuring option, that throws an exception if there&apos;s extra key(s).</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="budu">Nicolas Buduroi</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 1 Jan 2010 20:04:00 -0600</created>
                <updated>Fri, 17 Feb 2012 14:15:44 -0600</updated>
                    <resolved>Fri, 17 Feb 2012 14:15:44 -0600</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23372" author="importer" created="Tue, 28 Sep 2010 07:05:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/237&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/237&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Added-only-keys-destructuring-option-like-keys-but-t.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bEnEvg-I4r3OA7eJe5afGb/download/bEnEvg-I4r3OA7eJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bEnEvg-I4r3OA7eJe5afGb/download/bEnEvg-I4r3OA7eJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23373" author="importer" created="Tue, 28 Sep 2010 07:05:00 -0500"  >&lt;p&gt;budu said: [&lt;a href=&quot;file:bEnEvg-I4r3OA7eJe5afGb&quot;&gt;file:bEnEvg-I4r3OA7eJe5afGb&lt;/a&gt;]: Add :only-keys destructuring option&lt;/p&gt;</comment>
                    <comment id="23374" author="importer" created="Tue, 28 Sep 2010 07:05:00 -0500"  >&lt;p&gt;richhickey said: Could someone please review this patch? I&apos;m ok with the idea in general, but it seems strange that the :only test would only be available for (non-renaming) :keys destructuring&lt;/p&gt;</comment>
                    <comment id="23375" author="importer" created="Tue, 28 Sep 2010 07:05:00 -0500"  >&lt;p&gt;chouser@n01se.net said: One drawback to any such checking is it may prevent code written for a future version of the function that takes more named args from working at all with a previous version of the function.  For example &apos;ref&apos; now accepts :min-history.  Code that uses that now would probably work fine with versions of ref that didn&apos;t support that knob, but if they checked to prevent extra args they would fail unnecessarily.&lt;/p&gt;</comment>
                    <comment id="23376" author="importer" created="Tue, 28 Sep 2010 07:05:00 -0500"  >&lt;p&gt;budu said: Good point, didn&apos;t think about that! We could recommend the use of :keys in early development and :only-keys when APIs become very stable.&lt;/p&gt;</comment>
                    <comment id="23377" author="importer" created="Tue, 28 Sep 2010 07:05:00 -0500"  >&lt;p&gt;richhickey said: I don&apos;t see the need for this&lt;/p&gt;</comment>
                    <comment id="27750" author="stuart.sierra" created="Fri, 17 Feb 2012 14:15:44 -0600"  >&lt;p&gt;Declined. There has been limited support for this ticket. It changes the concept of destructuring to include something more like validation, which it was not intended to support.&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-234] Adding provenance of deprecation warnings to the LispReader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-234</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The LispReader has some deprecation warnings, but they do not show their provenance. The attached patch provide improved warning messages by modifying the LineNumberingPushbackReader to include the source path of the file being read, so that it can be retrieved by the LispReader.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13631">CLJ-234</key>
            <summary>Adding provenance of deprecation warnings to the LispReader</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Fri, 1 Jan 2010 15:30:00 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 31 Dec 2010 15:59:02 -0600</resolved>
                                            <fixVersion>Release 1.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23365" author="importer" created="Tue, 28 Sep 2010 07:02:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/234&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/234&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0002-Modified-the-LineNumberingPushbackReader-to-include-.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bmHcpC9Yur3RGweJe5afGb/download/bmHcpC9Yur3RGweJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bmHcpC9Yur3RGweJe5afGb/download/bmHcpC9Yur3RGweJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26046" author="stu" created="Fri, 17 Dec 2010 14:31:14 -0600"  >&lt;p&gt;Alan: please bounce this if incomplete, or screen if it seems simple enough.&lt;/p&gt;</comment>
                    <comment id="26047" author="alan@thinkrelevance.com" created="Fri, 17 Dec 2010 14:53:37 -0600"  >&lt;p&gt;The patch looks good, but as of 1.2 there are no longer any deprecated reader macros.  This might be worth adding in case any macros are deprecated in the future.&lt;/p&gt;</comment>
                    <comment id="26075" author="stu" created="Fri, 31 Dec 2010 15:59:02 -0600"  >&lt;p&gt;If we ever have another deprecation, we should bring this back along with a test case.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10052" name="0234_LispReader_deprecation_provenance.patch" size="3736" author="aaron" created="Sun, 12 Dec 2010 16:53:57 -0600" />
                    <attachment id="10051" name="0234_LispReader_deprecation_provenance.patch" size="3736" author="aaron" created="Sun, 12 Dec 2010 16:37:13 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10003">Vetted</customfieldvalue>

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

<item>
            <title>[CLJ-223] Maven build produces empty JAR</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-223</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, &quot;ant&quot; generates a valid pom.xml. but &quot;mvn install&quot; doesn&apos;t work &amp;#8211; the target JAR is empty.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13620">CLJ-223</key>
            <summary>Maven build produces empty JAR</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 15 Dec 2009 21:27:00 -0600</created>
                <updated>Tue, 24 Aug 2010 14:34:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 14:34:00 -0500</resolved>
                                            <fixVersion>Release 1.1</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23322" author="importer" created="Tue, 24 Aug 2010 14:34:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/223&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/223&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23323" author="importer" created="Tue, 24 Aug 2010 14:34:00 -0500"  >&lt;p&gt;stuart.sierra said: The Ant build script defines a &quot;ci-build&quot; target that can take the place of &quot;mvn install&quot;.&lt;/p&gt;

&lt;p&gt;To use it, you need to download the Maven Ant Tasks jar from &lt;a href=&quot;http://maven.apache.org/ant-tasks/&quot;&gt;http://maven.apache.org/ant-tasks/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then run Ant 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;ant -lib maven-ant-tasks-2.1.0.jar ci-build&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is an acceptable alternative to a build that works with &quot;mvn install&quot;, in my opinion.&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-207] for macro does not allow :let clause in first position</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-207</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I like to try and keep my level of nesting under control, and this&lt;br/&gt;
often involves hiding or re-structuring the let macro. The for macro&lt;br/&gt;
can implicitly assemble a let macro for you, but with a limitation&lt;br/&gt;
that the :let clause can&apos;t be first:&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 user=&amp;gt; (for [:let [z [:foo :bar]] x z] (name x))
java.lang.IllegalStateException: Can&apos;t pop empty vector (repl-1:5)
1:6 user=&amp;gt; (for [x [:foo :bar] :let [z (name x)]] z)
(&quot;foo&quot; &quot;bar&quot;)
1:7 user=&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Is this limitation intentional?  Could the error message be improved?&lt;/p&gt;

&lt;p&gt;Here&apos;s what I wanted to write:&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 add-script-links-for-imported-javascript-libraries
       [env dom-nodes]
       (extend-dom dom-nodes [:html :head] :top
               (template-for [:let [aggregation (-&amp;gt; env :cascade :resource-aggregation)
                                         libraries (@aggregation :libraries)]
                                   asset-map libraries
                                   :let [path (to-asset-path env asset-map)]]
                       :script { :type &quot;text/javascript&quot; :src path } [ linebreak ])))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;(the formatting is probably scrambled)&lt;/p&gt;

&lt;p&gt;But I had to juggle it to this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defn add-script-links-for-imported-javascript-libraries
       [env dom-nodes]
       (let [aggregation (-&amp;gt; env :cascade :resource-aggregation)
              libraries (@aggregation :libraries)]
               (extend-dom dom-nodes [:html :head] :top
                       (template-for [asset-map libraries
                                           :let [path (to-asset-path env asset-map)]]
                               :script { :type &quot;text/javascript&quot; :src path } [ linebreak ]))))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Of course there are any number of ways to write this, but I prefer the&lt;br/&gt;
first option, as it does less of a job of obscuring what the main&lt;br/&gt;
point of the function is: a call to extend-dom.&lt;/p&gt;</description>
                <environment></environment>
            <key id="13604">CLJ-207</key>
            <summary>for macro does not allow :let clause in first position</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="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Sun, 25 Oct 2009 09:22:00 -0500</created>
                <updated>Wed, 26 Dec 2012 05:13:49 -0600</updated>
                    <resolved>Fri, 13 Apr 2012 09:20:33 -0500</resolved>
                                                                    <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="23248" author="importer" created="Tue, 24 Aug 2010 06:56:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/207&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/207&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27981" author="tsdh" created="Thu, 22 Mar 2012 11:21:41 -0500"  >&lt;p&gt;The attached patch implements that feature and also adds tests for it.  The new tests and all other tests still pass.&lt;/p&gt;

&lt;p&gt;The patch exploits the fact 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;(for [:let [a 1, b [1 2]], c [1 2 3]] ...)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;is equivalent 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;(for [a [1], b [[1 2]], c [1 2 3]] ...)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and thus transforms the former binding vector to the latter.&lt;/p&gt;</comment>
                    <comment id="28133" author="richhickey" created="Fri, 13 Apr 2012 09:20:33 -0500"  >&lt;p&gt;just put the for in a let please&lt;/p&gt;</comment>
                    <comment id="30323" author="cmotricz" created="Wed, 26 Dec 2012 05:13:49 -0600"  >&lt;p&gt;I came here to report this as a bug.&lt;/p&gt;

&lt;p&gt;I respect Rich&apos;s decision to disallow :let at the beginning of a (for), of course, but I feel that if the syntax is to be declared illegal then the compiler should report an error rather than explode with an exception.&lt;/p&gt;

&lt;p&gt;Thus I suggest catching the error in the compiler and reporting it as a syntax error.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11001" name="0001-Implement-CLJ-207-let-as-first-for-binding-form.patch" size="2062" author="tsdh" created="Thu, 22 Mar 2012 11:21:41 -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-199] chunked seqs support &apos;for&apos; byte code can&apos;t be converted to dex for dalvik</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-199</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Commit 306ef6 generates bytecode which can not be covered to dex for dalvik.  See following git-bisect output for details.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;306ef6d9e47253103ca0e5ae0f4b620d5fa2aeff is first bad commit
commit 306ef6d9e47253103ca0e5ae0f4b620d5fa2aeff (14316ae2110a779ffc8ac9c3da3f1c41852c4289)
Author: Chouser &amp;lt;chouser@n01se.net&amp;gt;
Date:   Sun Aug 23 21:36:41 2009 -0400

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

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

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

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

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

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

&lt;ul&gt;
	&lt;li&gt;download the android SDK&lt;/li&gt;
	&lt;li&gt;build clojure.jar&lt;/li&gt;
	&lt;li&gt;run: &lt;span class=&quot;error&quot;&gt;&amp;#91;andriod_sdk&amp;#93;&lt;/span&gt;/platforms/android-2.0.1/tools/dx --dex clojure.jar&lt;/li&gt;
	&lt;li&gt;boom&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="23223" author="importer" created="Mon, 25 Oct 2010 23:11:00 -0500"  >&lt;p&gt;aaron said: The current master 09ba677c1dfd8e75cec47d270062558c71aa551d does not cause this issue.  I tested on android-7 and android-8 platforms with fresh downloads of everything.  Should we close this ticket?&lt;/p&gt;</comment>
                    <comment id="25885" author="aaron" created="Fri, 29 Oct 2010 09:44:48 -0500"  >&lt;p&gt;Contacted original poster about closing this issue.&lt;/p&gt;</comment>
                    <comment id="25912" author="aaron" created="Mon, 1 Nov 2010 07:38:26 -0500"  >&lt;p&gt;Orignal ticket creator agreed that this is no longer an issue.  This issue was fixed sometime between 1.1 and 1.2 but since there is no patches or details on what changed here I am marking the resolution declined&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-191] enhance stacktrace: causes like java, syntax like clojure</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-191</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Various enhancements I&apos;d like to make:&lt;br/&gt;
Copy the feature of java stacktrace to print &quot;... 25 more&quot; instead of duplicating stack lines.&lt;br/&gt;
Print java class.method in clojure format: class/method. &lt;/p&gt;

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

<item>
            <title>[CLJ-188] NPE when creating an empty array of ints, longs, floats or doubles [from #146 for 1.0]</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-188</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This ticket is for tracking #146 against branch 1.0&lt;/p&gt;</description>
                <environment></environment>
            <key id="13585">CLJ-188</key>
            <summary>NPE when creating an empty array of ints, longs, floats or doubles [from #146 for 1.0]</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 7 Sep 2009 22:50:00 -0500</created>
                <updated>Wed, 22 Sep 2010 23:27:00 -0500</updated>
                    <resolved>Wed, 22 Sep 2010 23:27:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23179" author="importer" created="Wed, 22 Sep 2010 23:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/188&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/188&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23180" author="importer" created="Wed, 22 Sep 2010 23:27:00 -0500"  >&lt;p&gt;chouser@n01se.net said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #146 was added&lt;/p&gt;</comment>
                    <comment id="23181" author="importer" created="Wed, 22 Sep 2010 23:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#180, #156, #187, #188)&lt;/p&gt;

&lt;p&gt;invalidating old 1.0 back-tickets so they don&apos;t keep showing up in reports&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-187] StringSeq implements Counted but doesn&apos;t provide a specialized impl for count() [for 1.0 from #186]</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-187</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This ticket is for tracking #186 against branch 1.0&lt;/p&gt;</description>
                <environment></environment>
            <key id="13584">CLJ-187</key>
            <summary>StringSeq implements Counted but doesn&apos;t provide a specialized impl for count() [for 1.0 from #186]</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 7 Sep 2009 22:15:00 -0500</created>
                <updated>Wed, 22 Sep 2010 23:27:00 -0500</updated>
                    <resolved>Wed, 22 Sep 2010 23:27:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23176" author="importer" created="Wed, 22 Sep 2010 23:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/187&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/187&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23177" author="importer" created="Wed, 22 Sep 2010 23:27:00 -0500"  >&lt;p&gt;chouser@n01se.net said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #186 was added&lt;/p&gt;</comment>
                    <comment id="23178" author="importer" created="Wed, 22 Sep 2010 23:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#180, #156, #187, #188)&lt;/p&gt;

&lt;p&gt;invalidating old 1.0 back-tickets so they don&apos;t keep showing up in reports&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-180] 1.0 bugfix: (namespace (symbol &quot;/&quot;)) should return nil</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-180</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Fix for master is valid for 1.0 too; see parent issue&lt;/p&gt;</description>
                <environment></environment>
            <key id="13577">CLJ-180</key>
            <summary>1.0 bugfix: (namespace (symbol &quot;/&quot;)) should return nil</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 24 Aug 2009 11:58:00 -0500</created>
                <updated>Wed, 22 Sep 2010 16:27:00 -0500</updated>
                    <resolved>Wed, 22 Sep 2010 16:27:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23139" author="importer" created="Wed, 22 Sep 2010 16:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/180&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/180&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23140" author="importer" created="Wed, 22 Sep 2010 16:27:00 -0500"  >&lt;p&gt;oranenj said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #179 was added&lt;/p&gt;</comment>
                    <comment id="23141" author="importer" created="Wed, 22 Sep 2010 16:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#180, #156, #187, #188)&lt;/p&gt;

&lt;p&gt;invalidating old 1.0 back-tickets so they don&apos;t keep showing up in reports&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-176] structs printed with *print-dup* true cannot be read</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-176</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;(defstruct thing :a :b)
(def my-thing (struct thing 1 2))
(def s (binding [*print-dup* &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;] (pr-str my-thing)))
s 
;;=&amp;gt; &lt;span class=&quot;code-quote&quot;&gt;&quot;#=(clojure.lang.PersistentStructMap/create {:a 1, :b 2})&quot;&lt;/span&gt;
(read-string s)
;;=&amp;gt; java.lang.IllegalArgumentException:
;;   No matching method found: create&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13573">CLJ-176</key>
            <summary>structs printed with *print-dup* true cannot be read</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Aug 2009 11:11:00 -0500</created>
                <updated>Tue, 24 Aug 2010 06:14:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 06:14:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23128" author="importer" created="Tue, 24 Aug 2010 06:14:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/176&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/176&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23129" author="importer" created="Tue, 24 Aug 2010 06:14:00 -0500"  >&lt;p&gt;stu said: This is not going to be fixed in the short or medium term. Please ping me if you have a compelling use case though.&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-161] *-zip lose metadata [for 1.0 from #134]</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-161</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This ticket is for tracking #134 against branch 1.0&lt;/p&gt;</description>
                <environment></environment>
            <key id="13558">CLJ-161</key>
            <summary>*-zip lose metadata [for 1.0 from #134]</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 24 Jul 2009 22:36:00 -0500</created>
                <updated>Fri, 1 Oct 2010 08:46:00 -0500</updated>
                    <resolved>Fri, 1 Oct 2010 08:46:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23042" author="importer" created="Fri, 1 Oct 2010 08:46:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/161&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/161&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23043" author="importer" created="Fri, 1 Oct 2010 08:46:00 -0500"  >&lt;p&gt;chouser@n01se.net said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #134 was added&lt;/p&gt;</comment>
                    <comment id="23044" author="importer" created="Fri, 1 Oct 2010 08:46:00 -0500"  >&lt;p&gt;stu said: No longer fixing bugs against 1.0.&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-156] Classname/staticThing leaves Classname unresolved at syntaxQuote time [for 1.0 from #155]</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-156</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This ticket is for tracking #155 against Clojure 1.0&lt;/p&gt;</description>
                <environment></environment>
            <key id="13553">CLJ-156</key>
            <summary>Classname/staticThing leaves Classname unresolved at syntaxQuote time [for 1.0 from #155]</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Mon, 13 Jul 2009 15:16:00 -0500</created>
                <updated>Wed, 22 Sep 2010 14:27:00 -0500</updated>
                    <resolved>Wed, 22 Sep 2010 14:27:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="23022" author="importer" created="Wed, 22 Sep 2010 14:27:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/156&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/156&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23023" author="importer" created="Wed, 22 Sep 2010 14:27:00 -0500"  >&lt;p&gt;chouser@n01se.net said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #155 was added&lt;/p&gt;</comment>
                    <comment id="23024" author="importer" created="Wed, 22 Sep 2010 14:27:00 -0500"  >&lt;p&gt;stu said: Updating tickets (#180, #156, #187, #188)&lt;/p&gt;

&lt;p&gt;invalidating old 1.0 back-tickets so they don&apos;t keep showing up in reports&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-149] pop does not preserve meta-data</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-149</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;As discussed with chouser on irc.&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;where both the conses have metadata, what rule specifies which metadata should be left after &lt;tt&gt;pop&lt;/tt&gt;? If there is a rule, we should document it, and I bet there are other breakages.&lt;/p&gt;</comment>
                    <comment id="26296" author="richhickey" created="Thu, 10 Mar 2011 11:32:07 -0600"  >&lt;p&gt;This is a non-problem (but the vector one Chouser found is a real problem). Lists are not going to create new heads to convey metadata on pop. Lists really are chains of things, not encapsulations of chains of things. The metadata of the second link is what it was, and shouldn&apos;t be lost by pop, i.e. pop should not construct a new list as it goes.&lt;/p&gt;</comment>
                    <comment id="26298" author="ataggart" created="Thu, 10 Mar 2011 12:50:55 -0600"  >&lt;p&gt;Very well. Note that the failure example chouser gave no longer occurs:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (let [v (with-meta [1 2 3] {:my :meta})]
         (map meta [(conj v 4) (pop v)]))
({:my :meta} {:my :meta})
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10008">Not Approved</customfieldvalue>

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

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

<item>
            <title>[CLJ-141] GC Issue 119: require doc out of date</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-141</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;This ticket is for tracking #123 against branch 1.0&lt;/p&gt;</description>
                <environment></environment>
            <key id="13538">CLJ-141</key>
            <summary>GC Issue 119: require doc out of date</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="chouser@n01se.net">Chouser</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 1 Jul 2009 21:58:00 -0500</created>
                <updated>Tue, 24 Aug 2010 03:51:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 03:51:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22957" author="importer" created="Tue, 24 Aug 2010 03:51:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/141&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/141&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22958" author="importer" created="Tue, 24 Aug 2010 03:51:00 -0500"  >&lt;p&gt;chouser@n01se.net said: &lt;b&gt;Parent&lt;/b&gt; association with ticket #123 was added&lt;/p&gt;</comment>
                    <comment id="22959" author="importer" created="Tue, 24 Aug 2010 03:51:00 -0500"  >&lt;p&gt;chouser@n01se.net said: Closing this because there seems to be no demand to fix this kind of bug in 1.0, and demand is only likely to decrease over 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="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-132] Agents printed at the REPL do not always reflect their value</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-132</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Starting with a fresh REPL and entering the 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;(def counter (agent 0))
(defn add1 [x] (inc x))
(send counter add1)
;; repeat many times
(send counter add1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The representation printed at the REPL will not always display the correct value for the agent (e.g. the second call to `send` would print #&amp;lt;Agent@743fba: 1&amp;gt;).  This appears to happen only in the first few calls to `send` before the value eventually &quot;catches up&quot;.  This behavior of course never occurs with `send-off`.  This appears to only affect the printed value and not the actual value, but can still cause confusion.&lt;/p&gt;

&lt;p&gt;My setup is as follows:&lt;br/&gt;
Mac OSX 10.5&lt;br/&gt;
Clojure 1.0.0&lt;br/&gt;
Running with `java -server -cp $CP jline.ConsoleRunner clojure.lang.Repl $*` where $CP points to clojure.jar, clojure-contrib.jar, and jline.jar&lt;/p&gt;

&lt;p&gt;This also occurs with a fresh build of Clojure 1.1.0-alpha-SNAPSHOT from github.&lt;/p&gt;

&lt;p&gt;-m&lt;/p&gt;</description>
                <environment></environment>
            <key id="13529">CLJ-132</key>
            <summary>Agents printed at the REPL do not always reflect their value</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Fri, 19 Jun 2009 16:55:00 -0500</created>
                <updated>Tue, 24 Aug 2010 07:46:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 07:46:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22911" author="importer" created="Tue, 24 Aug 2010 07:46:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/132&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/132&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22912" author="importer" created="Tue, 24 Aug 2010 07:46:00 -0500"  >&lt;p&gt;stu said: I don&apos;t think this is a bug &amp;#8211; there is no &quot;correct value for the agent&quot; as seen from the calling thread. There is a race condition when viewing agents at the REPL, and this is by design.&lt;/p&gt;</comment>
                    <comment id="22913" author="importer" created="Tue, 24 Aug 2010 07:46:00 -0500"  >&lt;p&gt;fogus said: I understand why it happens, but it might be worthwhile to at least document this condition and/or consider removing the print of the value.  In some cases reporting nothing is better than potentially incorrect information.  Or is it enough to just say, &quot;it&apos;s correct eventually or at least most of the time&quot;?&lt;/p&gt;

&lt;p&gt;-m&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-122] GC  Issue 118: Patch to add :svn to *clojure-version*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-122</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by miki.tebeka, May 16, 2009

Attached is a patch to add :svn to *clojure-version*.
In order &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; it to work &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; &quot;svn ps svn:keywords Revision
src/clj/clojure/core.clj&quot;

This way when people report problem in clojure, we can know the exact
revision they are talking about.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13519">CLJ-122</key>
            <summary>GC  Issue 118: Patch to add :svn to *clojure-version*</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 17:22:00 -0500</created>
                <updated>Tue, 24 Aug 2010 06:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 06:45:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22853" author="importer" created="Tue, 24 Aug 2010 06:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/122&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/122&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
clojure.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dXnrtCw4qr3RbzeJe5afGb/download/dXnrtCw4qr3RbzeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dXnrtCw4qr3RbzeJe5afGb/download/dXnrtCw4qr3RbzeJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22854" author="importer" created="Tue, 24 Aug 2010 06:45:00 -0500"  >&lt;p&gt;oranenj said: [&lt;a href=&quot;file:dXnrtCw4qr3RbzeJe5afGb&quot;&gt;file:dXnrtCw4qr3RbzeJe5afGb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="22855" author="importer" created="Tue, 24 Aug 2010 06:45:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                </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-120] GC  Issue 116: partition with pad</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-120</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by dimi...@gashinsky.com, May 09, 2009

;; A lot of times I needed a padding option on the partition. This is
;; my attempt to solve &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; problem. Any suggestions are welcome. I
;; hope &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; patch or something similar will make its way into the
;; core.

Some discussion that happened here:
http:&lt;span class=&quot;code-comment&quot;&gt;//groups.google.com/group/clojure/browse_frm/thread/6fcc1dd999a5ec02?tvc=1
&lt;/span&gt;was integrated into the patch.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13517">CLJ-120</key>
            <summary>GC  Issue 116: partition with pad</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="scgilardi">Stephen C. Gilardi</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 15:19:00 -0500</created>
                <updated>Fri, 2 Dec 2011 12:17:05 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 12:17:05 -0600</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22823" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/120&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/120&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
partition-with-pad.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/ctfCdww4qr3RbzeJe5afGb/download/ctfCdww4qr3RbzeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/ctfCdww4qr3RbzeJe5afGb/download/ctfCdww4qr3RbzeJe5afGb&lt;/a&gt;&lt;br/&gt;
part.clj - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/ckiilEyzqr3PTqeJe5afGb/download/ckiilEyzqr3PTqeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/ckiilEyzqr3PTqeJe5afGb/download/ckiilEyzqr3PTqeJe5afGb&lt;/a&gt;&lt;br/&gt;
part.clj - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/dmo9mEyzWr3QuceJe5aVNr/download/dmo9mEyzWr3QuceJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/dmo9mEyzWr3QuceJe5aVNr/download/dmo9mEyzWr3QuceJe5aVNr&lt;/a&gt;&lt;br/&gt;
partition-with-pad-2.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bolonky_8r3RY8eJe5afGb/download/bolonky_8r3RY8eJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bolonky_8r3RY8eJe5afGb/download/bolonky_8r3RY8eJe5afGb&lt;/a&gt;&lt;br/&gt;
ticket-120.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/bnWYoqzBKr3RKeeJe5afGb/download/bnWYoqzBKr3RKeeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/bnWYoqzBKr3RKeeJe5afGb/download/bnWYoqzBKr3RKeeJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22824" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;oranenj said: [&lt;a href=&quot;file:ctfCdww4qr3RbzeJe5afGb&quot;&gt;file:ctfCdww4qr3RbzeJe5afGb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="22825" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;chouser@n01se.net said: It looks to me like the 3- and 4-arg bodies could be combined resulting in less code and no significant loss of performance.  A pad of nil could be treated the same as no pad supplied, which would be different from a numeric pad (including 0).&lt;/p&gt;</comment>
                    <comment id="22826" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: By &quot;combined&quot; do you mean that the 3 argument version should call the 4 argument version with an explicit pad of nil?&lt;/p&gt;

&lt;p&gt;Currently, the 3 argument version does no padding. Instead it stops as soon as there are less than n args left:&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; (partition 3 [1 2 3 4])
((1 2 3))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;

In contrast, the 4 argument version with a pad of nil produces (untested):
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;user=&amp;gt; (partition 3 nil [1 2 3 4])
((1 2 3) (4 nil nil))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Interpreting nil passed to the 4 argument version as a request to get the behavior of the 3 argument version looks wrong to me. There would be no way to express both a desire for padding and that the padding value should be nil.&lt;/p&gt;</comment>
                    <comment id="22827" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: Looking into the issue further, I see I made a mistake in my previous comment. The padding is given as a sequence, not a value. However, the key difference between the 3 and 4 arg versions remains. The 3 argument version never returns a &quot;short&quot; sequence at the end. The 4 arg version can.&lt;/p&gt;

&lt;p&gt;Along the lines of your suggestion, we could combine the two by changing the 4 arg version to interpret a pad value of &quot;[]&quot; to mean &quot;return a short sequence at the end if necessary&quot; and a pad value of &quot;nil&quot; to mean &quot;never return a short sequence&quot;. This would involve interpreting &quot;nil&quot; different from &quot;the empty sequence&quot; where in many other contexts they&apos;re equivalent. I&apos;m not sure whether or not saving some code is a good trade for introducing that subtle difference.&lt;/p&gt;</comment>
                    <comment id="22828" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;chouser@n01se.net said: I had also mistaken pad to be a number.  I think you&apos;re right, producing different behavior when pad is an empty seq vs. nil is just asking for trouble.  Thanks for taking a second look.&lt;/p&gt;</comment>
                    <comment id="22829" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;importer said: (In [&lt;span class=&quot;error&quot;&gt;&amp;#91;r:e0e8326871983be5615f5c0bc9dbf66140c7017f&amp;#93;&lt;/span&gt;]) add optional pad argument to partition. Fixes #120&lt;/p&gt;

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

&lt;p&gt;Branch: master&lt;/p&gt;</comment>
                    <comment id="22830" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;digash said: The original version was using nil but Rich suggested not do it that way.&lt;br/&gt;
For different revisions take a look at this gist &lt;a href=&quot;http://gist.github.com/109002&quot;&gt;http://gist.github.com/109002&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22831" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;chouser@n01se.net said: Thanks for that link.  Your final solution (not using nil) is already committed, but we should get those tests into clojure-test once it&apos;s location has been settled.&lt;/p&gt;</comment>
                    <comment id="22832" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;richhickey said: The new partition has this 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; (partition 3 1 nil (range 10))
((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8 9) (8 9))
user=&amp;gt; (partition 3 1 [42] (range 10))
((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8 9) (8 9 42))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It seems to me that with a step of one it should never use the pad, and, more generally, once it has produced one partition containing the last element of the coll it should be done.&lt;/p&gt;</comment>
                    <comment id="22833" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;richhickey said: An alternative rule is that every step within the supplied coll is yielded, padding as supplied, which would mean ending with: &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;(7 8 9) (8 9) (9)
(7 8 9) (8 9 42) (9 42)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="22834" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:ckiilEyzqr3PTqeJe5afGb&quot;&gt;file:ckiilEyzqr3PTqeJe5afGb&lt;/a&gt;]: proposed alternative (see my comment)&lt;/p&gt;</comment>
                    <comment id="22835" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: I&apos;ve uploaded part.clj which is another possible alternative. It handles a step of 1 without using the pad. Some invariants in the partitions it produces for the 4 argument case:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;for a step size of n, if you provide n - 1 objects in the padding sequence, all output sequences will be of size n&lt;/li&gt;
	&lt;li&gt;for a step size n, the output sequences will begin with elements at offsets 0, n, 2n, 3n, ... in the original sequence until no such element exists.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Some outputs:&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; (part/partition 3 1 nil (range 10))
((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8 9))
user=&amp;gt; (part/partition 3 1 [42] (range 10))
((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8 9))
---
user=&amp;gt; (part/partition 3 2 nil (range 9))
((0 1 2) (2 3 4) (4 5 6) (6 7 8) (8))
user=&amp;gt;  (part/partition 3 2 [42] (range 9))
((0 1 2) (2 3 4) (4 5 6) (6 7 8) (8 42))
user=&amp;gt; (part/partition 3 2 [42 43] (range 9))
((0 1 2) (2 3 4) (4 5 6) (6 7 8) (8 42 43))
---
user=&amp;gt; (part/partition 3 4 nil (range 6))
((0 1 2) (4 5))
user=&amp;gt; (part/partition 3 4 nil (range 7))
((0 1 2) (4 5 6))
user=&amp;gt; (part/partition 3 4 nil (range 8))
((0 1 2) (4 5 6))
user=&amp;gt; (part/partition 3 4 nil (range 9))
((0 1 2) (4 5 6) (8))
---
user=&amp;gt; (part/partition 3 3 [42 43] (range 3))
((0 1 2))
user=&amp;gt; (part/partition 3 3 [42 43] (range 4))
((0 1 2) (3 42 43))
user=&amp;gt; (part/partition 3 3 [42 43] (range 5))
((0 1 2) (3 4 42))
user=&amp;gt; (part/partition 3 3 [42 43] (range 6))
((0 1 2) (3 4 5))
user=&amp;gt; (part/partition 3 3 [42 43] (range 7))
((0 1 2) (3 4 5) (6 42 43))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;

Here&apos;s the relevant portion of the code:

&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;  ([n step pad coll]
     (lazy-seq
      (when-let [s (seq coll)]
        (let [p (take n s)]
          (cond (= n (count p))
                (cons p (partition n step pad (drop step s)))
                (&amp;gt;= step (count p))
                (list (take n (concat p pad)))))))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Please see part.clj for details and a test program.&lt;/p&gt;</comment>
                    <comment id="22836" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: Ugh, the second &quot;invariant&quot; I listed doesn&apos;t hold for step = 1. It appears to hold for other step values. Perhaps part.clj will still be useful to someone in coming up with a better solution.&lt;/p&gt;</comment>
                    <comment id="22837" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;richhickey said: I don&apos;t see why step of 1 should get special treatment. If the rule is the second one (yield partitions as long as step offsets are present in original coll), then&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;(part/partition 3 1 nil (range 10))
should end with:
(7 8 9) (8 9) (9)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="22838" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: This one appears to 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;([n step pad coll]
     (lazy-seq
      (when-let [s (seq coll)]
        (cons
         (take n (concat s pad))
         (partition n step pad (drop step s)))))))
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;

&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;user=&amp;gt; (run part)
n = 3, pad = nil
:max 5 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4) (4))
:max 6 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5) (5))
:max 7 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6) (6))
:max 8 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7) (7))
:max 9 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8) (8))

:max 5 :step 2 ((0 1 2) (2 3 4) (4))
:max 6 :step 2 ((0 1 2) (2 3 4) (4 5))
:max 7 :step 2 ((0 1 2) (2 3 4) (4 5 6) (6))
:max 8 :step 2 ((0 1 2) (2 3 4) (4 5 6) (6 7))
:max 9 :step 2 ((0 1 2) (2 3 4) (4 5 6) (6 7 8) (8))

:max 5 :step 3 ((0 1 2) (3 4))
:max 6 :step 3 ((0 1 2) (3 4 5))
:max 7 :step 3 ((0 1 2) (3 4 5) (6))
:max 8 :step 3 ((0 1 2) (3 4 5) (6 7))
:max 9 :step 3 ((0 1 2) (3 4 5) (6 7 8))

:max 5 :step 4 ((0 1 2) (4))
:max 6 :step 4 ((0 1 2) (4 5))
:max 7 :step 4 ((0 1 2) (4 5 6))
:max 8 :step 4 ((0 1 2) (4 5 6))
:max 9 :step 4 ((0 1 2) (4 5 6) (8))

n = 3, pad = [42 43]
:max 5 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 42) (4 42 43))
:max 6 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 42) (5 42 43))
:max 7 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 42) (6 42 43))
:max 8 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 42) (7 42 43))
:max 9 :step 1 ((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8 42) (8 42 43))

:max 5 :step 2 ((0 1 2) (2 3 4) (4 42 43))
:max 6 :step 2 ((0 1 2) (2 3 4) (4 5 42))
:max 7 :step 2 ((0 1 2) (2 3 4) (4 5 6) (6 42 43))
:max 8 :step 2 ((0 1 2) (2 3 4) (4 5 6) (6 7 42))
:max 9 :step 2 ((0 1 2) (2 3 4) (4 5 6) (6 7 8) (8 42 43))

:max 5 :step 3 ((0 1 2) (3 4 42))
:max 6 :step 3 ((0 1 2) (3 4 5))
:max 7 :step 3 ((0 1 2) (3 4 5) (6 42 43))
:max 8 :step 3 ((0 1 2) (3 4 5) (6 7 42))
:max 9 :step 3 ((0 1 2) (3 4 5) (6 7 8))

:max 5 :step 4 ((0 1 2) (4 42 43))
:max 6 :step 4 ((0 1 2) (4 5 42))
:max 7 :step 4 ((0 1 2) (4 5 6))
:max 8 :step 4 ((0 1 2) (4 5 6))
:max 9 :step 4 ((0 1 2) (4 5 6) (8 42 43))

nil
user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="22839" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:dmo9mEyzWr3QuceJe5aVNr&quot;&gt;file:dmo9mEyzWr3QuceJe5aVNr&lt;/a&gt;]: improved version&lt;/p&gt;</comment>
                    <comment id="22840" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;richhickey said: This looks fine to me, do you want to make up a patch Steve?&lt;/p&gt;</comment>
                    <comment id="22841" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:bolonky_8r3RY8eJe5afGb&quot;&gt;file:bolonky_8r3RY8eJe5afGb&lt;/a&gt;]: modified per comments&lt;/p&gt;</comment>
                    <comment id="22842" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: The patch includes and updated doc string, the new 4 argument case, and a change to the whitespace in the 3 argument case for consistent indentation with the 4 argument case (current emacs clojure-mode). I can provide a patch that doesn&apos;t touch the 3 argument case whitespace if desired.&lt;/p&gt;</comment>
                    <comment id="22843" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;richhickey said: I think the doc should be even more explicit, something like:&lt;/p&gt;

&lt;p&gt;... do not overlap. If no pad argument is supplied, will produce only complete partitions of size n, possibly not including items at the end if the size of coll is not a multiple of n. If the pad argument is supplied, will produce a partition at every offset present in the supplied collection, using the pad elements as necessary to pad trailing partitions up to n items each. If pad is nil or a collection containing fewer than n-1 items, ...&lt;/p&gt;</comment>
                    <comment id="22844" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: How about 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;&quot;Returns a lazy seq of lazy subseqs of coll, each of (nominally) n
  items. The subseqs begin at offsets 0, step, 2*step, etc. in coll. If
  step is not supplied, it defaults to n yielding adjacent, non-overlapping
  subseqs. If pad is not supplied, produces only complete subseqs of n
  items, possibly not including some items at the end of coll. If pad is
  supplied, produces a subseq at every offset present in coll, using any
  available items from pad to pad shorter subseqs up to n items. If pad is
  a seq of at least n-1 items, produces only complete padded subseqs of n
  items. If pad is shorter (or nil) trailing padded subseqs may be
  shorter.&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I adopted the mathematical terminology that the partition is the operation (the division into parts) and that the individual pieces are not &quot;partitions&quot;, but something else: part, block, chunk, or as I propose here, subseq. I like subseq because it embodies succinctly the fact that the items from coll are always kept sequential.&lt;/p&gt;</comment>
                    <comment id="22845" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;richhickey said: I&apos;m now convinced we are cramming 2 functions into one, and would prefer to see this new functionality as a new function:&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;(take-subs n coll)
(take-subs n step coll)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&apos;padding&apos; isn&apos;t a necessary concept, as we have concat. take implies the possible partial subseqs. Also take-subs can yield a lazy seq of lazy seqs, but partition can&apos;t.&lt;/p&gt;</comment>
                    <comment id="22846" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: [&lt;a href=&quot;file:bnWYoqzBKr3RKeeJe5afGb&quot;&gt;file:bnWYoqzBKr3RKeeJe5afGb&lt;/a&gt;]: take-subs + tests&lt;/p&gt;</comment>
                    <comment id="22847" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: OK, paddiing isn&apos;t necessary because the same thing can be accomplished by using concat to append a padding sequence of exactly n-1 items to coll before processing it with partition.&lt;/p&gt;

&lt;p&gt;partition can&apos;t return lazy subseqs because it counts them which (in the general case) will realize them.&lt;/p&gt;

&lt;p&gt;ticket-120.patch contains modified docs for partition, removed arity 4 case from partition, take-subs implemented, tests for take-subs based on tests for partition, enhanced one sub-test for partition.&lt;/p&gt;</comment>
                    <comment id="22848" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;digash said: I like the new take-subs, but I cannot figure out how to use concat instead of partition without counting it and realizing the whole sequence.&lt;br/&gt;
The initial motivation was to use partition with destructuring and creating matrix from a sequences. I do not see an easy way to reproduce this case with the new implementation.&lt;/p&gt;

&lt;p&gt;The old implementation:&lt;br/&gt;
(for [&lt;span class=&quot;error&quot;&gt;&amp;#91;a b c&amp;#93;&lt;/span&gt; (partition 3 3 (repeat 0) &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;a b c&amp;#93;&lt;/span&gt;) ==&amp;gt; (&lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;4 0 0&amp;#93;&lt;/span&gt;)&lt;/p&gt;

&lt;p&gt;The new implementation:&lt;br/&gt;
(take 10 (let [coll &lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3 4&amp;#93;&lt;/span&gt; p 3] (take (/ (count coll) p) (for [&lt;span class=&quot;error&quot;&gt;&amp;#91;a b c&amp;#93;&lt;/span&gt; (take-subs p (concat coll (repeat 0)))] &lt;span class=&quot;error&quot;&gt;&amp;#91;a b c&amp;#93;&lt;/span&gt;)))) ==&amp;gt; (&lt;span class=&quot;error&quot;&gt;&amp;#91;1 2 3&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;4 0 0&amp;#93;&lt;/span&gt;)&lt;/p&gt;</comment>
                    <comment id="22849" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: Here are two options for how I would write the example using the most recent 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; (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [[a b c] (partition 3 (concat [1 2 3 4] (take 3 (repeat 0))))] [a b c])
([1 2 3] [4 0 0])
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [[a b c] (partition 3 (concat [1 2 3 4] [0 0 0]))] [a b c])
([1 2 3] [4 0 0])
user=&amp;gt; 
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;or in the general &lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt;:
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;user=&amp;gt; (defn padded-partition
[n pad coll]
(partition n (concat coll (take (dec n) pad))))
#&apos;user/padded-partition
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [[a b c] (padded-partition 3 (repeat 0) [1 2 3 4])] [a b c])
([1 2 3] [4 0 0])
user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="22850" author="importer" created="Tue, 28 Sep 2010 07:52:00 -0500"  >&lt;p&gt;scgilardi said: My first code example above was incorrect. For proper operation with all combinations of n and step, the concatenated padding seq needs to be exactly n-1 in length.&lt;/p&gt;

&lt;p&gt;Here&apos;s the correction:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [[a b c] (partition 3 (concat [1 2 3 4] (take 2 (repeat 0))))] [a b c])
([1 2 3] [4 0 0])
user=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [[a b c] (partition 3 (concat [1 2 3 4] [0 0]))] [a b c])
([1 2 3] [4 0 0])
user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27308" author="chouser@n01se.net" created="Fri, 18 Nov 2011 23:20:02 -0600"  >&lt;p&gt;partition has a pad argument now.  Can this be closed?&lt;/p&gt;</comment>
                    <comment id="27397" author="stu" created="Fri, 2 Dec 2011 12:17:05 -0600"  >&lt;p&gt;partition has pad now&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10013">Test</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-118] GC Issue 114:  version.properties in branch/1.0 is inaccurate</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-118</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by hlship, May 04, 2009

The version.properties in the 1.0 branch generates snapshot releases.
Ideally, there should be a tags/1.0 branch that locks down the 1.0 release.
Context: trying to build a 1.0 release artifact &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; the Maven repository.

Comment 1 by richhickey, May 04, 2009

Do you believe &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; advice was erroneous?

http:&lt;span class=&quot;code-comment&quot;&gt;//groups.google.com/group/clojure/msg/cb46994561dbc732
&lt;/span&gt;
Comment 2 by hlship, May 05, 2009

I&apos;m bothered that the 1.0 release is a 1.0 release, but not really.  Either its a
&lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; release or its not. Saying its still a snapshot when you&apos;ve broadcasted to the
world that its &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; seems very odd to me.

On the mailing list, I espoused the &lt;span class=&quot;code-quote&quot;&gt;&quot;Apache Way&quot;&lt;/span&gt;, which is to not get hung up on a
&lt;span class=&quot;code-quote&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt; number, but keep releasing.  If &lt;span class=&quot;code-quote&quot;&gt;&quot;1.0.2&quot;&lt;/span&gt; has bugs, fix them and release
&lt;span class=&quot;code-quote&quot;&gt;&quot;1.0.3&quot;&lt;/span&gt;.  If that is &lt;span class=&quot;code-keyword&quot;&gt;finally&lt;/span&gt; stable, announce &lt;span class=&quot;code-quote&quot;&gt;&quot;Clojure 1.0 is version 1.0.3&quot;&lt;/span&gt;. Let the
release prove itself valid.

Older Tapestry releases were based on the &lt;span class=&quot;code-quote&quot;&gt;&quot;line in the sand&quot;&lt;/span&gt; approach ... and always
ended up requiring a flurry of dot release bug fixes.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13515">CLJ-118</key>
            <summary>GC Issue 114:  version.properties in branch/1.0 is inaccurate</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 14:17:00 -0500</created>
                <updated>Fri, 20 Jul 2012 16:55:35 -0500</updated>
                    <resolved>Fri, 20 Jul 2012 16:55:35 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22814" author="importer" created="Tue, 24 Aug 2010 03:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/118&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/118&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22815" author="importer" created="Tue, 24 Aug 2010 03:45:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                </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-108] GC  Issue 104: macro call from Java isn&apos;t evaluated</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-108</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by csaager, Apr 10, 2009

What (small set of) steps will reproduce the problem?
(defn abb [a [b] [&amp;amp; c]] b)
(defmacro extr [fun] `((meta (&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~fun)) :arglists))

Java 
Var extr,abb ...
&lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt; arglists = extr.invoke(abb) 



What is the expected output? What &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; you see instead?
Expected ([a [b] [&amp;amp; c]]) (like in REPL)
Got: ((clojure.core/meta (&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;
#&apos;org.enclojure.ide.nb.editor.ClojureSourceTemplate/abb)) :arglists) (a Cons)

What version are you using?
org-enclojure-ide-nb-editor-20090406.590.1337.nbm

Was &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; discussed on the group? If so, please provide a link to the
discussion:

Please provide any additional information below.

I tried to call &lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(arglists) and eval.invoke(arglists), both
threw an exception
Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ClassCastException: clojure.lang.Var
cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to clojure.lang.Symbol (NO_SOURCE_FILE:0)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4493)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4315)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4276)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$InvokeExpr.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:2761)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4488)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4315)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4276)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$InvokeExpr.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:2757)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4488)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4315)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4276)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$BodyExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:3852)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnMethod.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:3687)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnMethod.access$1100(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:3564)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnExpr.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:2953)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4484)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4315)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4520)
        at clojure.core$eval__3975.invoke(core.clj:1743)
        at clojure.lang.Var.invoke(Var.java:346)
        at com.yourcompany.NewClass.main(NewClass.java:32)
Caused by: java.lang.ClassCastException: clojure.lang.Var cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to
clojure.lang.Symbol
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$TheVarExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:485)
        at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4486)
        ... 20 more



Comment 1 by durka42, Apr 12, 2009

I am not sure &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; is a bug.

Macros are just functions with a bit set in the metadata, so when called like
functions they should just &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; code.
extr.invoke(abb) returns ((clojure.core/meta (&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; #&apos;clojure.core/abb)) :arglists).
Note that the macro was called with the Var abb. When evaluated, &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;throws&lt;/span&gt; an
exception because &lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; was called with a Var instead of a symbol (it is meant to be
called as (&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; abb)).
What the REPL does is more like extr.invoke(RT.readString(&lt;span class=&quot;code-quote&quot;&gt;&quot;abb&quot;&lt;/span&gt;)) or
extr.invoke(Symbol.create(&lt;span class=&quot;code-quote&quot;&gt;&quot;abb&quot;&lt;/span&gt;)), both of which &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; ((clojure.core/meta (&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;
abb)) :arglists) which can be evaluated as you expect.

Comment 2  by richhickey, Apr 12, 2009

Please discuss things like &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; on the group to clarify the issue and your
understanding before posting an issue here - thanks.

Status: Invalid&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13505">CLJ-108</key>
            <summary>GC  Issue 104: macro call from Java isn&apos;t evaluated</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 16:01:00 -0500</created>
                <updated>Tue, 24 Aug 2010 05:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 05:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22784" author="importer" created="Tue, 24 Aug 2010 05:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/108&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/108&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
test.java - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/acZHQ2w4ir3Od2eJe5aVNr/download/acZHQ2w4ir3Od2eJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/acZHQ2w4ir3Od2eJe5aVNr/download/acZHQ2w4ir3Od2eJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22785" author="importer" created="Tue, 24 Aug 2010 05:45:00 -0500"  >&lt;p&gt;oranenj said: [&lt;a href=&quot;file:acZHQ2w4ir3Od2eJe5aVNr&quot;&gt;file:acZHQ2w4ir3Od2eJe5aVNr&lt;/a&gt;]: on comment 1&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-101] GC Issue 97:    partition-by does not work correctly when passed a function with side-effects</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-101</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;&amp;gt; What (small set of) steps will reproduce the problem?

(def coll &apos;(a a b c nil nil nil d e f))
(partition-by #(or (nil? %) (gensym)) coll)
==&amp;gt; partition-by runs into an endless loop


&amp;gt; What is the expected output? What &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; you see instead?

From what the doc string says it seems that
partition-by would &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt;:
((a) (a) (a) (b) (c) (nil nil nil) (d) (e) (f))
The provided function returns &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; non-nil elements
a &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; value.


&amp;gt; What version are you using?

r1327


&amp;gt; Please provide any additional information below.

A minimum change would be to update the doc strings,
stating that f must not have side-effects.
But &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; we would like to keep that door open, then the
current behaviour could be patched.
The problem is &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;:
In partition-by fv gets assigned (f (first s)), and
only a moment later (f (first s)) is evaluated again,
in the binding &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; run, in the take-&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt;.
But as f has side effects we have:
(= (f (first s)) (f (first s))) ==&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
Now take-&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; will &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; an empty lazy-seq and the
drop will remove zero elements, as run is empty.

Instead fv should always be an element of run, and
take-&lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; should run on the &lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; of s instead of on
s itself.

Comment 1  by richhickey, Mar 16, 2009

partition-by is not part of Clojure core

Status: Invalid&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13498">CLJ-101</key>
            <summary>GC Issue 97:    partition-by does not work correctly when passed a function with side-effects</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 14:51:00 -0500</created>
                <updated>Tue, 24 Aug 2010 04:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 04:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22763" author="importer" created="Tue, 24 Aug 2010 04:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/101&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/101&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-100] GC  Issue 96:    In FOR macro the :let clause does not establish a lexical binding</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-100</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by splendidlord, Mar 14, 2009

&amp;gt; What (small set of) steps will reproduce the problem?

In a fresh Clojure:
(&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [a (range 5) :let [x (* a a)]] x)
==&amp;gt; java.lang.Exception: Unable to resolve symbol: x in &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; context

Now:
(def x -1000)
(&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [a (range 5) :let [x (* a a)]] x)
==&amp;gt; (-1000 -1000 -1000 -1000 -1000)


&amp;gt; What is the expected output? What &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; you see instead?

It should be:
(&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; [a (range 5) :let [x (* a a)]] x)
==&amp;gt; (0 1 4 9 16)


&amp;gt; What version are you using?

SVN r1327

Comment 1 by splendidlord, Mar 14, 2009

Sorry, I have two clojure.jars on my system and I used an older one.
In r1327 &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; bug does not longer exist. Please close the issue, thanks.

Comment 2 by richhickey, Mar 16, 2009

(No comment was entered &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; change.)

Status: Invalid&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13497">CLJ-100</key>
            <summary>GC  Issue 96:    In FOR macro the :let clause does not establish a lexical binding</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 22:50:00 -0500</created>
                <updated>Tue, 24 Aug 2010 00:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 00:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22762" author="importer" created="Tue, 24 Aug 2010 00:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/100&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/100&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-89] GC  Issue 85:    In a defn, arglists metadata becomes the first (unexpected?) symbol</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-89</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by jochu0, Feb 22, 2009

&amp;gt; What (small set of) steps will reproduce the problem?

(:arglists (meta (defn arglists broken-arglist ([a] a) ([a b] b))))
(broken-arglist)

&amp;gt; What is the expected output? What &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; you see instead?

I would expect ([a] [a b]) &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; not an error.

&amp;gt; What version are you using?

Using the latest clojure (r1298) and also likely to exist before lazy-seq.

&amp;gt; Was &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; discussed on the group? If so, please provide a link to the
discussion:

http:&lt;span class=&quot;code-comment&quot;&gt;//groups.google.com/group/clojure/browse_thread/thread/bafdb169330a9344&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13486">CLJ-89</key>
            <summary>GC  Issue 85:    In a defn, arglists metadata becomes the first (unexpected?) symbol</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 13:37:00 -0500</created>
                <updated>Tue, 24 Aug 2010 03:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 03:45:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22719" author="importer" created="Tue, 24 Aug 2010 03:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/89&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/89&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22720" author="importer" created="Tue, 24 Aug 2010 03:45:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                    <comment id="22721" author="importer" created="Tue, 24 Aug 2010 03:45:00 -0500"  >&lt;p&gt;stu said: On the latest master I see what I think is the expected 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;(:arglists (meta (defn arglists broken-arglist ([a] a) ([a b] b))))
java.lang.IllegalArgumentException: Don&apos;t know how to create ISeq from: clojure.lang.Symbol&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-85] Double post of #84</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-85</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description></description>
                <environment></environment>
            <key id="13482">CLJ-85</key>
            <summary>Double post of #84</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 22:30:00 -0500</created>
                <updated>Tue, 24 Aug 2010 00:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 00:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22705" author="importer" created="Tue, 24 Aug 2010 00:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/85&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/85&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
genclass-allow-unresolved-classname.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/c9OAUmw30r3RbzeJe5afGb/download/c9OAUmw30r3RbzeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/c9OAUmw30r3RbzeJe5afGb/download/c9OAUmw30r3RbzeJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22706" author="importer" created="Tue, 24 Aug 2010 00:45:00 -0500"  >&lt;p&gt;oranenj said: [&lt;a href=&quot;file:c9OAUmw30r3RbzeJe5afGb&quot;&gt;file:c9OAUmw30r3RbzeJe5afGb&lt;/a&gt;]: on comment 1&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-82] GC Issue 79: Allow read to accept readers other than a PushbackReader</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-82</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by p...@hagelb.org, Feb 12, 2009

&lt;span class=&quot;code-quote&quot;&gt;&quot;read&quot;&lt;/span&gt; should be able to accept different kinds of readers, wrapping them
in a PushbackReader where necessary.

This should be implemented in LispReader.java rather than the read function
in core.clj, since the latter would require turning read into a multimethod.

http:&lt;span class=&quot;code-comment&quot;&gt;//groups.google.com/group/clojure/browse_thread/thread/fedbb2a63af633f0
&lt;/span&gt;

Comment 1 by p...@hagelb.org, Feb 12, 2009

Attached a small patch that provides &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; and updates the docstring &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; read.

Simple test &lt;span class=&quot;code-keyword&quot;&gt;case&lt;/span&gt;: (= [1 2 3] (read (java.io.StringReader. &lt;span class=&quot;code-quote&quot;&gt;&quot;[1 2 3]&quot;&lt;/span&gt;)))

Comment 2  by p...@hagelb.org, Feb 20, 2009

Feel free to close &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; out as a wontfix; I can&apos;t find any way around the problems
brought up by the mailing list.

Comment 3 by richhickey, Feb 21, 2009

ok - WontFix

Status: WontFix&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13479">CLJ-82</key>
            <summary>GC Issue 79: Allow read to accept readers other than a PushbackReader</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 22:26:00 -0500</created>
                <updated>Tue, 24 Aug 2010 00:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 00:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22697" author="importer" created="Tue, 24 Aug 2010 00:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/82&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/82&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
read-from-reader.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/at4zcYw30r3R14eJe5aVNr/download/at4zcYw30r3R14eJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/at4zcYw30r3R14eJe5aVNr/download/at4zcYw30r3R14eJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22698" author="importer" created="Tue, 24 Aug 2010 00:45:00 -0500"  >&lt;p&gt;oranenj said: [&lt;a href=&quot;file:at4zcYw30r3R14eJe5aVNr&quot;&gt;file:at4zcYw30r3R14eJe5aVNr&lt;/a&gt;]: on comment 1&lt;/p&gt;</comment>
                    <comment id="22699" author="importer" created="Tue, 24 Aug 2010 00:45:00 -0500"  >&lt;p&gt;oranenj said: Updating tickets (#72, #82)&lt;/p&gt;

&lt;p&gt;WontFix on google code&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-72] GC Issue 69: Documentation: repl_and_main page should discuss use of java -jar clojure.jar</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-72</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by hlship, Feb 08, 2009

In many cases, when you have a script with no extra dependencies outside of
Clojure, it is easiest to:

java -jar clojure.jar myscript.clj

This should be mentioned on:

http:&lt;span class=&quot;code-comment&quot;&gt;//clojure.org/repl_and_main
&lt;/span&gt;
Comment 1 by richhickey, Feb 09, 2009

This was discussed and it was agreed that &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; causes more problems later on &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;
users when &lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; to use other jars and -cp doesn&apos;t work

Status: WontFix&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13469">CLJ-72</key>
            <summary>GC Issue 69: Documentation: repl_and_main page should discuss use of java -jar clojure.jar</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 14:00:00 -0500</created>
                <updated>Tue, 24 Aug 2010 04:45:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 04:45:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22656" author="importer" created="Tue, 24 Aug 2010 04:45:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/72&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/72&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22657" author="importer" created="Tue, 24 Aug 2010 04:45:00 -0500"  >&lt;p&gt;oranenj said: Updating tickets (#72, #82)&lt;/p&gt;

&lt;p&gt;WontFix on google code&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-61] GC Issue 57: Compiler internal error when expanding macro: class not found</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-61</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by tuomas.lukka, Jan 29, 2009
 
------------------------------

What (small set of) steps will reproduce the problem?

Run the following code:

(defmacro b [] (let [ x (fn [] []) ] x))
(def a (fn [] (b)))


What is the expected output? What &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; you see instead?

I&apos;d expect it to either pass or give a proper error. What I get
is

Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ExceptionInInitializerError (test.clj:2)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$DefExpr.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:308)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4147)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.load(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4470)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.loadFile(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:4437)
 at clojure.lang.Script.main(Script.java:65)
Caused by: java.lang.ExceptionInInitializerError
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.newInstance0(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.java:355)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.newInstance(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.java:308)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnExpr.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:3218)
 at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$DefExpr.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:297)
 ... 4 more
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException:
clojure.core$b__1$x__3
 at clojure.lang.RT.readString(RT.java:1192)
 at clojure.core$a__7.&amp;lt;clinit&amp;gt;(test.clj:2)
 ... 12 more
Caused by: java.lang.ClassNotFoundException: clojure.core$b__1$x__3
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:52)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;ClassLoader&lt;/span&gt;.loadClass(&lt;span class=&quot;code-object&quot;&gt;ClassLoader&lt;/span&gt;.java:307)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;ClassLoader&lt;/span&gt;.loadClass(&lt;span class=&quot;code-object&quot;&gt;ClassLoader&lt;/span&gt;.java:252)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;ClassLoader&lt;/span&gt;.loadClassInternal(&lt;span class=&quot;code-object&quot;&gt;ClassLoader&lt;/span&gt;.java:320)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.forName0(Native Method)
 at java.lang.&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.forName(&lt;span class=&quot;code-object&quot;&gt;Class&lt;/span&gt;.java:247)
 at clojure.lang.RT.classForName(RT.java:1506)
 at clojure.lang.LispReader$EvalReader.invoke(LispReader.java:908)
 at clojure.lang.LispReader$DispatchReader.invoke(LispReader.java:530)
 at clojure.lang.LispReader.read(LispReader.java:143)
 at clojure.lang.RT.readString(RT.java:1188)
 ... 13 more


What version are you using?

20081217

Was &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; discussed on the group? If so, please provide a link to the
discussion:

no&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13458">CLJ-61</key>
            <summary>GC Issue 57: Compiler internal error when expanding macro: class not found</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 00:31:00 -0500</created>
                <updated>Tue, 24 Aug 2010 03:44:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 03:44:00 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22618" author="importer" created="Tue, 24 Aug 2010 03:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/61&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/61&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22619" author="importer" created="Tue, 24 Aug 2010 03:44:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                    <comment id="22620" author="importer" created="Tue, 24 Aug 2010 03:44:00 -0500"  >&lt;p&gt;stu said: The code appears to run correctly against current master.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-50] GC Issue 46: callable defstruct (PersistentStructMap$Def extends AFn)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-50</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by chouser, Jan 15, 2009
Describe the feature/change.

This much works already:
(defstruct rect :width :height)
(struct rect 5 10)  ==&amp;gt; {:width 5, :height 10}

With the included patch you can also:
(rect 5 10)  ==&amp;gt; {:width 5, :height 10}

Was &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; discussed on the group? If so, please provide a link to the
discussion:

http:&lt;span class=&quot;code-comment&quot;&gt;//groups.google.com/group/clojure/browse_thread/thread/12a138ad58ff6c36/b20b68ef939fccf7
&lt;/span&gt;
Comment 1 by chouser, Jan 15, 2009
Forgot the patch attachment.
 structmap-def-&lt;span class=&quot;code-keyword&quot;&gt;extends&lt;/span&gt;-restfn.patch
923 bytes Download&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13447">CLJ-50</key>
            <summary>GC Issue 46: callable defstruct (PersistentStructMap$Def extends AFn)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 23:21:00 -0500</created>
                <updated>Mon, 15 Nov 2010 08:14:04 -0600</updated>
                    <resolved>Mon, 15 Nov 2010 08:14:04 -0600</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22591" author="importer" created="Tue, 24 Aug 2010 14:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/50&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/50&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
structmap-def-extends-restfn.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/aFFlyCw3qr3R14eJe5aVNr/download/aFFlyCw3qr3R14eJe5aVNr&quot;&gt;https://www.assembla.com/spaces/clojure/documents/aFFlyCw3qr3R14eJe5aVNr/download/aFFlyCw3qr3R14eJe5aVNr&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22592" author="importer" created="Tue, 24 Aug 2010 14:44:00 -0500"  >&lt;p&gt;cemerick said: [&lt;a href=&quot;file:aFFlyCw3qr3R14eJe5aVNr&quot;&gt;file:aFFlyCw3qr3R14eJe5aVNr&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="22593" author="importer" created="Tue, 24 Aug 2010 14:44:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                    <comment id="22594" author="importer" created="Tue, 24 Aug 2010 14:44:00 -0500"  >&lt;p&gt;richhickey said: I&apos;m not sure I want to touch structmaps prior to implements&lt;/p&gt;</comment>
                    <comment id="25941" author="chouser@n01se.net" created="Sun, 14 Nov 2010 21:22:54 -0600"  >&lt;p&gt;This ticket has survived almost two years, two bug tracker migrations&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; and now who uses structs anymore?  Records have essentially this syntax for their ctors.  I nominate this ticket be closed as &quot;wontfix&quot; or equivalent.&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://code.google.com/p/clojure/issues/detail?id=46&quot;&gt;http://code.google.com/p/clojure/issues/detail?id=46&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="10013">Test</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-39] GC Issue 35: Wiki is closed to the public</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-39</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by dresweng...@dreish.org, Jan 07, 2009
Last night on IRC, the GC Wiki was suggested as a way to organize a users&apos;
wish-list so rhickey can conveniently ignore it and focus on real issues in
the issue tracker.  Unfortunately, it appears only rhickey is allowed to
edit, much less add pages to, the wiki.

Comment 1 by richhickey, Jan 07, 2009
No, the suggestion was to use the user wiki:

http:&lt;span class=&quot;code-comment&quot;&gt;//en.wikibooks.org/wiki/Clojure_Programming
&lt;/span&gt;Status: WontFix&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13436">CLJ-39</key>
            <summary>GC Issue 35: Wiki is closed to the public</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 00:13:00 -0500</created>
                <updated>Tue, 24 Aug 2010 03:44:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 03:44:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22569" author="importer" created="Tue, 24 Aug 2010 03:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/39&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/39&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-17] GC Issue 13: validate in (keyword s) and (symbol s)</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-17</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reported by richhickey, Dec 17, 2008
Make sure they create readable keywords/symbols

Comment 1 by p...@hagelb.org, Apr 27, 2009
Could &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; be done with a regex, or should it &lt;span class=&quot;code-keyword&quot;&gt;try&lt;/span&gt; to confirm the name using the reader?
Comment 2 by p...@hagelb.org, Apr 27, 2009
I&apos;ve implemented &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; in the attached patch. One thing that could be improved is that
invalid names simply raise an Exception, though it seems LispReader&apos;s ReaderException
would be more appropriate. I wasn&apos;t sure how to raise that though since it needs a
line number; it&apos;s not clear how to get the current line number.

The patch is still an improvement on the current state of things, though I&apos;d
appreciate a tip as to how to raise the right exception.

I&apos;ve also attached a patch to the test suite that ensures (symbol s) and (keyword s)
work properly in the context of invalid names. I can re-submit &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; to the contrib
project &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; that&apos;s desired &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; the core patch is accepted.
 0001-Test-invalid-symbol-keyword-names-raise-exceptions.patch
1.6 KB Download
Comment 3 by p...@hagelb.org, Apr 27, 2009
Last patch had a problem; used things like defn- etc. before they were defined in
core.clj. This attachment fixes that.
 validate-symbol-keyword-names.patch
2.1 KB Download
Comment 4 by p...@hagelb.org, Jun 13 (3 days ago)
This exists as a git branch too now: 
http:&lt;span class=&quot;code-comment&quot;&gt;//github.com/technomancy/clojure/tree/validate-symbols-issue-13&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="13414">CLJ-17</key>
            <summary>GC Issue 13: validate in (keyword s) and (symbol s)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Jun 2009 11:56:00 -0500</created>
                <updated>Fri, 7 Oct 2011 08:03:06 -0500</updated>
                    <resolved>Fri, 7 Oct 2011 08:03:05 -0500</resolved>
                                            <fixVersion>Backlog</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="22498" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/17&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/17&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Test-invalid-symbol-keyword-names-raise-exceptions.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cpC-Qow3ar3P8LeJe5afGb/download/cpC-Qow3ar3P8LeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cpC-Qow3ar3P8LeJe5afGb/download/cpC-Qow3ar3P8LeJe5afGb&lt;/a&gt;&lt;br/&gt;
validate-symbol-keyword-names.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/cpDbtWw3ar3P8LeJe5afGb/download/cpDbtWw3ar3P8LeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/cpDbtWw3ar3P8LeJe5afGb/download/cpDbtWw3ar3P8LeJe5afGb&lt;/a&gt;&lt;br/&gt;
17-validate-keywords-symbols.diff - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/d61sHuVFer3OGKeJe5afGb/download/d61sHuVFer3OGKeJe5afGb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/d61sHuVFer3OGKeJe5afGb/download/d61sHuVFer3OGKeJe5afGb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="22499" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;cemerick said: [&lt;a href=&quot;file:cpC-Qow3ar3P8LeJe5afGb&quot;&gt;file:cpC-Qow3ar3P8LeJe5afGb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="22500" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;cemerick said: [&lt;a href=&quot;file:cpDbtWw3ar3P8LeJe5afGb&quot;&gt;file:cpDbtWw3ar3P8LeJe5afGb&lt;/a&gt;]&lt;/p&gt;</comment>
                    <comment id="22501" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;richhickey said: Updating tickets (#8, #19, #30, #31, #126, #17, #42, #47, #50, #61, #64, #69, #71, #77, #79, #84, #87, #89, #96, #99, #103, #107, #112, #113, #114, #115, #118, #119, #121, #122, #124)&lt;/p&gt;</comment>
                    <comment id="22502" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;technomancy said: These patches no longer cleanly apply. Working on an updated version.&lt;/p&gt;</comment>
                    <comment id="22503" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;technomancy said: [&lt;a href=&quot;file:d61sHuVFer3OGKeJe5afGb&quot;&gt;file:d61sHuVFer3OGKeJe5afGb&lt;/a&gt;]: test and implementation&lt;/p&gt;</comment>
                    <comment id="22504" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;richhickey said: I just wonder if we can afford the overhead of this validation all the time&lt;/p&gt;</comment>
                    <comment id="22505" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;richhickey said: Anyone have any bright ideas on how to avoid the overhead?&lt;/p&gt;</comment>
                    <comment id="22506" author="importer" created="Tue, 28 Sep 2010 06:50:00 -0500"  >&lt;p&gt;cemerick said: I&apos;m sure this was brought up a long time ago in prior discussions, but: should validity of symbols and keywords even be defined?  Insofar as libraries use them for naming things, especially as read from external representations (e.g. XML, RDF, SGML, etc), it seems like any validation would be an entirely artificial limitation.&lt;/p&gt;

&lt;p&gt;For my money, having keywords and symbols print in a failsafe-readable way, e.g. #|symbol with whitespace| (maybe checking at print-time to see if the more common printing is suitable, as would be most common) would:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;guarantee that symbols and keywords are readably printable&lt;/li&gt;
	&lt;li&gt;not limit libraries from using keywords and such in very convenient ways&lt;/li&gt;
	&lt;li&gt;provide a pleasant shortcut for using symbols and keywords that might not be &quot;valid&quot;, but still somehow necessary&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="26907" author="richhickey" created="Fri, 7 Oct 2011 08:03:06 -0500"  >&lt;p&gt;Runtime validation off the table for perf reasons. cemerick&apos;s suggestion that arbitrary symbol support will render them valid is sound, but arbitrary symbol support is a different ticket/idea.&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="10013">Test</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-4] test ticket 2</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-4</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;a second test ticket&lt;/p&gt;</description>
                <environment></environment>
            <key id="13401">CLJ-4</key>
            <summary>test ticket 2</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Jun 2009 20:28:00 -0500</created>
                <updated>Tue, 24 Aug 2010 11:44:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 11:44:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22467" author="importer" created="Tue, 24 Aug 2010 11:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/4&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/4&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-3] Test ticket</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-3</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;this is a test ticket&lt;/p&gt;</description>
                <environment></environment>
            <key id="13400">CLJ-3</key>
            <summary>Test ticket</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                        <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="2">Declined</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="-1">None</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Jun 2009 20:25:00 -0500</created>
                <updated>Tue, 24 Aug 2010 11:44:00 -0500</updated>
                    <resolved>Tue, 24 Aug 2010 11:44:00 -0500</resolved>
                                                                    <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="22466" author="importer" created="Tue, 24 Aug 2010 11:44:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/3&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/3&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>
</channel>
</rss>