<!--
RSS generated by JIRA (4.4#649-r158309) at Sat May 25 10:14:28 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/10027/SearchRequest-10027.xml?tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>All Release.Next Tickets (Clojure JIRA)</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?requestId=10027</link>
        <description></description>
                <language>en-us</language>
                        <issue start="0" end="38" total="38"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[CLJ-852] IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-852</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Note the following stacktrace line numbers are from the latest 1.4-snapshot, though this happens on 1.3 as well.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (defn foo ^long [^long x] x)
#&apos;user/foo
user=&amp;gt; (def x (inc (foo 10)))
CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: long, compiling:(NO_SOURCE_PATH:2) 
user=&amp;gt; (pst)
CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: long, compiling:(NO_SOURCE_PATH:2)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6444)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
	clojure.lang.Compiler.analyze (Compiler.java:6205)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6432)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
	clojure.lang.Compiler.access$100 (Compiler.java:37)
	clojure.lang.Compiler$DefExpr$Parser.parse (Compiler.java:492)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6437)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
	clojure.lang.Compiler.analyze (Compiler.java:6205)
	clojure.lang.Compiler.eval (Compiler.java:6497)
	clojure.lang.Compiler.eval (Compiler.java:6459)
Caused by:
IllegalArgumentException Unable to resolve classname: long
	clojure.lang.Compiler$HostExpr.tagToClass (Compiler.java:1003)
	clojure.lang.Compiler$InvokeExpr.getJavaClass (Compiler.java:3474)
	clojure.lang.Compiler.getMatchingParams (Compiler.java:2304)
	clojure.lang.Compiler$StaticMethodExpr.&amp;lt;init&amp;gt; (Compiler.java:1510)
	clojure.lang.Compiler$HostExpr$Parser.parse (Compiler.java:910)
	clojure.lang.Compiler.analyzeSeq (Compiler.java:6437)
	clojure.lang.Compiler.analyze (Compiler.java:6244)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;Both his patch and this newer one apply cleanly to latest master as of Feb 22, 2012.  Neither adds any new errors or warnings to compilation or tests (unless you apply the new test part of the patch without his proposed compiler fix, where the new test does fail as expected).  No docstrings need changing that I can think of.  Ben and I have both signed CAs.  Patch status is &quot;Code and Test&quot;.&lt;/p&gt;</comment>
                    <comment id="27845" author="stuart.sierra" created="Fri, 24 Feb 2012 13:32:36 -0600"  >&lt;p&gt;Screened. The addition seems harmless, merely recognizing more tags in tagToClass.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10701" name="CLJ-852-fix.patch" size="4697" author="bsmith.occs@gmail.com" created="Sun, 13 Nov 2011 09:18:53 -0600" />
                    <attachment id="10940" name="clj-852-patch2.txt" size="3595" author="jafingerhut" created="Wed, 22 Feb 2012 21:02:15 -0600" />
                    <attachment id="10401" name="CLJ-852-rfc-fix.patch" size="3639" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 14:59:56 -0500" />
                    <attachment id="10398" name="CLJ-852-test.patch" size="2200" author="bsmith.occs@gmail.com" created="Sat, 15 Oct 2011 10:41:04 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-930] cljs.core// does not work in ClojureScript</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-930</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.core// is hard coded into the reader as a special case. cljs.core// should similarly be hard coded&lt;/p&gt;</description>
                <environment></environment>
            <key id="15212">CLJ-930</key>
            <summary>cljs.core// does not work in ClojureScript</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="3">Duplicate</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Feb 2012 08:06:38 -0600</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Wed, 29 Feb 2012 13:25:03 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27864" author="jafingerhut" created="Fri, 24 Feb 2012 20:02:18 -0600"  >&lt;p&gt;David, the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-873&quot; title=&quot;Allow the function / to be referred to in namespaces other than clojure.core&quot;&gt;&lt;del&gt;CLJ-873&lt;/del&gt;&lt;/a&gt; seems to be more general than this, i.e. it allows the symbol / to be used in any namespace, not only in clojure.core and cljs.core.&lt;/p&gt;</comment>
                    <comment id="27891" author="jafingerhut" created="Wed, 29 Feb 2012 13:25:03 -0600"  >&lt;p&gt;I checked with David Nolen, and he agrees that the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-873&quot; title=&quot;Allow the function / to be referred to in namespaces other than clojure.core&quot;&gt;&lt;del&gt;CLJ-873&lt;/del&gt;&lt;/a&gt; fixes not only this issue, but also enables the symbol / to be used in any namespace.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10897" name="cljs_slash.patch" size="1426" author="dnolen" created="Wed, 8 Feb 2012 08:06:38 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

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

<item>
            <title>[CLJ-914] Add support for UUID literals using tagged literal capability.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-914</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Using the tagged literal facility added in Clojure 1.4-alpha4, add support for a UUID literal of the form:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;#uuid &quot;550e8400-e29b-41d4-a716-446655440000&quot;

;=&amp;gt; #&amp;lt;UUID 550e8400-e29b-41d4-a716-446655440000&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

<item>
            <title>[CLJ-898] Agent sends consume heap</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-898</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Simple demonstration:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn update [state]
  (send *agent* update)
  (inc state))

(def a (agent 1))

(send a update)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

&lt;p&gt;Attached is a patch that fixes the quirk.&lt;/p&gt;</comment>
                    <comment id="27617" author="tsdh" created="Wed, 25 Jan 2012 14:25:29 -0600"  >&lt;p&gt;Here&apos;s the fix for the fix.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10749" name="0001-Only-capture-a-shallow-copy-of-the-current-Frame-in-.patch" size="1693" author="tsdh" created="Fri, 16 Dec 2011 11:46:16 -0600" />
                    <attachment id="10788" name="0002-Fix-the-already-pushed-fix-for-CLJ-898.patch" size="768" author="tsdh" created="Wed, 25 Jan 2012 14:25:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-886] java.io/do-copy can garble multibyte characters</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-886</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See comments in fix:&lt;/p&gt;

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

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

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

<item>
            <title>[CLJ-872] Add support for property lookup</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-872</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Add support for property lookups to match functionality introduced in ClojureScript with &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJS-89&quot; title=&quot;Simplify the dot access special form.&quot;&gt;&lt;del&gt;CLJS-89&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

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

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

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

<item>
            <title>[CLJ-871] instant literal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-871</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;See &lt;a href=&quot;http://dev.clojure.org/pages/viewpage.action?pageId=950382&quot;&gt;http://dev.clojure.org/pages/viewpage.action?pageId=950382&lt;/a&gt; for design discussion.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14915">CLJ-871</key>
            <summary>instant literal</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Nov 2011 12:48:37 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:08 -0600</updated>
                    <resolved>Fri, 3 Feb 2012 09:05:21 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27195" author="stu" created="Fri, 4 Nov 2011 12:59:21 -0500"  >&lt;p&gt;I have tested patch locally with no Joda, 1.6.2 Joda, and 2.0 Joda. All work as intended in simple invocations.&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

&lt;hr /&gt;

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

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

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

&lt;p&gt;Cons: Clojure 1.2 used the &lt;tt&gt;#:&lt;/tt&gt; syntax to print records.&lt;/p&gt;</comment>
                    <comment id="27596" author="fogus" created="Sat, 21 Jan 2012 09:11:54 -0600"  >&lt;p&gt;Oddly, I made another case for this.  My bad.  Attached is the updated patch based off of Ben&apos;s work.  This patch is merged into the tagged literal feature as implemented in v1.4-alpha4.  I also fixed a fence-post error and very minor doc problems.  The parser currently defaults to constructing j.u.Date instances of the following form:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;date-year   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                         ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
                         ; rules
time-secfrac    = &apos;.&apos; 1*DIGIT
time-numoffset  = (&apos;+&apos; / &apos;-&apos;) time-hour &apos;:&apos; time-minute
time-offset     = &apos;Z&apos; / time-numoffset

time-part            = time-hour [ &apos;:&apos; time-minute [ &apos;:&apos; time-second [time-secfrac] [time-offset] ] ]

timestamp       = date-year [ &apos;-&apos; date-month [ &apos;-&apos; date-mday [ &apos;T&apos; time-part ] ] ]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

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

<item>
            <title>[CLJ-861] PersistentHashMap uses a hashing function that is incongruent with the equality function it uses</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-861</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;PersistentHashMap hashes its keys with Util.hash which simply calls Object.hashCode, but it compares its keys for equality using Util.equiv.  This means:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (clojure.lang.Util/equiv (Integer. -1) (Long. -1))
true
user=&amp;gt; (= (clojure.lang.Util/hash (Integer. -1)) (clojure.lang.Util/hash (Long. -1)))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;The following bad behavior results:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (def bad-map (clojure.lang.PersistentHashMap/create {(Long. -1) :here}))
#&apos;user/bad-map
user=&amp;gt; (contains? bad-map (Integer. -1))
false
user=&amp;gt; (get bad-map (Integer. -1))
nil
user=&amp;gt; (= bad-map (clojure.lang.PersistentHashMap/create {(Integer. -1) :here}))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compared to:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; (def bad-map (clojure.lang.PersistentHashMap/create {(Long. 0) :here}))
#&apos;user/bad-map
user=&amp;gt; (contains? bad-map (Integer. 0))
true
user=&amp;gt; (get bad-map (Integer. 0))
:here
user=&amp;gt; (= bad-map (clojure.lang.PersistentHashMap/create {(Long. 0) :here}))
true
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This bug also infects PersistentHashSet:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;user=&amp;gt; #{(Long. 0) (Integer. 0)}
IllegalArgumentException Duplicate key: 0  clojure.lang.PersistentHashSet.createWithCheck (PersistentHashSet.java:56)
user=&amp;gt; #{(Long. -1) (Integer. -1)}
#{-1 -1}
user=&amp;gt; (contains? #{(Long. 0)} (Integer. 0))
true
user=&amp;gt; (contains? #{(Long. -1)} (Integer. -1))
false
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14804">CLJ-861</key>
            <summary>PersistentHashMap uses a hashing function that is incongruent with the equality function it uses</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="richhickey">Rich Hickey</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Sun, 23 Oct 2011 05:22:22 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Sun, 23 Oct 2011 19:28:28 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27083" author="pjstadig" created="Sun, 23 Oct 2011 05:24:19 -0500"  >&lt;p&gt;There may be a couple different ways to fix this.  I think what would work is adding a Util.hashEquiv method that has the same equality semantics as Util.equiv and using that to hash keys instead.&lt;/p&gt;

&lt;p&gt;I&apos;d be glad to create a patch for that.&lt;/p&gt;</comment>
                    <comment id="27085" author="pjstadig" created="Sun, 23 Oct 2011 19:28:27 -0500"  >&lt;p&gt;This ticket can be closed now.  It is fixed by &lt;a href=&quot;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&quot;&gt;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27086" author="richhickey" created="Sun, 23 Oct 2011 19:28:29 -0500"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&quot;&gt;https://github.com/clojure/clojure/commit/b5f5ba2e15dc2f20e14e05141f7de7c6a3d91179&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

<item>
            <title>[CLJ-860] Add ability to disable locals clearing</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-860</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When using a debugger, it is useful to be able to see all variable values.  Locals clearing reduces the number of variabls that are non-nil, and makes uncertain whether nil values are real or an artifact of locals clearing.&lt;/p&gt;

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

&lt;p&gt;The attached patch does this by introducing the &lt;b&gt;disable-locals-clearing&lt;/b&gt; var, and using it to initialise the canBeCleared field of LocalBinding.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14802">CLJ-860</key>
            <summary>Add ability to disable locals clearing</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Fri, 21 Oct 2011 13:20:11 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:59 -0600</updated>
                    <resolved>Tue, 13 Mar 2012 10:15:49 -0500</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>7</votes>
                        <watches>10</watches>
                        <comments>
                    <comment id="27183" author="abrooks" created="Sat, 29 Oct 2011 12:19:08 -0500"  >&lt;p&gt;+1&lt;/p&gt;

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

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

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

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

&lt;p&gt;A dynamic map would work, but binding it correctly is more complicated:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(binding [*settings* (merge *settings* {...})] ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

&lt;p&gt;Implements &lt;tt&gt;&lt;b&gt;compiler-options&lt;/b&gt;&lt;/tt&gt; as a map, with a :locals-clearing key, initialised from the &lt;tt&gt;clojure.compile.locals-clearing&lt;/tt&gt; system property.&lt;/p&gt;</comment>
                    <comment id="27926" author="jafingerhut" created="Fri, 9 Mar 2012 09:39:43 -0600"  >&lt;p&gt;Just a note that all 3 patches attached right now fail to apply cleanly using &apos;git --keep-cr -s &amp;lt; patchfile.txt&apos; to latest master as of March 9, 2012.  Any consensus on which of these approaches to take?  I can update that one if so.&lt;/p&gt;</comment>
                    <comment id="27937" author="richhickey" created="Tue, 13 Mar 2012 10:15:49 -0500"  >&lt;p&gt;&lt;a href=&quot;https://github.com/clojure/clojure/commit/4036c7720949cb21ccf53c5c7c54ed1daaff2fda&quot;&gt;https://github.com/clojure/clojure/commit/4036c7720949cb21ccf53c5c7c54ed1daaff2fda&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27973" author="george" created="Wed, 21 Mar 2012 00:14:04 -0500"  >&lt;p&gt;Per RH&apos;s request, I tested this with CDT, and confirmed it works there.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10961" name="0001-add-compiler-options-map.diff" size="4592" author="hugoduncan" created="Fri, 24 Feb 2012 16:19:28 -0600" />
                    <attachment id="10494" name="add-disable-locals-clearing.diff" size="1677" author="hugoduncan" created="Fri, 21 Oct 2011 13:20:12 -0500" />
                    <attachment id="10960" name="add-enable-locals-clearing.diff" size="1655" author="hugoduncan" created="Fri, 24 Feb 2012 12:34:34 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-855] catch receives a RuntimeException rather than the expected checked exception</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-855</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Expressions passed to try that trigger the use of clojure.lang.Reflector result in their thrown checked exceptions being wrapped in RuntimeException.  As a result, the subsequent set of catches won&apos;t switch on the expected checked exception.&lt;/p&gt;


&lt;p&gt;Attached: patch for regression test that exposes the problem&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-none&quot;&gt;(defn- get-exception [expression]
  (try (eval expression)
    nil
    (catch java.lang.Throwable t
      t)))

(deftest catch-receives-checked-exception
  (are [expression expected-exception] (= expected-exception
                                          (type (get-exception expression)))
    &quot;Eh, I&apos;m pretty safe&quot; nil
    &apos;(java.io.FileReader. &quot;CAFEBABEx0/idonotexist&quot;) java.io.FileNotFoundException)) ; fails&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

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

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

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

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

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

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

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

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

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

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; (Exception e)
  {
  Util.throwCause(e);
  }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This leaves the compiler complaining about a missing &lt;tt&gt;return&lt;/tt&gt;.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt; (Exception e) 
  {
  &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; Util.throwCause(e);
  }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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

&lt;p&gt;Rich, do you remember, if there are any further implications to the catch idiom in Reflector?&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;catch&lt;/span&gt;(Exception e)
    {
    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;(e.getCause() &lt;span class=&quot;code-keyword&quot;&gt;instanceof&lt;/span&gt; Exception)
      &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; Util.runtimeException(e.getCause());
    &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;(e.getCause() &lt;span class=&quot;code-keyword&quot;&gt;instanceof&lt;/span&gt; Error)
      &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; (Error) e.getCause();
    &lt;span class=&quot;code-keyword&quot;&gt;throw&lt;/span&gt; Util.runtimeException(e);
    }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

&lt;p&gt;Using Clojure code from the Java side could be confusing if you call invoke on IFn and get a checked exception even though it is not declared with a throws clause.  It is also confusing to get checked exceptions wrapped in one or more layers of RTEs.  Was it not sufficient the way it was before having IFn declare &quot;throws Exception&quot;?&lt;/p&gt;</comment>
                    <comment id="27893" author="richhickey" created="Wed, 29 Feb 2012 15:06:50 -0600"  >&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-855&quot; title=&quot;catch receives a RuntimeException rather than the expected checked exception&quot;&gt;&lt;del&gt;CLJ-855&lt;/del&gt;&lt;/a&gt;-sneaky-throw.patch applied. Thanks Ben!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10380" name="checked-exception-regression-test.diff" size="2174" author="pmbauer" created="Tue, 11 Oct 2011 20:44:26 -0500" />
                    <attachment id="10395" name="CLJ-855-sneaky-throw.patch" size="22772" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 14:34:30 -0500" />
                    <attachment id="10384" name="CLJ-855_throw_undeclared_checked.patch" size="4969" author="bendlas" created="Wed, 12 Oct 2011 21:27:02 -0500" />
                    <attachment id="10390" name="CLJ-855-try-unwraps.patch" size="17047" author="bsmith.occs@gmail.com" created="Fri, 14 Oct 2011 00:04:43 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-846] Javadoc does not detect 1.7 when setting *core-java-api*</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-846</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;When initializing &lt;b&gt;core-java-api&lt;/b&gt;, javadoc.clj checks whether the java specification version is 1.5; if not, it uses a url for the 1.6 docs. Unfortunately, this won&apos;t find documentation for new in 1.7 classes (such as those in the java.nio.file package).&lt;/p&gt;</description>
                <environment>Windows 7; Java 1.7</environment>
            <key id="14666">CLJ-846</key>
            <summary>Javadoc does not detect 1.7 when setting *core-java-api*</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Oct 2011 13:06:26 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:00 -0600</updated>
                    <resolved>Tue, 25 Oct 2011 17:32:18 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10376" name="CLJ-846.patch" size="1041" author="stu" created="Fri, 7 Oct 2011 12:09:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-830] Report source file and line number when throwing syntax-related error from core macros</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-830</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;If you botch or misunderstand certain macros in core, they throw exceptions with very unhelpful error messages:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;=&amp;gt; (let [a])
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException:
  let requires an even number of forms in binding vector&amp;gt;

=&amp;gt; (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;-let [a 5
            b 6]
     &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException:
  &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;-let requires exactly 2 forms in binding vector&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;Something like this would be much better:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException:
  let requires an even number of forms in binding vector in com.foo.namespace:80&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These errors are all thrown via the same &lt;tt&gt;assert-args&lt;/tt&gt; function used by a variety of macros in &lt;tt&gt;clojure.core&lt;/tt&gt;; modifying it so it emits a reasonable error message should be straightforward.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14580">CLJ-830</key>
            <summary>Report source file and line number when throwing syntax-related error from core macros</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Aug 2011 08:09:12 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:01 -0600</updated>
                    <resolved>Fri, 7 Oct 2011 09:12:37 -0500</resolved>
                            <version>Release 1.2</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26740" author="stuart.sierra" created="Sat, 27 Aug 2011 15:25:46 -0500"  >&lt;p&gt;Only affects the &lt;tt&gt;assert-args&lt;/tt&gt; macro, which is private in &lt;tt&gt;clojure.core&lt;/tt&gt;. Patch works as advertised.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10317" name="CLJ-830.diff" size="6038" author="cemerick" created="Wed, 24 Aug 2011 13:04:46 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-829] Transient hashmaps mishandle hash collisions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-829</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Clojure 1.2.1 and 1.3.0-beta1 both exhibit the following behavior:&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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


&lt;p&gt;Mutable code is hard, one should invent a cool language with sane state management &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="26784" author="stu" created="Sat, 10 Sep 2011 14:54:57 -0500"  >&lt;p&gt;New tests continue to pass.&lt;/p&gt;

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

&lt;p&gt;Anyway it&apos;s on collision nodes so it&apos;s a rare occurence: I won&apos;t bother arguing further if switching to a more conservative allocation helps the patch landing in 1.3.  &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10340" name="clj-829-2.diff" size="2531" author="cgrand" created="Sat, 10 Sep 2011 03:48:51 -0500" />
                    <attachment id="10333" name="clj-829.diff" size="2537" author="cgrand" created="Thu, 8 Sep 2011 13:15:20 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-791] Include argument type info in reflection warnings and method signatures in dispatch compilation errors</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-791</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Errors like:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;More than one matching method found: foo&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;are bad, especially when there are multiple overloads and the types of one&apos;s arguments aren&apos;t immediately obvious.  In addition, reflection warnings like:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Reflection warning, %s:%d - call to %s can&apos;t be resolved&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;The above should be modified to include as much type information as possible, i.e.:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;More than one matching method found: foo(&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;) and foo(&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;) &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; arguments of type (&lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;[], &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;long&lt;/span&gt;)

Reflection warning, %s:%d - call to %s can&apos;t be resolved with arguments of type (clojure.lang.PersistentVector, &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Such ideas were briefly discussed &lt;a href=&quot;http://groups.google.com/group/clojure-dev/t/d3a7083fa870a784&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14422">CLJ-791</key>
            <summary>Include argument type info in reflection warnings and method signatures in dispatch compilation errors</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Tue, 10 May 2011 13:27:15 -0500</created>
                <updated>Fri, 1 Mar 2013 12:46:57 -0600</updated>
                    <resolved>Fri, 7 Oct 2011 09:12:28 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26427" author="cemerick" created="Tue, 10 May 2011 13:30:09 -0500"  >&lt;p&gt;Note that the attached patch (incidentally) depends on the patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-789&quot; title=&quot;Method resolution does not select exact signature matches over tying&quot;&gt;&lt;del&gt;CLJ-789&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10224" name="791.diff" size="6557" author="cemerick" created="Tue, 10 May 2011 13:30:09 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-718] Document 1.3 numeric support</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-718</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Should include&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;usage&lt;/li&gt;
	&lt;li&gt;rationale&lt;/li&gt;
	&lt;li&gt;what else&lt;/li&gt;
	&lt;li&gt;guidance for people extending math support in Clojure (e.g. Mark Engelberg&apos;s expt)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I want something I can link to whenever old ground is being retrod, and add to whenever new material comes up.&lt;/p&gt;

&lt;p&gt;Rich: do you want do this, or edit and extend a first cut from me?&lt;/p&gt;</description>
                <environment></environment>
            <key id="14331">CLJ-718</key>
            <summary>Document 1.3 numeric support</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="lvanderhart">Luke VanderHart</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Sun, 16 Jan 2011 07:25:07 -0600</created>
                <updated>Fri, 2 Dec 2011 14:07:18 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 14:07:18 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26176" author="richhickey" created="Wed, 26 Jan 2011 07:21:27 -0600"  >&lt;p&gt;Slides from Clojure Features talk given at Conj 2010&lt;/p&gt;</comment>
                    <comment id="26177" author="richhickey" created="Wed, 26 Jan 2011 07:23:32 -0600"  >&lt;p&gt;I&apos;ve uploaded my features talk slides. It has a nice outline for you to start with. If you would, start a confluence page from this. The entire job of documenting this will have to include auditing the main clojure.org docs as well.&lt;/p&gt;</comment>
                    <comment id="26726" author="lvanderhart" created="Fri, 19 Aug 2011 11:39:50 -0500"  >&lt;p&gt;I have put a draft of this (with a couple rounds of feedback) at &lt;a href=&quot;http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics&quot;&gt;http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27407" author="stu" created="Fri, 2 Dec 2011 14:07:12 -0600"  >&lt;p&gt;first pass of this is done. Not to say it couldn&apos;t be done more thoroughly...&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10093" name="conjfeatures.key" size="410993" author="richhickey" created="Wed, 26 Jan 2011 07:21:27 -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>
                                                                                                            </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-931] Syntactically broken clojure.test/are tests succeed</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-931</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;While clojure.test/are is a very useful macro, it has one major flaw.  If the assertion is syntactically incorrect, the test succeeds.  Take this testcase:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest broken-test
  (are [a b c] (= a b c)
       1 1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

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

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

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


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


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;a currently #_-disabled test case for testing `are&apos;.  It is disabled, because it fails when run with &quot;ant test&quot;.  However, it works just fine when run inside some REPL.  I presume that&apos;s because ant runs inside its own JVM instance and thus makes catching exceptions from macroexpand/eval forms impossible?!?&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="27738" author="tsdh" created="Fri, 17 Feb 2012 04:36:48 -0600"  >&lt;p&gt;Another minor update.  Now (are [] true) is allowed (but meaningless).  In the previous patch, you got a &quot;divide by zero&quot; in this case.&lt;/p&gt;</comment>
                    <comment id="27925" author="jafingerhut" created="Fri, 9 Mar 2012 09:29:20 -0600"  >&lt;p&gt;Patch 0001-Fix-&lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-931&quot; title=&quot;Syntactically broken clojure.test/are tests succeed&quot;&gt;&lt;del&gt;CLJ-931&lt;/del&gt;&lt;/a&gt;-Syntactically-broken-clojure.test-are-te.patch applies, builds, and tests cleanly as of March 9, 2012 latest master.  One author Tassilo has signed CA.&lt;/p&gt;</comment>
                    <comment id="27927" author="stuart.sierra" created="Fri, 9 Mar 2012 10:11:34 -0600"  >&lt;p&gt;I can&apos;t make the test work either. The patch looks good. Just remove the broken test instead of leaving it commented out.&lt;/p&gt;</comment>
                    <comment id="27928" author="jafingerhut" created="Fri, 9 Mar 2012 10:24:42 -0600"  >&lt;p&gt;clj-931-error-on-bad-are-syntax-patch2.txt same as previous one, except removes commented out test.  Applies, builds, and tests cleanly to latest master.&lt;/p&gt;</comment>
                    <comment id="27929" author="stuart.sierra" created="Fri, 9 Mar 2012 10:37:21 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10920" name="0001-Fix-CLJ-931-Syntactically-broken-clojure.test-are-te.patch" size="3645" author="tsdh" created="Fri, 17 Feb 2012 04:36:48 -0600" />
                    <attachment id="10989" name="clj-931-error-on-bad-are-syntax-patch2.txt" size="2339" author="jafingerhut" created="Fri, 9 Mar 2012 10:24:42 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-924] Error reporting of invalid digit in unicode character literal</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-924</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;I ran across the following code when reading unicode character literals in readUnicodeChar(String token, int offset, int length, int base)&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt; 
int d = Character.digit(token.charAt(i), base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + (char) d);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 


&lt;p&gt;Casting -1 to a char doesn&apos;t seem to produce anything useful. I&apos;m guessing the appropriate code might look like&lt;/p&gt;


&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt; 
int d = Character.digit(token.charAt(i), base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + token.charAt(i));
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; 


&lt;p&gt;For comparison, the code in the other readUnicodeCharacter used when reading strings handles this correctly with:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;int d = Character.digit(ch, base);
if(d == -1)
    throw new IllegalArgumentException(&quot;Invalid digit: &quot; + (char) ch); 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15200">CLJ-924</key>
            <summary>Error reporting of invalid digit in unicode character literal</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="cosmin">Cosmin Stejerean</reporter>
                        <labels>
                    </labels>
                <created>Sun, 5 Feb 2012 01:06:22 -0600</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27670" author="cosmin" created="Sun, 5 Feb 2012 01:09:04 -0600"  >&lt;p&gt;Attached a patch with the minor code fix.&lt;/p&gt;</comment>
                    <comment id="27849" author="stuart.sierra" created="Fri, 24 Feb 2012 15:00:12 -0600"  >&lt;p&gt;Screened. I can&apos;t demonstrate this code being called by the reader, but it seems to be correct.&lt;/p&gt;</comment>
                    <comment id="27881" author="jafingerhut" created="Mon, 27 Feb 2012 22:08:13 -0600"  >&lt;p&gt;Sorry to disturb things after this has been screened, but clj-924-unicode-invalid-digit-patch2.txt has some added tests that cause the problem to occur, as well as one other similar one nearby in LispReader.java, which is also fixed, in addition to Cosmin&apos;s fix.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10890" name="CLJ-924-unicode-invalid-digit.patch" size="924" author="cosmin" created="Sun, 5 Feb 2012 01:09:04 -0600" />
                    <attachment id="10969" name="clj-924-unicode-invalid-digit-patch2.txt" size="6659" author="jafingerhut" created="Mon, 27 Feb 2012 22:08:13 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-885] clojure.java.io/Coercions doesn&apos;t handle URL-escaping</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-885</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;clojure.java.io/Coercions implementations for URL -&amp;gt; File and File -&amp;gt; URL don&apos;t take URL escaping into account, and I think they should.&lt;/p&gt;

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

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

&lt;p&gt;I will post a link to the clojure-dev list discussion in the comments once I have the link for this ticket to post there.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15032">CLJ-885</key>
            <summary>clojure.java.io/Coercions doesn&apos;t handle URL-escaping</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Sun, 27 Nov 2011 22:21:02 -0600</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>1</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27351" author="trptcolin" created="Sun, 27 Nov 2011 22:37:48 -0600"  >&lt;p&gt;clojure-dev posting with more details (and presumably forthcoming discussion): &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/bTNX4pt_b4w/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/bTNX4pt_b4w/discussion&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27375" author="trptcolin" created="Wed, 30 Nov 2011 12:31:30 -0600"  >&lt;p&gt;Updated patch to fix the issue David Powell brought up on the dev list, so that &quot;+&quot; in a URL does not get translated to &quot; &quot; in a File.&lt;/p&gt;</comment>
                    <comment id="27377" author="stuart.sierra" created="Wed, 30 Nov 2011 14:04:46 -0600"  >&lt;p&gt;Vetted &amp;amp; assigned to &quot;Approved Backlog&quot; in preparation for next release.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10719" name="0001-Handle-URL-escaping-in-both-directions-in-java.io-Co.patch" size="5157" author="trptcolin" created="Sun, 27 Nov 2011 22:21:02 -0600" />
                    <attachment id="10726" name="0002-Handle-URL-escaping-in-both-directions-in-java.io-Co.patch" size="3224" author="trptcolin" created="Wed, 30 Nov 2011 12:31:30 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-876] #^:dynamic vars declared in a nested form are not immediately dynamic</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-876</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/890202da5db0fe1/e34819de71c6ea24?hl=en&amp;amp;lnk=gst&amp;amp;q=micah#e34819de71c6ea24&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/890202da5db0fe1/e34819de71c6ea24?hl=en&amp;amp;lnk=gst&amp;amp;q=micah#e34819de71c6ea24&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;(list&lt;br/&gt;
  (declare ^:dynamic p)&lt;br/&gt;
  (defn q [] @p))&lt;br/&gt;
(binding &lt;span class=&quot;error&quot;&gt;&amp;#91;p (atom 10)&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (q))&lt;/p&gt;</description>
                <environment>All</environment>
            <key id="15007">CLJ-876</key>
            <summary>#^:dynamic vars declared in a nested form are not immediately dynamic</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="slagyr">Micah Martin</assignee>
                                <reporter username="slagyr">Micah Martin</reporter>
                        <labels>
                    </labels>
                <created>Mon, 14 Nov 2011 09:55:19 -0600</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.3</version>
                <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27293" author="slagyr" created="Mon, 14 Nov 2011 10:10:07 -0600"  >&lt;p&gt;Rich fixed: &lt;a href=&quot;https://github.com/clojure/clojure/commit/535907eb2be47eaee0c385ae16436f39d52ffa96&quot;&gt;https://github.com/clojure/clojure/commit/535907eb2be47eaee0c385ae16436f39d52ffa96&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27406" author="stu" created="Fri, 2 Dec 2011 14:01:18 -0600"  >&lt;p&gt;test for fix already made&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10704" name="micah_testing_876.diff" size="1351" author="slagyr" created="Mon, 14 Nov 2011 10:10:07 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-868] core min and max should behave predictably when args include NaN</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-868</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The &lt;tt&gt;min&lt;/tt&gt; and &lt;tt&gt;max&lt;/tt&gt; functions in &lt;tt&gt;clojure.core&lt;/tt&gt; behave unpredictably when one or more of their arguments is &lt;tt&gt;Float/NaN&lt;/tt&gt; or &lt;tt&gt;Double/NaN&lt;/tt&gt;. This is because the current implementation assumes that &lt;tt&gt;&amp;gt;&lt;/tt&gt; provides a total ordering, but this is not the case when &lt;tt&gt;NaN&lt;/tt&gt; is added to the mix. This is an unfortunate fact of life when dealing with IEEE floating point numbers.&lt;/p&gt;

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;This fell out of the implementation naturally and I couldn&apos;t see a good reason to prefer one behavior to another.&lt;/p&gt;</comment>
                    <comment id="27398" author="stu" created="Fri, 2 Dec 2011 12:38:01 -0600"  >&lt;p&gt;The contagious version of the patch seems to me the right approach, assuming fidelity to Java (e.g. Math/max and Math/min) is the standard.&lt;/p&gt;</comment>
                    <comment id="27435" author="richhickey" created="Fri, 9 Dec 2011 09:28:32 -0600"  >&lt;p&gt;contagious ok&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10594" name="CLJ-868-contagious-NaN.patch" size="8086" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 11:05:15 -0500" />
                    <attachment id="10596" name="CLJ-868-ignore-NaN.patch" size="8738" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 13:12:04 -0500" />
                    <attachment id="10595" name="CLJ-868-throw-exception-on-NaN.patch" size="8558" author="bsmith.occs@gmail.com" created="Tue, 1 Nov 2011 12:15:25 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-853] Typo in the doc of get-in function</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-853</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;In &quot; where ks is a sequence of ke(ys.&quot;, &quot;ke(ys&quot; should be &quot;keys&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14684">CLJ-853</key>
            <summary>Typo in the doc of get-in function</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jingguo">Jingguo Yao</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Oct 2011 00:58:10 -0500</created>
                <updated>Tue, 25 Oct 2011 17:50:09 -0500</updated>
                    <resolved>Tue, 25 Oct 2011 17:50:09 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27084" author="steveminer@gmail.com" created="Sun, 23 Oct 2011 15:05:28 -0500"  >&lt;p&gt;The fix is not on the current master, and not in 1.4.0-alpha1.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJ-847] mapv, filterv</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-847</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Skip the intermediate sequence step when you know the result you want is a vector, i.e.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defn mapv
  ([f coll]
     (-&amp;gt; (reduce (fn [v o] (conj! v (f o))) (transient []) coll)
         persistent!)))

(defn filterv
  [pred coll]
  (when-let [s (seq coll)]
    (-&amp;gt; (reduce (fn [v o] (if (pred o) (conj! v o) v))
                (transient [])
                coll)
        persistent!)))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14667">CLJ-847</key>
            <summary>mapv, filterv</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Wed, 5 Oct 2011 02:06:28 -0500</created>
                <updated>Fri, 2 Dec 2011 10:23:25 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 10:23:25 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26895" author="richhickey" created="Wed, 5 Oct 2011 06:37:47 -0500"  >&lt;p&gt;There&apos;s no perf benefit for other arities of map, so for those just define in terms of (into [] (map ...))&lt;/p&gt;

&lt;p&gt;Why when-let in filterv? Not returning a vector then. You don&apos;t even use s.&lt;/p&gt;</comment>
                    <comment id="26897" author="alan@thinkrelevance.com" created="Wed, 5 Oct 2011 21:39:28 -0500"  >&lt;p&gt;What was the problem with defining &lt;tt&gt;mapv&lt;/tt&gt; and &lt;tt&gt;filterv&lt;/tt&gt; in terms of &lt;tt&gt;reducev&lt;/tt&gt;?  This is what I had in mind:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn reducev
  [f coll]
  (persistent! (reduce f (&lt;span class=&quot;code-keyword&quot;&gt;transient&lt;/span&gt; []) coll)))

(defn mapv
  ([f coll]
     (reducev #(conj! % (f %2)) coll))
  ([f coll &amp;amp; colls]
     (into [] (apply map f coll colls))))

(defn filterv
  [pred coll]
  (reducev #(&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (pred %2) (conj! % %2) %) coll))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26898" author="stu" created="Thu, 6 Oct 2011 06:18:19 -0500"  >&lt;p&gt;Alan: My original thought was that map and filter are boths fns from collection to collection. reduce is not, so making a reducev that pretends reduce is like map and filter is a little confusing.&lt;/p&gt;

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

&lt;p&gt;Rich: ok on both points, thanks.&lt;/p&gt;</comment>
                    <comment id="26904" author="richhickey" created="Fri, 7 Oct 2011 07:22:24 -0500"  >&lt;p&gt;The problem is - what are the semantics of reducev? Is this for the public or an implementation detail? mapv and filterv take the same f and pred as map and filter, but reducev doesn&apos;t take the same f as reduce, it requires a very special, implementation-dependent f.&lt;/p&gt;</comment>
                    <comment id="27170" author="hiredman" created="Wed, 26 Oct 2011 03:28:14 -0500"  >&lt;p&gt;why not implement in terms of reduce (inline reducev)?&lt;/p&gt;</comment>
                    <comment id="27300" author="stu" created="Tue, 15 Nov 2011 19:14:15 -0600"  >&lt;p&gt;I see no benefit in separate reducev&lt;/p&gt;</comment>
                    <comment id="27386" author="richhickey" created="Fri, 2 Dec 2011 08:12:45 -0600"  >&lt;p&gt;someone other than Stu should screen this&lt;/p&gt;</comment>
                    <comment id="27388" author="stuart.sierra" created="Fri, 2 Dec 2011 09:05:33 -0600"  >&lt;p&gt;Microbenchmark shows performance improvement:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (dotimes [i 5] (time (dotimes [j 10000] (vec (map inc (range 100))))))
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 119.799 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 80.959 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 75.242 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 75.622 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 73.646 msecs&quot;&lt;/span&gt;
nil
user=&amp;gt; (dotimes [i 5] (time (dotimes [j 10000] (mapv inc (range 100)))))
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 199.096 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 61.737 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 49.911 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 50.421 msecs&quot;&lt;/span&gt;
&lt;span class=&quot;code-quote&quot;&gt;&quot;Elapsed time: 48.437 msecs&quot;&lt;/span&gt;
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="27389" author="stuart.sierra" created="Fri, 2 Dec 2011 09:06:09 -0600"  >&lt;p&gt;Screened by the other Stuart.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10705" name="0847-mapv-filterv.patch" size="2585" author="stu" created="Tue, 15 Nov 2011 19:13:36 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

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

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

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

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

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

</description>
                <environment></environment>
            <key id="14653">CLJ-845</key>
            <summary>Unexpected interaction between protocol extension and namespaced method keyword/symbols</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="ataggart">Alexander Taggart</assignee>
                                <reporter username="ataggart">Alexander Taggart</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Sep 2011 19:46:43 -0500</created>
                <updated>Fri, 1 Mar 2013 12:47:03 -0600</updated>
                    <resolved>Fri, 16 Dec 2011 14:07:06 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26878" author="ataggart" created="Thu, 29 Sep 2011 20:01:39 -0500"  >&lt;p&gt;Simple test case to see the issue.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;=&amp;gt; (defprotocol P
     (self [p]))
P
=&amp;gt; (extend String
     P
     {::self identity})
nil
=&amp;gt; (self &quot;foo&quot;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: No implementation of method: :self of protocol: #&apos;user/P found for class: java.lang.String&amp;gt;
=&amp;gt; (defmacro try-extend-type [c]
     `(extend-type String
        P
        (self [p#] p#)))
#&apos;user/try-extend-type
=&amp;gt; (try-extend-type String)
nil
=&amp;gt; (self &quot;foo&quot;)
#&amp;lt;IllegalArgumentException java.lang.IllegalArgumentException: No implementation of method: :self of protocol: #&apos;user/P found for class: java.lang.String&amp;gt;
=&amp;gt; (keys (get-in P [:impls String]))
(:user/self)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="26905" author="richhickey" created="Fri, 7 Oct 2011 07:28:50 -0500"  >&lt;p&gt;Most of this is a non-issue. :self and :foo/self are not the same.&lt;/p&gt;

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

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

&lt;p&gt;is the only needed change.&lt;/p&gt;</comment>
                    <comment id="27447" author="stuart.sierra" created="Fri, 9 Dec 2011 15:26:55 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10377" name="clj-845-1.patch" size="1814" author="ataggart" created="Sat, 8 Oct 2011 02:31:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-843] clojure.lang.RT should provide a loadLibrary static method</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-843</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Right now, loading native libraries in Clojure doesn&apos;t work as expected because those libraries are loaded into the classloader of the invoking class (that is, Clojure&apos;s own classloader).&lt;/p&gt;

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

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

&lt;p&gt;To fix this, I am attaching a trivial patch that implements loadLibrary in RT.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14647">CLJ-843</key>
            <summary>clojure.lang.RT should provide a loadLibrary static method</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ghoseb">Baishampayan Ghose</reporter>
                        <labels>
                    </labels>
                <created>Mon, 26 Sep 2011 08:00:21 -0500</created>
                <updated>Fri, 2 Dec 2011 09:03:00 -0600</updated>
                    <resolved>Fri, 2 Dec 2011 09:03:00 -0600</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27327" author="chouser@n01se.net" created="Sun, 20 Nov 2011 16:02:13 -0600"  >&lt;p&gt;Tests would be nice, though I can see how getting such a test to work without 3rd party deps might be difficult.&lt;/p&gt;

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

&lt;p&gt;Nevertheless, the patch applies cleanly and appears to be what Rich asked for, so I&apos;m setting this to &quot;screened&quot;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10373" name="0001-Add-a-static-method-loadLibrary-to-clojure.lang.RT-t.patch" size="871" author="ghoseb" created="Mon, 26 Sep 2011 08:00:22 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-839] contains? does not work with java.util.Set</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-839</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;contains?&lt;/tt&gt; does support &lt;tt&gt;j.u.Map&lt;/tt&gt;, but not &lt;tt&gt;j.u.Set&lt;/tt&gt;. However it works with Clojure sets.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14631">CLJ-839</key>
            <summary>contains? does not work with java.util.Set</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Sep 2011 15:02:12 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                            <version>Release 1.2</version>
                <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27371" author="hiredman" created="Wed, 30 Nov 2011 05:25:35 -0600"  >&lt;p&gt;looks good&lt;/p&gt;

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

&lt;p&gt;contains? working with java.util.Sets seems like a good idea&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10360" name="0001-Make-contains-work-with-java.util.Set.patch" size="2607" author="mbrandmeyer" created="Wed, 14 Sep 2011 15:02:12 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-838] dev.clojure.org/display/doc/1. 3 renders badly</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-838</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The page &lt;a href=&quot;http://dev.clojure.org/display/doc/1.3&quot;&gt;http://dev.clojure.org/display/doc/1.3&lt;/a&gt; has markup issues: &lt;/p&gt;

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


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

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

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

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

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

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

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

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

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

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

&lt;p&gt;&lt;a href=&quot;https://github.com/bpsm/clojure/blob/CLJ-838/changes.md&quot;&gt;https://github.com/bpsm/clojure/blob/CLJ-838/changes.md&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="26853" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:17 -0500"  >&lt;p&gt;patches updated for f0b092b66 &quot;more changes.txt tweaks&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10369" name="0001-changes.txt-recoded-as-markdown.patch" size="23465" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:16 -0500" />
                    <attachment id="10370" name="0002-rename-changes.txt-changes.md.patch" size="534" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:16 -0500" />
                    <attachment id="10371" name="0003-add-example-for-Add-docstring-support-to-def.patch" size="705" author="bsmith.occs@gmail.com" created="Fri, 23 Sep 2011 15:18:17 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-837] java.lang.VerifyError when compiling deftype or defrecord with argument name starting with double underscore characters.</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-837</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The minimal test to trigger the verification error is :&lt;/p&gt;

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

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

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

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

&lt;p&gt;user=&amp;gt; (defrecord r &lt;span class=&quot;error&quot;&gt;&amp;#91;__&amp;#93;&lt;/span&gt;)&lt;br/&gt;
CompilerException java.lang.VerifyError: (class: user/r, method: create signature: (Lclojure/lang/IPersistentMap;)Luser/r&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/wink.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; Expecting to find object/array on stack, compiling:(NO_SOURCE_PATH:2) &lt;/p&gt;

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

&lt;p&gt;(class: clojure/data/priority_map/r, method: create signature: (Lclojure/lang/IPersistentMap;)Lclojure/data/priority_map/r&lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/wink.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; Expecting to find object/array on stack&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;Thrown class java.lang.VerifyError&amp;#93;&lt;/span&gt;&lt;/p&gt;

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

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

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


&lt;p&gt;Thankfully this is an easy fix.  However, the &quot;magic&quot; of __ prefixed names will go away.  That is, the following behavior will differ from v1.2:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;(defrecord R [__a ___b])
(:__a (R. 42 9))
;=&amp;gt; 42

(deftype T [__a])
(.__a (T. 36))
;=&amp;gt; 36

(deftype T2 [a b __meta])
;; AssertionError
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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

&lt;p&gt;+           2 (:___ b r)&lt;/p&gt;</comment>
                    <comment id="27405" author="stu" created="Fri, 2 Dec 2011 13:53:02 -0600"  >&lt;p&gt;0837-fixed is same as original patch, but with fixed unit test.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10730" name="0837-fixed.patch" size="5202" author="stu" created="Fri, 2 Dec 2011 13:53:02 -0600" />
                    <attachment id="10346" name="CLJ-837-double-underscore-type-records.diff" size="4278" author="fogus" created="Mon, 12 Sep 2011 12:33:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-817] print-deftype breaks when fields have dashes</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-817</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (deftype Foo [bar-quux])
user.Foo
user=&amp;gt; (def x (Foo. 1))
#&apos;user/x 
user=&amp;gt; x
IllegalArgumentException No matching field found: bar-quux &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; class user.Foo  clojure.lang.Reflector.getInstanceField (Reflector.java:289)
#user.Foo[user=&amp;gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

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


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

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

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

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

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

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

<item>
            <title>[CLJ-786] The docstring for defn omits any mention of pre- and post-conditions</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-786</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Currently, the doc string for defn does not mention pre- or post-conditions in either the arg list or description.  I always forget where it goes.  &lt;/p&gt;

&lt;p&gt;Current doc string:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;clojure.core/defn
([name doc-string? attr-map? [params*] body] [name doc-string? attr-map? ([params*] body) + attr-map?])
Macro
  Same as (def name (fn [params* ] exprs*)) or (def
    name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
    to the var metadata
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Attached is a patch to update defn to:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;clojure.core/defn
([name doc-string? attr-map? [params*] prepost-map? body] [name doc-string? attr-map? ([params*] prepost-map? body) + attr-map?])
Macro
  Same as (def name (fn [params* ] exprs*)) or (def
    name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
    to the var metadata. prepost-map defines a map with optional keys
    :pre and :post that contain collections of pre or post conditions.
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="14412">CLJ-786</key>
            <summary>The docstring for defn omits any mention of pre- and post-conditions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="alexmiller">Alex Miller</reporter>
                        <labels>
                    </labels>
                <created>Mon, 2 May 2011 10:16:58 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10215" name="defndoc.diff" size="1174" author="alexmiller" created="Mon, 2 May 2011 10:16:59 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-736] Docstring of defrecord (and =) does not correctly describe equality behavior for records. </title>
                <link>http://dev.clojure.org/jira/browse/CLJ-736</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/clojure/browse_frm/thread/eba691b38c45196b#&quot;&gt;http://groups.google.com/group/clojure/browse_frm/thread/eba691b38c45196b#&lt;/a&gt;&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

&lt;p&gt;But I don&apos;t want to hold release for discussion, so bumping this to approved backlog for further bikeshedding. &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="26753" author="stu" created="Fri, 2 Sep 2011 09:39:50 -0500"  >&lt;p&gt;Better yet, let&apos;s just agreed on my prose and call this done.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10005">Accepted</customfieldvalue>

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

<item>
            <title>[CLJ-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-369] Check for invalid interface method names</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-369</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Dashes are not allowed in method names. However gen-interface does not complain about invalid method names.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/c740b3835c437d0&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/c740b3835c437d0&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="13766">CLJ-369</key>
            <summary>Check for invalid interface method names</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="importer">Assembla Importer</reporter>
                        <labels>
                    </labels>
                <created>Tue, 1 Jun 2010 00:47:00 -0500</created>
                <updated>Fri, 23 Mar 2012 08:40:35 -0500</updated>
                    <resolved>Fri, 23 Mar 2012 08:40:35 -0500</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="23980" author="importer" created="Tue, 28 Sep 2010 08:01:00 -0500"  >&lt;p&gt;Converted from &lt;a href=&quot;http://www.assembla.com/spaces/clojure/tickets/369&quot;&gt;http://www.assembla.com/spaces/clojure/tickets/369&lt;/a&gt;&lt;br/&gt;
Attachments:&lt;br/&gt;
0001-Check-interface-methods-for.patch - &lt;a href=&quot;https://www.assembla.com/spaces/clojure/documents/b8JJfgBByr374seJe5cbCb/download/b8JJfgBByr374seJe5cbCb&quot;&gt;https://www.assembla.com/spaces/clojure/documents/b8JJfgBByr374seJe5cbCb/download/b8JJfgBByr374seJe5cbCb&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="23981" author="importer" created="Tue, 28 Sep 2010 08:01:00 -0500"  >&lt;p&gt;richhickey said: We might have some better method name validity checking somewhere (i.e. not just &apos;-&apos;, although that is probably most common)&lt;/p&gt;</comment>
                    <comment id="27754" author="stuart.sierra" created="Fri, 17 Feb 2012 14:44:36 -0600"  >&lt;p&gt;Screened.&lt;/p&gt;

&lt;p&gt;Without this patch, gen-interface can create methods with invalid names.&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-953] drop-while doc string wrong, nil instead of logical false</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-953</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&quot;Returns a lazy sequence of the items in coll starting from the first
-  item &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; which (pred item) returns nil.&quot;
+  item &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; which (pred item) returns logical &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;.&quot;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15279">CLJ-953</key>
            <summary>drop-while doc string wrong, nil instead of logical false</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="alan@thinkrelevance.com">Alan Dipert</assignee>
                                <reporter username="spoon16">Eric Schoonover</reporter>
                        <labels>
                        <label>documentation</label>
                        <label>patch,</label>
                    </labels>
                <created>Thu, 15 Mar 2012 16:50:50 -0500</created>
                <updated>Fri, 30 Mar 2012 09:16:31 -0500</updated>
                    <resolved>Fri, 30 Mar 2012 09:16:31 -0500</resolved>
                            <version>Release 1.3</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10992" name="take-while_doc_string_CLJ-953.diff" size="732" author="spoon16" created="Thu, 15 Mar 2012 16:55:04 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-854] flatten doc incorrect</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-854</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;Usage: (flatten x)&lt;br/&gt;
Takes any nested combination of sequential things (lists, vectors,&lt;br/&gt;
etc.) and returns their contents as a single, flat sequence.&lt;br/&gt;
(flatten nil) returns nil.&lt;/p&gt;

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

&lt;p&gt;(flatten nil) &lt;br/&gt;
;=&amp;gt; ()&lt;/p&gt;</description>
                <environment></environment>
            <key id="14685">CLJ-854</key>
            <summary>flatten doc incorrect</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="bsmith.occs@gmail.com">Ben Smith-Mannschott</assignee>
                                <reporter username="chris">Chris Rosengren</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Oct 2011 01:24:02 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27074" author="bsmith.occs@gmail.com" created="Wed, 19 Oct 2011 12:45:20 -0500"  >&lt;p&gt;attached patch to &quot;document that (flatten nil) returns an empty sequence&quot;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10491" name="CLJ-854.patch" size="791" author="bsmith.occs@gmail.com" created="Wed, 19 Oct 2011 12:45:20 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-832] reify implements IObj but nowhere states so</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-832</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;&lt;tt&gt;reify&lt;/tt&gt; does implement &lt;tt&gt;clojure.lang.IObj&lt;/tt&gt; but nowhere states so. The attached patch fixes the docstring and adds an example how metadata is transferred from the &lt;tt&gt;reify&lt;/tt&gt; form to the object.&lt;/p&gt;</description>
                <environment>1.3.0-beta1</environment>
            <key id="14583">CLJ-832</key>
            <summary>reify implements IObj but nowhere states so</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="mbrandmeyer">Meikel Brandmeyer</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Aug 2011 16:17:13 -0500</created>
                <updated>Fri, 9 Dec 2011 10:00:59 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:00:59 -0600</resolved>
                            <version>Release 1.4</version>
                                <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="10320" name="0001-Fix-docstring-of-reify.patch" size="1063" author="mbrandmeyer" created="Thu, 25 Aug 2011 16:17:15 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

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

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

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

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

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

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

&lt;p&gt;but the emitted byte code still holds the var for the macro &apos;f&apos; in a static field.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14397">CLJ-773</key>
            <summary>macros that are expanded away still have their vars referenced in the emitted byte code</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="hiredman">Kevin Downey</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Apr 2011 20:00:21 -0500</created>
                <updated>Fri, 9 Dec 2011 10:01:00 -0600</updated>
                    <resolved>Fri, 9 Dec 2011 10:01:00 -0600</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26357" author="hiredman" created="Thu, 7 Apr 2011 20:21:26 -0500"  >&lt;p&gt;patch to not register vars during macro expansion&lt;/p&gt;</comment>
                    <comment id="27370" author="hiredman" created="Tue, 29 Nov 2011 19:50:06 -0600"  >&lt;p&gt;patch still applies cleanly and all tests pass&lt;/p&gt;</comment>
                    <comment id="27403" author="stu" created="Fri, 2 Dec 2011 13:38:06 -0600"  >&lt;p&gt;tests pass and approach seems sound&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10181" name="clj-773.diff" size="1728" author="hiredman" created="Thu, 7 Apr 2011 20:21:26 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

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

<item>
            <title>[CLJ-683] broken example in ns docstring</title>
                <link>http://dev.clojure.org/jira/browse/CLJ-683</link>
                <project id="10010" key="CLJ">Clojure</project>
                        <description>&lt;p&gt;The docstring for `ns` currently has a line&lt;/p&gt;

&lt;p&gt;    (:require (clojure.contrib sql sql.tests))&lt;/p&gt;

&lt;p&gt;which fails with&lt;/p&gt;

&lt;p&gt;    Java.lang.Exception: lib names inside prefix lists must not contain periods&lt;/p&gt;

&lt;p&gt;because of the `sql.tests` value. While the `:use` line will likely also fail,&lt;br/&gt;
that one - `(:use (my.lib this that))` - is clearly just an example, whereas the&lt;br/&gt;
`:require` line actually shows an incorrect syntax that will never work.&lt;/p&gt;

&lt;p&gt;The latest patch swaps `sql.tests` in the docstring for another contrib library, `combinatorics`.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14291">CLJ-683</key>
            <summary>broken example in ns docstring</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="6" iconUrl="http://dev.clojure.org/jira/images/icons/status_closed.gif">Closed</status>
                    <resolution id="1">Completed</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Sat, 27 Nov 2010 22:07:17 -0600</created>
                <updated>Fri, 30 Mar 2012 09:16:31 -0500</updated>
                    <resolved>Fri, 30 Mar 2012 09:16:31 -0500</resolved>
                                            <fixVersion>Release 1.4</fixVersion>
                                        <due></due>
                    <votes>2</votes>
                        <watches>3</watches>
                        <comments>
                    <comment id="25985" author="trptcolin" created="Tue, 30 Nov 2010 14:56:45 -0600"  >&lt;p&gt;This patch is the correct format; using `git format-patch`, instead of dumping the output of `git diff` to a file.  Sorry about that.&lt;/p&gt;</comment>
                    <comment id="27990" author="stuart.sierra" created="Fri, 23 Mar 2012 08:35:40 -0500"  >&lt;p&gt;Trivial docstring fix. Screened.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10038" name="0001-Fix-ns-docstring-to-avoid-dotted-lib-names.patch" size="785" author="trptcolin" created="Tue, 30 Nov 2010 14:56:45 -0600" />
                    <attachment id="10033" name="ns-docstring-exception-fix.patch" size="469" author="trptcolin" created="Sat, 27 Nov 2010 22:07:17 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Approval</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10007">Ok</customfieldvalue>

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

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>
</channel>
</rss>